2012-11-23 16 views
9

Próbuję automatycznie dostosować wysokość rzędu i uznałem, że jest to bardzo trudne.Automatyczny rząd Datagridview

Już ustawić tę właściwość:

DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells. 

Ja również wykonaną go za pomocą tej innej metody:

DataGridView.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders) 

A także wiersz po wierszu, za pomocą tego:

DataGridView.AutoResizeRow(i, DataGridViewAutoSizeRowMode.AllCells) 

I nawet na stałe zakodowano wysokość rzędu do dużej wartości, a to też nie działało !! Wszystkie wiersze są pokazane z ich domyślnymi wysokościami.

Żadna z nich nie zadziałała. Kończą mi się opcje.

Większość wierszy w widoku datagridview nie musi być zmieniana. Ale jeden z nich jest wypełniony takimi wartościami:

"a" + "\ n" + b + "\ n" + "c" + "\ n" + "d" + "\ n" + " e "

Mam na myśli krótkie wartości, ale w różnych liniach. Muszę pokazać je na różne sposoby, nie mogę pokazać ich wszystkich razem. Ale widok datagrid wyświetla tylko pierwszy, a wszystkie pozostałe są ukryte, ponieważ wiersz nie jest autoregulowany.

Każdy pomysł na inny sposób.

Odpowiedz

3

Znalazłem rozwiązanie tego problemu. Zamiast pracy z właściwościami automatycznego wyboru siatki lub wierszy, powinienem był zastosować tryb wrapmode do zastosowania we wszystkich komórkach siatki.

DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True

ta jest stosowana do wszystkich komórek i działa.

+0

Cieszę się, że znalazłeś rozwiązanie (przypuszczałem, że już ustawiłeś wrapmode i widzisz, jak wiele linii przelewa się przez obszar komórki siatki). Zamierzam zostawić moją odpowiedź, ponieważ jest to poprawne dla innego problemu (jeśli zaktualizujesz dowolne komórki zwiększające długość danych, zmiana rozmiaru nie uruchomi się automatycznie). –

+2

Och - i oznaczyć to jako odpowiedź, aby pytanie zniknęło z listy nieodebranych. –

5

Musisz wywołać metodę zmiany rozmiaru po dane zostały zmienione. Z artykułu MSDN na DataGridView.AutoResizeRows():

Wysokości rzędów są korygowane tylko raz na wywołanie metody; jeśli później zmieni się zawartość wierszy później, wiersze nie będą automatycznie dostosowywane .

Oznacza to, że należy wywołać metodę po pierwszym i kolejnym załadowaniu siatki. Jeśli wywołujesz ten kod w kontrolerze formy rodzica, wiązanie danych jeszcze się nie wydarzyło, więc danych tam nie ma.

Dla pierwszego załadunku przy użyciu zdarzenie DataBindingComplete:

dataGridView1.DataBindingComplete += new 
    DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete); 

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); 
} 

Dla późniejszych aktualizacjach komórek będzie trzeba znaleźć najlepsze miejsce samemu.

+0

Powodem, dla którego obecne podejście nie działa, jest prawdopodobnie posiadanie kodu wewnątrz konstruktora formularzy lub zdarzenia onload. –

+0

Nie, faktycznie robię to po ustawieniu źródła siatki na datagridview. Jest już zaludniony. To ostatnia rzecz, którą robię. – monican

+0

@ user1062568 kiedy to robisz? W jakim przypadku handler? nawet jeśli zrobisz to po ustawieniu źródła, to nie wystarczy, musisz to zrobić po zakończeniu tworzenia kopii danych. Jeśli ustawisz źródło, a następnie wywołasz resize all w konstruktorze formularza, na przykład, nie zmieni to wysokości. –