w jednym z moich formularzy datagridview wyświetla dane z bazy danych (oczywiście liczba danych (więc liczba wierszy) może się zmienić). Połączenie z bazą danych jest w zdarzeniu ładowania formularza. Po prostu nie mogę ustalić, jak wysokość całego datagridview jest autosynchronizowana, w zależności od liczby wyświetlanych wierszy.winforms: datagridview: height (autosize) w zależności od liczby wierszy
Odpowiedz
Jeśli ustawisz DataGridView.AutoSize == true, to podczas dodawania kolejnych wierszy siatka staje się dłuższa. W przeciwnym razie otrzymasz paski przewijania. Chyba, że ustawiłeś ScrollBars == Null || Poziomy, w którym to przypadku rzędy po prostu znikają z końca.
Z jakiegoś powodu DataGridView.AutoSize można ustawić programowo. Obserwujemy też pewne dziwne zachowania, gdy umieszczasz siatkę w sterowniku, który można automatycznie analizować. Wygląda na to, że nie reaguje na rozmiar siatki.
Skończyło się na obliczeniu spodziewanego rozmiaru siatki z kolumny, wiersza, nagłówka, marginesu, dopełnienia i rozmiarów obramowania, a następnie zmianie rozmiaru kontrolki zawierającej siatkę i zakotwiczeniu siatki z czterech stron. Czułem się naprawdę niezgrabny, ale to najlepsze, co mogłem wymyślić. Jeśli nadal jesteś w pobliżu, skomentuj i zobaczę, czy mogę znaleźć kod, nie mam go pod ręką.
MSDN mówi "Ta właściwość nie dotyczy tej klasy."
To co udało mi się znaleźć, i to działa dobrze do tej pory:
int GetDataGridViewHeight(DataGridView dataGridView)
{
var sum = (dataGridView.ColumnHeadersVisible ? dataGridView.ColumnHeadersHeight : 0) +
dataGridView.Rows.OfType<DataGridViewRow>().Where(r => r.Visible).Sum(r => r.Height);
return sum;
}
Dzięki temu ja zamknięte moje DataGridView w UserControl tak mogłaby wdrożyć autoSize poprawnie:
// This is in a user control where the datagrid is inside (Top docked)
protected override void OnResize(EventArgs e)
{
if (AutoSize)
{
var height = this.GetDataGridViewHeight(this.dataBoxGridView);
this.dataBoxGridView.Height = height;
this.Height = height +this.Padding.Top + this.Padding.Bottom;
}
}
nie próbowałem (jeszcze) do budowy Custom Control bezpośrednio z DataGridView do wdrożenia tego.
Tak to zrobiłem. aby ustawić wysokość DataGridView, możesz użyć jego właściwości Set Height. Przy ładowaniu formularza możesz użyć tego kodu, aby ukryć datagridview. dataGridViewName.Height = 0;
Następnie podczas pobierania wierszy z bazy danych. możemy użyć poniższej metody, aby uzyskać Wysokość datagridview zgodnie z liczbą wierszy.
- 1. WinForms C# DataGridView Wymuś odświeżenie
- 2. C# wiersze wierszy datagridview?
- 3. Zmiana rozmiaru NSTableView lub NSScrollView w zależności od liczby wierszy w tabeli
- 4. FlowLayoutPanel autowrapping nie działa z autoSize
- 5. .NET/WinForms - Wyczyść sortowanie na DataGridView
- 6. zmiana wierszy w zależności od numeru porządkowego w bazie danych
- 7. Nieparzysty/parzysty kolor tła wierszy datagridview
- 8. Ręczne dodawanie wierszy do datagridview
- 9. jak zmienić kolor RatingBar w zależności od liczby gwiazdek?
- 10. dlaczego $ (document) .height() różni się od $ (document.body) .height()?
- 11. Znacznik wizualny podczas przenoszenia wierszy w DataGridView
- 12. Dynamiczna podpowiedź w zależności od wskaźnika myszy na wierszu w datagridzie (NIE datagridview)
- 13. Ograniczanie liczby wierszy w textarea
- 14. Określanie liczby wierszy w zakresie
- 15. Zwiększenie liczby wierszy w grupie
- 16. Autosize GroupBox
- 17. Zmienne środowiskowe w zależności od niestandardowej zależności od użytkownika
- 18. C# - jak odświeżyć DataGridView po usunięciu wierszy
- 19. Dodawanie wierszy do datagridview z istniejącymi kolumnami
- 20. html table fixed height?
- 21. FlowLayoutPanel AutoSize tylko w pionie?
- 22. sposób sortowania ciąg jako liczby w DataGridView w WinForm
- 23. UICollectionView AutoSize wysokość nagłówka
- 24. Ustalanie liczby wierszy repeatera w asp.net
- 25. Uzyskiwanie liczby wierszy dla tabeli w MySQL?
- 26. Zmiana liczby wierszy zakładek widocznych w NetBeans
- 27. ograniczenie liczby wierszy w funkcji ContentResolver.query()
- 28. Określanie TSQL w zależności od najwyższej daty
- 29. R wypełnić wartości w zależności od kombinacji
- 30. Autowire zależności od podklasy
To zadziałało dla mnie, ale musiałem umieścić nawiasy okrągłe w górnej części przed znakiem +. Uważam, że jest to problem "porządku operacji" z operatorem? /: –
Dobra uwaga. Dodałem nawiasy, aby rozróżnić wszelkie wątpliwości dotyczące tego trudnego precedensu operatora. – Larry