Tutorial :How to reference column name instead of e.ColumnIndex in WinForm DataGridView event handlers?



Question:

Some event handlers for the WinForm DataGridView have DataGridViewCellEventArgs as a parameter and a ColumnIndex as a property of that argument.

ColumnIndex is a number representing the column's ordinal #.

Is there a way to reference a column name from that argument instead of column index?

So instead of doing:

if (e.ColumnIndex == 1)  

I prefer something like:

if (e.ColumnName == "CustomerName")  

because if a column changes its position, it will break the code.


Solution:1

Sure. It's of course not directly in the DataGridViewCellEventArgs, but it's easily obtainable. In your event handler:

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


Solution:2

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


Solution:3

The answers above works great but if you have to reference cell index a lot then I will just add private int members to the form, name them "idxMeaningfulColumnNameHere", then initialize these members in Form's constructor. I found it much easier this way.

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


Solution:4

Here is a custom method to be added to your 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  

With that you can do something like:

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

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »