datagridView e.columnindex遇到麻烦

时间:2015-07-24 08:11:59

标签: c# datagridview

我在datagridview EDIT&上有2个按钮。删除。我检查了cellContentClick事件e.columnIndex.Once我点击EDIT按钮它工作正常,然后点击DELETE按钮然后我得到e.columnIndex是0.

这是我的代码

template<class Visitor>
void visit(Visitor v,Struct1 s)
{
}

2 个答案:

答案 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;

    }

}