我在datagridview EDIT&上有2个按钮。删除。我检查了cellContentClick事件e.columnIndex.Once我点击EDIT按钮它工作正常,然后点击DELETE按钮然后我得到e.columnIndex是0.
这是我的代码
template<class Visitor>
void visit(Visitor v,Struct1 s)
{
}
答案 0 :(得分:0)
由于缺乏信息,这是我的猜测:)
我假设在设置DataSource
后添加了按钮列
并且该列的索引变为6和7(生成列之后的最后一列)
按下&#34;编辑&#34;按钮更新一些值
并通过将DataGridView
设置为新数据来更新DataSource
- 这是您案例中的问题
当您第二次设置DataSource
时,DataGridView
会删除所有生成的列并根据新数据源再次生成列
DataGridView
删除生成的列时出现问题,然后由您添加的按钮列将不会被删除,逻辑上它们的索引将变为0和1
解决方案是按照Name
创建按钮列时,为它们添加唯一名称
DataGridViewButtonColumn editcolumn = new DataGridViewButtonColumn();
editcolumn.Name = "myDatagridviewEditColumn";
然后使用名称进行比较
private void datagridview.CellContentClick(object sender, Datagridviewcelleventargs e)
{
If(e.RowIndex < 0 || e.ColumnIndex < 0)
return;
string columnName = this.YourDataGridView.Columns[e.ColumnIndex].Name;
if (columnName.Equals("myDatagridviewEditColumn") == true)
{
//code for EDIT
}
if (columnName.Equals("myDatagridviewDeleteColumn") == true)
{
//code for DELETE
}
}
答案 1 :(得分:-1)
从描述中不清楚,听 CellContentClick 事件的目标是什么,以及您想要跟踪所选列索引的操作。
可能 CurrentCellChanged 事件会更适合您的情况吗?
我建议您使用开关语句,以避免使用多个 if 块,例如:
private void dataGridView1_CurrentCellChanged(object sender, EventArgs e)
{
var gridView = sender as DataGridView;
if (gridView == null || gridView.CurrentCell == null) { return; }
switch (gridView.CurrentCell.ColumnIndex)
{
case 6:
// edit
break;
case 7:
// delete code
break;
}
}