PROBLEMAS COM DATAGRIDVIEW
Consegui preencher o grid usando um DataTable, porém estou com dois problemas:
1- O tÃtulo da coluna vem igual ao nome da coluna na tabela e queria alterar, porém não consigo. O código que uso é:
2- O grid tem uma coluna a esquerda, que exibe uma seta (linha selecionada) e um asterÃstico (ao final), mas eu quero ocultar isso e não achei como. Alguém sabe como tirar essa coluna do grid? Na coleção de columns, o Zero é sempre da primeira coluna do banco, como no código que oculto acima, e não achei uma propriedade para isso.
3- Tenho alguns campos de tabelas no banco que guardo um Ãndice (0, 1, 2. etc...) mas na hora de exibir no grid queria substituir. Queria ter populado o grid manualmente, mas como não sei, fiz a associação direta com o DataSource dele. Alguém sabe como eu posso identificar o valor de uma certa coluna ou colunas e comparar o valor para atribuir outro antes de popular o grid?
Acho que não seria viável após popular o grid, fazer um loop na coluna e ir alterando pois deverá comprometer muito o desempenho do sistema, com tabelas grandes.
1- O tÃtulo da coluna vem igual ao nome da coluna na tabela e queria alterar, porém não consigo. O código que uso é:
public void AtualizarGrid(string mySQL)
{
// comunicação com a classe BLL
DepartamentosBLL obj = new DepartamentosBLL();
DataTable dt = new DataTable();
dt = obj.MontaGridViewDepto(mySQL);
this.grid.DataSource = dt;
// personalizar layout do grid
for(int i=0;i < grid.ColumnCount;i++)
{
if(grid.Columns[i].Name == [Ô]DEPTO[Ô]) //aqui procuro o nome que vem do banco se encontrar então altera
{
grid.Columns[i].Name = [Ô]Departamentos[Ô]; // o programa entra aqui e altera
}
}
grid.Refresh(); [txt-color=#e80000]// tentei isso mas não resolveu, não atualiza o texto do cabeçalho[/txt-color]
this.grid.Columns[0].Visible = false; // oculto coluna
this.grid.Columns[1].Visible = true;
this.grid.Columns[2].Visible = false; // oculto coluna
this.grid.Columns[3].Visible = false; // oculto coluna
this.grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
2- O grid tem uma coluna a esquerda, que exibe uma seta (linha selecionada) e um asterÃstico (ao final), mas eu quero ocultar isso e não achei como. Alguém sabe como tirar essa coluna do grid? Na coleção de columns, o Zero é sempre da primeira coluna do banco, como no código que oculto acima, e não achei uma propriedade para isso.
3- Tenho alguns campos de tabelas no banco que guardo um Ãndice (0, 1, 2. etc...) mas na hora de exibir no grid queria substituir. Queria ter populado o grid manualmente, mas como não sei, fiz a associação direta com o DataSource dele. Alguém sabe como eu posso identificar o valor de uma certa coluna ou colunas e comparar o valor para atribuir outro antes de popular o grid?
Acho que não seria viável após popular o grid, fazer um loop na coluna e ir alterando pois deverá comprometer muito o desempenho do sistema, com tabelas grandes.
com respeito a popular o grid, você pode adicionar colunas ao mesmo e definir se serão visiveis ou não.
para criar um link entre a tabela e o datagrid você preenche a propriedade DataPropertyName com o nome do campo na consulta da tabela.
depois para mudar valores faça o seguinte:
nos eventos do datagrid defina o evento cellformating como abaixo:
lembrando que:
o e.value é um objecto e precisa ser convertido para o tipo a comparar;
no caso acima definir .ToString() para comparar um texto;
vc pode usar [Ô]if[Ô] também, em casos pequenos prefiro fazer como acima.
para criar um link entre a tabela e o datagrid você preenche a propriedade DataPropertyName com o nome do campo na consulta da tabela.
depois para mudar valores faça o seguinte:
nos eventos do datagrid defina o evento cellformating como abaixo:
Citação:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex==dataGridView1.Columns[[Ô]nomedacoluna[Ô]].Index)
{
e.Value = (e.Value.ToString() == [Ô]teste[Ô] ? [Ô]beta[Ô] : [Ô]full[Ô]);
}
}
lembrando que:
o e.value é um objecto e precisa ser convertido para o tipo a comparar;
no caso acima definir .ToString() para comparar um texto;
vc pode usar [Ô]if[Ô] também, em casos pequenos prefiro fazer como acima.
Littleboy bom dia.
Não entendi sua explicação. Na realidade eu não quero deixar o grid vinculado a tabela, e sim após popul-a-lo destruir o DataTable, pois só irei usá-lo para trazer os dados no load do form ou para atualizar o grid quando necessário.
Tentei fazer o que disse, mas deu erro na linha
Pergunta: Esse código é pra trocar o tÃtulo da coluna ou o valor da célula (cada registro)?
Não entendi também essa estrutura: Pode explicar cada parte e o que é full?
e.Value = (e.Value.ToString() == [Ô]teste[Ô] ? [Ô]beta[Ô] : [Ô]full[Ô]);
Se isso for para trocar o conteúdo ex: Se value = 1 então value = Sim , isso funcionaria sem deixar vÃnculo com a tabela com expliquei antes?
Sobre trocar o tÃtulo da coluna, resolvi de um modo mais fácil ( que não me passou antes pela cabeça), troquei o nome direto no SQL (as NovoNome).
Se alguém souber como resolver as outras dúvidas do post (2 e 3) agradeço.
Não entendi sua explicação. Na realidade eu não quero deixar o grid vinculado a tabela, e sim após popul-a-lo destruir o DataTable, pois só irei usá-lo para trazer os dados no load do form ou para atualizar o grid quando necessário.
Tentei fazer o que disse, mas deu erro na linha
if (e.ColumnIndex==dataGridView1.Columns[[Ô]nomedacoluna[Ô]].Index)
como na imagem.Pergunta: Esse código é pra trocar o tÃtulo da coluna ou o valor da célula (cada registro)?
Não entendi também essa estrutura: Pode explicar cada parte e o que é full?
e.Value = (e.Value.ToString() == [Ô]teste[Ô] ? [Ô]beta[Ô] : [Ô]full[Ô]);
Se isso for para trocar o conteúdo ex: Se value = 1 então value = Sim , isso funcionaria sem deixar vÃnculo com a tabela com expliquei antes?
Sobre trocar o tÃtulo da coluna, resolvi de um modo mais fácil ( que não me passou antes pela cabeça), troquei o nome direto no SQL (as NovoNome).
Se alguém souber como resolver as outras dúvidas do post (2 e 3) agradeço.
desculpe o beta e full ai, não tem nada haver com o codigo é só uma string de exemplo
isso é uma forma mais simples de fazer um if
vc poderia fazer com if tb:
em relação ao datatable se você destruir ele não aparece no Gridview. o objeto precisa existir para ser exibido.
aquilo ali que coloquei do
você deve criar colunas em tempo de criação. vc tem que criar as colunas isso ai só funciona desta maneira com a coluna já criada
se não quer criar as counas você pode definir
isso é uma forma mais simples de fazer um if
Citação:(comparação ? valor verdadeiro: valor falso)
vc poderia fazer com if tb:
Citação:if(e.Value.ToString()==[Ô]teste[Ô])
{
e.value=[Ô]beta[Ô];
}
else
{
e.value=[Ô]full[Ô];
}
em relação ao datatable se você destruir ele não aparece no Gridview. o objeto precisa existir para ser exibido.
aquilo ali que coloquei do
Citação:if (e.ColumnIndex==dataGridView1.Columns[[Ô]nomedacoluna[Ô]].Index)
você deve criar colunas em tempo de criação. vc tem que criar as colunas isso ai só funciona desta maneira com a coluna já criada
se não quer criar as counas você pode definir
Citação:if (e.ColumnIndex==codigodacoluna)
Muito obrigado, funcionou.
Tópico encerrado , respostas não são mais permitidas