Controlador C # DataGridView com um matrizes no VS2008
-
11-07-2019 - |
Pergunta
Eu estou tendo alguns problemas com um elemento datagridview que estou usando no VS2008. Este DataGridView é realmente um guia em um elemento TabControl.
Eu dei-lhe 5 colums que precisam ser preenchidos com elementos de um objeto costum eu fiz.
É basicamente uma aplicação pequena biblioteca que contém uma classe principal e vários classificada derivada dela. Todos eles têm um método ToString (), que representa os dados como uma série de palavras-chave que contêm os valores necessários para me encher o datagridview.
Eu só preciso a primeira 5, porém, alguns objetos terão até 12 palavras-chave. Atualmente, Sempre que eu adicionar um objeto, o datagrid não encher-se, em vez disso, acrescenta uma quantidade de colunas equall à quantidade de palavras-chave do objeto específico tem.
O que eu estou fazendo atualmente é o seguinte:
public void libDataGrid_Click(object sender, EventArgs e)
{
if(this.manager.Lib.LibList[0] != null)
{
libDataGrid.DataSource = this.manager.Lib.LibList;
libDataGrid.Refresh();
}
}
retornos this.manager.Lib.LibList
e ArrayList, em que todos os objetos são armazenados. O ArrayList pode conter elementos de todas as classes derivadas, mas uma vez que eles estão todos conectados, a representação de cadeia sempre conterá os elementos que eu preciso para preencher a grade.
Não vejo como posso filtrar apenas os cinco primeiros e eles tê-los colocado nas colums corretas.
E outra coisa. Atualmente eu só pode atualizar o DataGridView clicando nele. Deve mudar quando eu mudar para ele mudar para sua guia específico sobre a média tabcontrol I.
Eu tentei adicionar um argumento para SelectedIndexChanged, mas que não faz nada realmente ... Ou pelo menos, não parece fazer nada.
O que quero dizer é que eu comentei o código acima e adicionado este em vez disso:
public void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
libDataGrid.DataSource = this.manager.Lib.LibList;
libDataGrid.Refresh();
}
Isso atualiza-lo toda vez que o guia é alterada, não importa para qual. Eu tinha que remover a instrução if, pois me deu uma exceção. Provavelmente porque o comprimento do ArrayList não está definido na inicialização.
Solução
Estou um pouco confuso com a pergunta, mas aqui estão alguns pensamentos:
-
DataGridView
tem umAutoGenerateColumn
s propriedade; se você não quer que ele para criar suas próprias colunas, defina como false - Para vincular a colunas existentes, a
DataPropertyName
deve ser definida em cada -
DataGridView
(em cmomon com qualquer controle de lista usandoTypeDescriptor
) será extremamente preferemList<T>
(para algunsT
! =object
) paraArrayList
, uma vez que pode obter meta-dados, mesmo para uma lista vazia. Em geral, em 2,0 usandoArrayList
é um erro.
Outras dicas
Eu só posso dar uma resposta parcial, mas eu acho que a razão pela qual
public void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
libDataGrid.DataSource = this.manager.Lib.LibList;
libDataGrid.Refresh();
}
não está funcionando, é porque você precisa adicionar esta linha onde TabControl1 está sendo inicializado. Eu tive esse problema em que VS não vai fazer isso em si.
tabControl1.SelectedIndexChanged += new EventHandler(tabControl1_SelectedIndexChanged);
Se eu estou entendendo o seu problema, parece semelhante a um problema que eu estava lutando com recentemente neste segmento em DataGridViews em C # /. NET2.0
Tente chamar:
libDataGrid.Invalidate();
Isso deve forçar o Windows para redesenhar seu controle. Não há necessidade de recolocar a fonte de dados e atualizar. (Eu acho que você pode comentar com segurança para fora aqueles 2 linhas).
Também:? Qual foi a excepção de que estavam recebendo
E você usar o "Assistente de Configuração de Fonte de Dados" para ajudá-lo com o dataGridView?