2009-07-15 4 views
6

Alcuni gestori di eventi per la WinForm DataGridView hanno DataGridViewCellEventArgs come parametro e un ColumnIndex come una proprietà di tale argomento.Come fare riferimento al nome della colonna anziché e.ColumnIndex nei gestori di eventi WinGrorm DataGridView?

ColumnIndex è un numero che rappresenta la colonna ordinale di #.

C'è un modo per fare riferimento a un nome di colonna da tale argomento, invece di indice di colonna?

Così, invece di fare:

if (e.ColumnIndex == 1) 

preferisco qualcosa di simile:

if (e.ColumnName == "CustomerName") 

perché se una colonna cambia la sua posizione, si romperà il codice.

risposta

8

Certo. Naturalmente non è direttamente in il DataGridViewCellEventArgs, ma è facilmente ottenibile. Nel vostro gestore di eventi:

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

stringa columnName = dgv.Columns (e.ColumnIndex) .Name; se si utilizza VB.NET anziché C# – AdrienTorris

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

Sul mio RadGridView ho bisogno del nome UniqueName = "CustomerName" – Devid

3

Le risposte sopra grandi opere, ma se si deve fare riferimento indice di cellule molto poi sarà solo aggiungere membri private int alla forma, li nome "idxMeaningfulColumnNameHere", quindi inizializzare questi membri nel costruttore di Form. L'ho trovato molto più facile in questo modo.

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

Ecco un metodo personalizzato da aggiungere al 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 

Con che si può fare qualcosa di simile:

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