2009-07-15 4 views
6

Einige Ereignishandler für das WinForm DataGridView haben DataGridViewCellEventArgs als Parameter und ColumnIndex als eine Eigenschaft dieses Arguments.Wie Referenz Spaltenname anstelle von e.ColumnIndex in WinForm DataGridView Event-Handler?

ColumnIndex ist eine Zahl, die die Ordnungszahl der Spalte darstellt.

Gibt es eine Möglichkeit, einen Spaltennamen von diesem Argument anstelle von Spaltenindex zu referenzieren?

Also anstatt das zu tun:

if (e.ColumnIndex == 1) 

Ich ziehe es so etwas wie:

if (e.ColumnName == "CustomerName") 

denn wenn eine Spalte seine Position ändert, wird es den Code brechen.

Antwort

8

Sicher. Es ist natürlich nicht direkt inDataGridViewCellEventArgs, aber es ist leicht erhältlich. In Ihren Event-Handler:

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

String column = dgv.Columns (e.ColumnIndex) .Name; Wenn Sie VB.NET anstelle von C# – AdrienTorris

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

verwenden Auf meinem RadGridView brauche ich den UniqueName = "CustomerName" festgelegt – Devid

3

Die Antworten über große Werke, aber wenn Sie viele Zellenindex verweisen haben, dann werde ich nur private int Mitglieder zum Formular hinzufügen, nennt sie „idxMeaningfulColumnNameHere“, dann initialisieren diese Mitglieder im Konstruktor von Form. Ich fand es viel einfacher so.

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

Hier ist eine benutzerdefinierte Methode, die zu Ihrem DGV hinzugefügt werden soll.

<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 

Damit Sie so etwas wie tun:

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