IMAGEM EM BOTÃO DO DATAGRIDVIEW
Bom dia, galera.
Conforme a imagem anexa, eu preciso fazer assim: o usuário clicou no botão para adicionar:
foi criada uma nova linha no DataGridView e o cursor está posicionado na coluna que vai ser editada.
Só que eu queria que nesta nova linha, ao invés de aparecer a imagem para deletar, aparecesse a outra imagem que é para adicionar.
Como eu faço para alterar a imagem somente nesta linha que eu estou editando?
O código para mostrar a imagem nas colunas que estou usando é esse:
Conforme a imagem anexa, eu preciso fazer assim: o usuário clicou no botão para adicionar:
foi criada uma nova linha no DataGridView e o cursor está posicionado na coluna que vai ser editada.
Só que eu queria que nesta nova linha, ao invés de aparecer a imagem para deletar, aparecesse a outra imagem que é para adicionar.
Como eu faço para alterar a imagem somente nesta linha que eu estou editando?
O código para mostrar a imagem nas colunas que estou usando é esse:
private void dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex == 2 && e.RowIndex >= 0)
{
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
e.Graphics.DrawImage(Image.FromFile(Application.StartupPath + [Ô]\\imagens\\delete.png[Ô]), e.CellBounds.Left + 6, e.CellBounds.Top + 3);
e.Handled = true;
}
}
Então cara, você vai ter que colocar uma nova condição aà nesse evento.
Antes de tudo, logo no final da sub-rotina do botão Adicionar use o método InvalidateCell. Ele vai forçar o evento a disparar pra redesenhar a célula.
Uma vez que o evento é disparado, basta você modificar a subrotina dele.
Algo do tipo:
Sendo a variável CliqueNoBotaoAdicionar um Flag booleano pra indicar se você clicou ou não no botão. Pode usar a própria propriedade Tag da célula na hora de clicar no botão, e passar ela pra true.
Acredito que isso deve funcionar.
Antes de tudo, logo no final da sub-rotina do botão Adicionar use o método InvalidateCell. Ele vai forçar o evento a disparar pra redesenhar a célula.
Uma vez que o evento é disparado, basta você modificar a subrotina dele.
Algo do tipo:
if (e.ColumnIndex == 2 && e.RowIndex >= 0)
{
e.Paint(e.CellBounds, DataGridViewPaintParts.All);
if (!CliqueNoBotaoAdicionar)
{
e.Graphics.DrawImage(Image.FromFile(Application.StartupPath + [Ô]\\imagens\\delete.png[Ô]), e.CellBounds.Left + 6, e.CellBounds.Top + 3);
}
else
{
e.Graphics.DrawImage(Image.FromFile(Application.StartupPath + [Ô]\\imagens\\add.png[Ô]), e.CellBounds.Left + 6, e.CellBounds.Top + 3); //Repare que aqui eu mudei o nome do arquivo
CliqueNoBotaoAdicionar = false;
}
e.Handled = true;
}
Sendo a variável CliqueNoBotaoAdicionar um Flag booleano pra indicar se você clicou ou não no botão. Pode usar a própria propriedade Tag da célula na hora de clicar no botão, e passar ela pra true.
Acredito que isso deve funcionar.
Valeu DS2T, não funcionou, não. Porém muito obrigado por tentar me ajudar.
Reformulei a tela e fiz de outra maneira. Estou encerrando, pois havia esquecido de fechar o tópico. Desculpas.
Reformulei a tela e fiz de outra maneira. Estou encerrando, pois havia esquecido de fechar o tópico. Desculpas.
Tópico encerrado , respostas não são mais permitidas