我有一个 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
}
}
但它给了我这个错误:*对象引用未设置为对象的实例。*
当按下/点击这些按钮时,我需要执行一些代码。我已经通过使用以下事件完成了这个目标:
它们都工作正常,但是......当我点击列标题时也会被触发。我想点击一个只在点击按钮时触发的事件......有没有?
答案 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
}