2012-01-23 13 views
6

Podobne pytania mogą istnieć, ale żaden z nich nie wydaje się być pomocny. Więc postaram się wytłumaczyć bardziej konkretny przypadek i sprawdzić, czy ktoś może mi pomóc :)Jak dynamicznie zmieniać kolejność kolumn w widoku siatki?

Tutaj jest rzecz, mam gridview z templatefields, i chcę pozwolić użytkownikowi na określenie kolejności tych kolumn są pokazane. Tak więc użytkownik tworzy widok i decyduje, która kolumna ma wyświetlać pierwszą, drugą i tak dalej.

Tak więc, w zasadzie muszę zmienić kolejność kolumn zaraz po załadowaniu siatki danymi.

Brzmi łatwo, huh? Cóż, najwyraźniej tak nie jest. Przynajmniej nie mogłem tego jeszcze osiągnąć.

Kilka uwag: - Oczywiście mam AutogenerateColumns ustawioną na false. - Zmień kolejność kolumn wybierz sql nie będzie działać z powodu poprzedniego elementu. - I chciałbym nie generować kolumn przez kod.

Wszelkie pomysły?

+0

Oto, jak dynamicznie zmieniać kolejność kolumn: http://stackoverflow.com/a/28611217/215752 – Hogan

Odpowiedz

18

Możesz zmodyfikować kolekcję Gridview's Columns w swoim kodzie z tyłu. Jednym ze sposobów jest usunięcie kolumny z aktualnej pozycji w kolekcji, a następnie ponowne jej umieszczenie w nowej pozycji.

Na przykład, jeśli chcesz, aby przesunąć drugą kolumnę być pierwsza kolumna można zrobić:

var columnToMove = myGridView.Columns[1]; 
myGridView.Columns.RemoveAt(1); 
myGridView.Columns.Insert(0, columnToMove); 

Jeśli trzeba przenieść je wszystkie wokół losowo, to może chcesz spróbować sklonować kolekcja pole, usunąć kolekcję w GridView, a następnie ponownie włożyć je wszystkie w kolejności chcesz je mieć.

var columns = myGridView.Columns.CloneFields(); 
myGridView.Columns.Clear(); 
myGridView.Columns.Add(columns[2]); 
myGridView.Columns.Add(columns[0]); 
etc.. 

nie jestem w 100% pewien, czy to wszystko zadziała po związaniu z danymi , więc jeśli nie ma powodu, aby tego nie robić, robiłbym to w Page_Init lub gdzieś przed bindinem sol.

+0

To działało świetnie! Ale tylko jedna rzecz ... Mam przycisk na tej siatce, w którym stosuję pewną logikę w zdarzeniu OnRowCommand. Cóż, teraz, po tym, jak wiersze zostały zmienione, ta metoda nigdy nie jest wykonywana, a także niektóre kolumny są puste po naciśnięciu przycisku ... – Ragalante

+0

Znalazłem przy użyciu 'myGridView.Columns.CloneFields();' tworzy klon wszystkich obiektów kolumnowych (co może być problemem). Na przykład, jeśli masz własną niestandardową kolumnę, która dziedziczy po 'BoundField', to klonuje twój obiekt do' BoundField'. Aby to naprawić, wykonaj: 'myGridView.Columns.OfType (). ToList();' ponieważ spowoduje to utworzenie nowej kolekcji z zachowaniem odniesień do oryginalnych obiektów kolumn. –

Powiązane problemy