0

I'm trying add buttons into DataGridView to delete items from it. To do it, I'm trying to use DataGridViewButtonCell, because I saw that it can contain images. I wan't my button to stay on the first column of DataGridView, but I have an IList that I use as DataSource and I don't know how to add that button to the GridView in this case.

How could I do this ?

Here is my code:

private void setDataSource(){
   grid.DataSource = ivDAO.findAllItemVenda(venda);
   grid.ClearSelection();
   defineGrid();
}  

private void defineGrid() {
            //header 
            grid.Columns["produto"].HeaderText = "Produto";
            grid.Columns["valorUn"].HeaderText = "Unit.R$";
            grid.Columns["quantidade"].HeaderText = "Qtd.";
            grid.Columns["total"].HeaderText = "Total R$";

            //hide
            grid.Columns["id"].Visible = false;
            grid.Columns["venda"].Visible = false;

            //width
            grid.Columns["produto"].Width = 235;
            grid.Columns["valorUn"].Width = 80;
            grid.Columns["quantidade"].Width = 50;
            grid.Columns["total"].Width = 80;

            //align
            grid.Columns["valorUn"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["quantidade"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["total"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

            //add button
            DataGridViewButtonCell btnDelete = new DataGridViewButtonCell();
            btnDelete.Value = "delete";
            grid.Rows.Add(btnDelete);
        }

I want this.

enter image description here

zx485
  • 28,498
  • 28
  • 50
  • 59
FernandoPaiva
  • 4,410
  • 13
  • 59
  • 118

1 Answers1

0

Done. Finally I did what I wanted.

I did.

private void setDataSource(){
   //added column with image before set datasource
   if (grid.Columns["Del"] == null) {
                    var col = new DataGridViewImageColumn();
                    col.HeaderText = "";
                    col.Name = "Del";
                    col.Image = TerminalControleDeVendas.Properties.Resources.trash;
                    grid.Columns.Add(col);
                }
   grid.DataSource = ivDAO.findAllItemVenda(venda);
   grid.ClearSelection();
   defineGrid();
}  


private void defineGrid() {
            //header 
            grid.Columns["produto"].HeaderText = "Produto";
            grid.Columns["valorUn"].HeaderText = "Unit.R$";
            grid.Columns["quantidade"].HeaderText = "Qtd.";
            grid.Columns["total"].HeaderText = "Total R$";

            //hide
            grid.Columns["id"].Visible = false;
            grid.Columns["venda"].Visible = false;

            //width
            grid.Columns["Del"].Width = 30;
            grid.Columns["produto"].Width = 220;
            grid.Columns["valorUn"].Width = 80;
            grid.Columns["quantidade"].Width = 50;
            grid.Columns["total"].Width = 80;

            //align
            grid.Columns["valorUn"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["quantidade"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            grid.Columns["total"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

        }

Finally I added the handler to delete item

private void grid_CellContentClick(object sender, DataGridViewCellEventArgs e) {
            if (this.grid.Columns[e.ColumnIndex].Name == "Del") {
                DialogResult confirma = MessageBox.Show("Deseja realmente excluir o item ?", "Excluir", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (confirma == DialogResult.Yes) {
                    ItemVenda iv = (ItemVenda)grid.CurrentRow.DataBoundItem;
                    ivDAO.delete(iv);                        
                }
            }            
        }

The result is

enter image description here

FernandoPaiva
  • 4,410
  • 13
  • 59
  • 118