PROBLEMAS COM DATAGRIDVIEW

LUIS.HERRERA 05/03/2013 15:42:43
#419949
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 é:

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.
LITTLEBOY 05/03/2013 19:27:19
#419972
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:
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.
LUIS.HERRERA 06/03/2013 08:05:58
#419982
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
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.

LITTLEBOY 06/03/2013 08:42:12
#419986
Resposta escolhida
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
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)

LUIS.HERRERA 06/03/2013 11:31:23
#420008
Muito obrigado, funcionou.
Tópico encerrado , respostas não são mais permitidas