2009-07-15 23 views
6

Một số trình xử lý sự kiện cho WinForm DataGridViewDataGridViewCellEventArgs làm tham số và ColumnIndex làm thuộc tính của đối số đó.Làm cách nào để tham chiếu tên cột thay vì e.ColumnIndex trong trình xử lý sự kiện WinForm DataGridView?

ColumnIndex là số đại diện cho thứ tự của cột #.

Có cách nào để tham chiếu tên cột từ đối số đó thay vì chỉ mục cột không?

Vì vậy, thay vì thực hiện:

if (e.ColumnIndex == 1) 

tôi thích một cái gì đó như:

if (e.ColumnName == "CustomerName") 

bởi vì nếu một cột thay đổi vị trí của nó, nó sẽ phá vỡ các mã.

Trả lời

8

Chắc chắn. Đó là tất nhiên không trực tiếp trong các DataGridViewCellEventArgs, nhưng nó dễ dàng có thể đạt được. Trong xử lý sự kiện của bạn:

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

chuỗi ColumnName = dgv.Columns (e.ColumnIndex) .name; nếu bạn đang sử dụng VB.NET thay vì C# – AdrienTorris

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

Trên RadGridView của tôi, tôi cần bộ UniqueName = "CustomerName" – Devid

3

Những câu trả lời trên các công trình tuyệt vời nhưng nếu bạn phải tham khảo chỉ số tế bào rất nhiều sau đó tôi sẽ chỉ cần thêm các thành viên private int mẫu, đặt tên cho chúng "idxMeaningfulColumnNameHere", sau đó khởi tạo những thành viên này trong nhà xây dựng của Form. Tôi thấy nó dễ dàng hơn theo cách này.

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

Đây là phương pháp tùy chỉnh được thêm vào DGV của bạn.

<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 

Với nó, bạn có thể làm điều gì đó như:

If dgv1.getColumnIndexByName("SOME_COLUMN_NAME") = e.ColumnIndex Then Do_something() 
Các vấn đề liên quan