WinForm DataGridView
的某些事件处理程序将DataGridViewCellEventArgs
作为参数,将ColumnIndex
作为该参数的属性。
ColumnIndex
是表示列的序号#。
有没有办法从该参数而不是列索引引用列名?
所以不要这样做:
if (e.ColumnIndex == 1)
我更喜欢这样的东西:
if (e.ColumnName == "CustomerName")
因为如果列改变了它的位置,它将破坏代码。
答案 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()