Numerowanie wierszy w RowHeader, dodawanie obiektów do ColumnHeader

Pokażę dzisiaj wam jak ponumerować wiersze, nie wpisując w nie wartości i nie dodawać dodatkowej kolumny. Można to zrobić, wyświetlając taką numerację w RowHeader:

Takie rozwiązanie prezentuje się naprawdę ładnie i nie zakrywa nam ogólnego obrazu, jest estetyczne i ładne. Dodanie checkboxów do ColumnHeader:

Sprawa wygląda trochę błaho, ale może napsuć krwi. Szczególnie element umieszczony w ColumnHeader który może nie przesuwać się razem z podglądem danych. My sobie zrobimy taki który się przesuwa. 😛

Dodamy sobie nawet listę takich obiektów, które będą wykonywały określone zadania.

 

 

Zaczniemy od prostego projektu:

 

Rodzaj elementu Nazwa elementu Ustawienia
Form Form1 Name: Form1
Text: Okręty VisualMonsters.cba.pl
Size: 451; 411
DataGridView1 DataGridView1 Name: DataGridView1
Size: 411; 348
Location: 12; 12
Anchor: Top, Left, Right, Bottom

Do DatagridView1 dodałem dziewięć kolumn. Użyłem do tego opcji Collection w Visual Studio.

 

 

 

Kiedy mamy już przygotowaną formę, musimy zastanowić się jakiego zdarzenia w Datagridview użyjemy do rysowania naszej numeracji i checkboxów kolumn. Próbowałem kilku polecanych w internecie, ale najlepsze według mnie jest „CellPainting”. Najpierw dodamy sobie coś prostego, dodamy sobie checkbox do nagłówków wierszy i wypełnimy datagridview jakimiś danymi:

Efekt jest taki jak prezentowany poniżej:

Zauważmy jeden dość duży szczegół. Nasz checkbox nie zmienia położenia wraz ze zmianą rozmiaru RowHeader. Chcielibyśmy, aby zawsze był na środku. Aby tego dokonać, musimy dodać zdarzenie CellPainting. które będzie reagowało na każdą zmianę wierszy:

Efekt jest taki, że nasz checkbox, będzie trzymał się zawsze środka nagłówka i zniknie, gdy nagłówek będzie od niego mniejszy:

Pierwszy checkbox mamy już dodany. Wiecie już chyba, o co chodzi, teraz dodamy sobie numeracje wierszy. Posłuży nam do tego zdarzenie „RowPostPaint” które wykonywane jest, gdy zmienia się wyświetlanie wierszy:

Jeśli byśmy chcieli, aby nasza numeracja była wyświetlana na środku nagłówka, wystarczyło, by zmienić metodę DrawString:

Ja preferuje opcje z lewej strony.

Został już ostatni element, dodanie checkboxów do nagłówków kolumn. Najpierw przygotujemy sobie listę checkboxów, do której będziemy się odwoływali w zdarzeniu „CellPainting”. Wracamy do Form_load:

Doda nam to pierwsze widoczne elementy:

Chwilo martwe elementy, ożywimy przy użyciu „CellPainting”. Tworząc pętlę, musimy wziąć pod uwagę pewne okoliczności. Ponieważ dla niewidocznych nagłówków ich wielkość będzie równa zero, ale jeśli są odrobinę widoczne, wtedy ich wielkość może być różna. Problem polega na tym, że trudno odróżnić który element jest z lewej strony, a który z prawej. Dlatego dodamy sobie zmienną boolean, która będzie nam to określać, będzie nam wychwytywać zmniejszony element z lewej strony. Dla tego zmniejszonego elementu po lewej stronie będziemy ustawiać lokalizację dynamicznie. Na potrzeby tutoriala dodałem im kolory, czerwony i żółty:

 

Efekt jest chyba zadowalający:

Można teraz zmienić im kolor tła na biały, będą działały szybciej (nie polecam ustawiać ich tła na transparent). Dodamy sobie tylko funkcjonalność, aby nie było, że są bezużyteczne. Pierwszy checkbox (ten w nagłówku wierszy) będzie zaznaczał wszystkie komórki, te w nagłówkach tylko te komórki w kolumnach:

Efekt:

Pełen projekt do pobrania tutaj: RowHeader_ColumnHeader_objects_visualmonsters

Sam kod do pobrania tutaj: RowHeader_ColumnHeader_objects_visualmonsters

 

 

Permalink do tego artykułu: https://visualmonsters.cba.pl/numerowanie-dodawanie-columnheader/

Dodaj komentarz

Twój adres email nie będzie publikowany.