如何在WinForm DataGridView事件处理程序中引用列名而不是e.ColumnIndex?

时间:2009-07-15 16:26:44

标签: winforms datagridview

WinForm DataGridView的某些事件处理程序将DataGridViewCellEventArgs作为参数,将ColumnIndex作为该参数的属性。

ColumnIndex是表示列的序号#。

的数字

有没有办法从该参数而不是列索引引用列名?

所以不要这样做:

if (e.ColumnIndex == 1)

我更喜欢这样的东西:

if (e.ColumnName == "CustomerName")

因为如果列改变了它的位置,它将破坏代码。

4 个答案:

答案 0 :(得分:10)

不确定。它当然不是直接 in DataGridViewCellEventArgs,但它很容易获得。在您的事件处理程序中:

DataGridView dgv = (DataGridView)sender;
string columnName = dgv.Columns[e.ColumnIndex].Name;

答案 1 :(得分:5)

if (e.ColumnIndex == dgv.Columns["CustomerName"].Index )
{
    and so on....            
}

答案 2 :(得分:3)

上面的答案很有效,但是如果你必须经常引用单元格索引,那么我只需要将私有int成员添加到表单中,将它们命名为“idxMeaningfulColumnNameHere”,然后在Form的构造函数中初始化这些成员。我发现这种方式更容易。

idxMeaningfulColumnNameHere =
    this.YourDataGridViewNameHere.Columns["ColumnNameHere"].Index

答案 3 :(得分:0)

以下是要添加到DGV的自定义方法。

<Extension()>
Friend Function getColumnIndexByName(ByRef dgv As DataGridView, ByRef colName As String) As Integer
    For Each column As DataGridViewColumn In dgv.Columns
        If column.Name = colName Then Return column.Index
    Next
    Try
        Throw New Exception("Column Name not Found")
    Catch ex As Exception
        MessageBox.Show(colName & ": " + ex.Message)
    End Try
    Return -1
End Function

你可以这样做:

If dgv1.getColumnIndexByName("SOME_COLUMN_NAME") = e.ColumnIndex Then Do_something()