2011-07-07 28 views
12

Mam formularz z widgetem DataGridView i potrzebuję uzyskać indeks kolumny z wybraną nazwą.datagridview indeks kolumny

Na przykład, powiedzmy, że mam tabelę z 2 kolumnami: Imię, Nazwisko. Potrzebuję sposobu, aby uzyskać indeks nazwy kolumny. Problem polega na tym, że zmienia się cały czas w zależności od DataSource, ale ta kolumna ma zawsze tę samą nazwę "Nazwa".

Czy ktoś wie, jak rozwiązać problem?

Odpowiedz

21

Aby pobrać kolumnę DataGridView po nazwie po prostu odwoływać poprzez indekser zbiórki kolumnach:

datagridview1.Columns["columnName"] 

Następnie można uzyskać indeks kolumny z tej kolumny:

datagridview1.Columns["columnName"].Index; 

Należy pamiętać, że jeśli używasz niepoprawnej nazwy kolumny, to odwołanie zwróci wartość null, więc możesz sprawdzić, czy odwołanie do kolumny nie jest puste przed użyciem, lub najpierw użyj metody kolekcji kolumn: .Contains().

+1

dla pewności (dla innych użytkowników), należy sprawdzić, czy istnieje kolumna pierwsza: datagridview1 .Columns.Contains ("ColumnName") – ginalster

+0

@ginalster Dzięki - dobra uwaga, dodałem to do odpowiedzi. –

+1

Dlaczego to nadal nie jest akceptowana odpowiedź? – Neolisk

0

Jeśli mam rację, e.ColumnIndex również będzie działać. można sprawdzić w dokumentacji MSDN here

0

można uzyskać indeks za pomocą the Index property of the DataGridViewColumn widget, jako takich:

ColumnName.Index 

Eliminuje to konieczność sprawdzenia, czy nazwa kolumny jest ważna przy starcie, ponieważ będzie ona generować błąd kompilacji, jeśli kolumna nie istnieje. To także ułatwia refaktoryzację.

Polecam podać kolumnom sensowną nazwę (na przykład DCOL_SomeName), aby można je było łatwo odróżnić. Włączenie nazwy widgetu DataGridView może pomóc, jeśli masz wiele widżetów DataGridView w tym samym formularzu.

0

utworzyć klasę statyczną poniżej kodu

public static class MyTools 
{ 
    public static int IndexByName(this DataGridView dgv, string name) 
    { 
     foreach(DataGridViewColumn col in dgv.Columns) 
     { 
      if(col.HeaderText.ToUpper().Trim() == name.ToUpper().Trim()) 
      { 
       return col.Index; 
      } 
     } 
     return -1; 
    } 
} 

a następnie wywołać go z dataGridView

int index = datagridview1.IndexByName("columnName"); 
Powiązane problemy