Как ссылаться на имя столбца вместо e.ColumnIndex в обработчиках событий WinForm DataGridView? - PullRequest
7 голосов
/ 15 июля 2009

Некоторые обработчики событий для WinForm DataGridView имеют DataGridViewCellEventArgs в качестве параметра и ColumnIndex в качестве свойства этого аргумента.

ColumnIndex - число, представляющее порядковый номер столбца.

Есть ли способ ссылаться на имя столбца из этого аргумента вместо индекса столбца?

Так что вместо того, чтобы делать:

if (e.ColumnIndex == 1)

Я предпочитаю что-то вроде:

if (e.ColumnName == "CustomerName")

потому что, если столбец изменит свою позицию, он нарушит код.

Ответы [ 4 ]

10 голосов
/ 15 июля 2009

Конечно. Конечно, это не напрямую в DataGridViewCellEventArgs, но его легко получить. В вашем обработчике событий:

DataGridView dgv = (DataGridView)sender;
string columnName = dgv.Columns[e.ColumnIndex].Name;
5 голосов
/ 18 февраля 2010
if (e.ColumnIndex == dgv.Columns["CustomerName"].Index )
{
    and so on....            
}
3 голосов
/ 10 мая 2013

Ответы выше прекрасно работают, но если вам придется многократно ссылаться на индекс ячейки, я просто добавлю в форму частные члены int, назову их «idxMeaningfulColumnNameHere», а затем инициализирую эти члены в конструкторе формы. Так мне было гораздо проще.

idxMeaningfulColumnNameHere =
    this.YourDataGridViewNameHere.Columns["ColumnNameHere"].Index
0 голосов
/ 12 февраля 2014

Вот пользовательский метод, который будет добавлен к вашему 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...