DataGridView按钮单击“事件”

时间:2014-05-25 20:37:23

标签: c# datagridview

我有一个 DataGridView ,我使用 DataAdapter + DataTable 填充。
我使用以下代码创建按钮

 #region CreatGridButtons
            //Botão DELETAR
            DataGridViewButtonColumn btn_deletar = new DataGridViewButtonColumn();
            btn_deletar.HeaderText = "DELETAR";
            btn_deletar.Text = "DELETAR";
            btn_deletar.Name = "btn_apagar";
            btn_deletar.UseColumnTextForButtonValue = true; 

            DataGridViewButtonColumn btn_editar = new DataGridViewButtonColumn();
            btn_editar.HeaderText = "EDITAR";
            btn_editar.Text = "EDITAR";
            btn_editar.Name = "btn_editar";
            btn_editar.UseColumnTextForButtonValue = true; 

            dgv_tipo_despesas.Columns.Add(btn_deletar);
            dgv_tipo_despesas.Columns.Add(btn_editar);

            #endregion  

另外,我试过这个:

private void dgv_tipo_despesas_CellClick_1(object sender, DataGridViewCellEventArgs e)
  {
    if (e.RowIndex < 0 || dgv_tipo_despesas.cell) return;
    {
         ///ExecuteSomeCode
    }
  }

但它给了我这个错误:*对象引用未设置为对象的实例。*

按下/点击这些按钮时,我需要执行一些代码。我已经通过使用以下事件完成了这个目标:

  • DataGridView_CellClick
  • DataGridView_CellContentClick

它们都工作正常,但是......当我点击列标题时也会被触发。我想点击一个只在点击按钮时触发的事件......有没有?

3 个答案:

答案 0 :(得分:1)

您应该能够使用这些事件,但检查 e.Source (或类似的东西)是您想要点击的单元格之一。

答案 1 :(得分:1)

根据MSDN它看起来不像,因为标题也是一行。

您可以使用DataGridViewCellEventArgs.RowIndex属性来确定单击是否发生在按钮单元格中而不是列标题上。

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewbuttoncolumn(v=vs.110).aspx

答案 2 :(得分:0)

我找到了解决方案,我只需要检查它是否不是 DataGridViewButtomColumn .RowIndex 。像这样:

if (!(MyDataGridView.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex != -1)) return;
    {

       //MyCodeHere
    }