Style komórki w formancie DataGridView formularzy systemu Windows

Każda komórka w kontrolce DataGridView może mieć własny styl, taki jak format tekstu, kolor tła, kolor pierwszego planu i czcionka. Zazwyczaj jednak wiele komórek ma określone cechy stylu.

Grupy komórek, które współdzielą style, mogą zawierać wszystkie komórki w określonych wierszach lub kolumnach, wszystkie komórki zawierające określone wartości lub wszystkie komórki w kontrolce. Ponieważ te grupy nakładają się na siebie, każda komórka może uzyskać informacje o stylu z więcej niż jednego miejsca. Można na przykład chcieć, aby każda komórka w DataGridView kontrolce korzystała z tej samej czcionki, ale tylko komórki w kolumnach waluty do użycia formatu waluty i tylko komórki waluty z liczbami ujemnymi do użycia koloru czerwonego pierwszego planu.

Klasa DataGridViewCellStyle

Klasa DataGridViewCellStyle zawiera następujące właściwości związane ze stylem wizualizacji:

Ta klasa zawiera również następujące właściwości związane z formatowaniem:

Aby uzyskać więcej informacji na temat tych właściwości i innych właściwości stylu komórki, zobacz DataGridViewCellStyle dokumentację referencyjną i tematy wymienione w sekcji Zobacz również poniżej.

Korzystanie z obiektów DataGridViewCellStyle

Obiekty można pobrać DataGridViewCellStyle z różnych właściwości DataGridViewklas , DataGridViewColumn, DataGridViewRowi DataGridViewCell i ich klas pochodnych. Jeśli jedna z tych właściwości nie została jeszcze ustawiona, pobranie jej wartości spowoduje utworzenie nowego DataGridViewCellStyle obiektu. Możesz również utworzyć wystąpienie własnych DataGridViewCellStyle obiektów i przypisać je do tych właściwości.

Można uniknąć niepotrzebnego duplikowania informacji o stylu, udostępniając DataGridViewCellStyle obiekty między wieloma DataGridView elementami. Ponieważ style ustawione na kontrolce, kolumnie i poziomach wierszy są filtrowane przez każdy poziom do poziomu komórki, można również uniknąć duplikowania stylu, ustawiając tylko te właściwości stylu na każdym poziomie, które różnią się od powyższych poziomów. Bardziej szczegółowo opisano to w sekcji Dziedziczenie stylu opisanej poniżej.

W poniższej tabeli wymieniono właściwości podstawowe, które pobierają lub ustawiają DataGridViewCellStyle obiekty.

Właściwość Klasy Opis
DefaultCellStyle DataGridView, DataGridViewColumn, DataGridViewRowi klasy pochodne Pobiera lub ustawia domyślne style używane przez wszystkie komórki w całej kontrolce (w tym komórki nagłówka), w kolumnie lub w wierszu.
RowsDefaultCellStyle DataGridView Pobiera lub ustawia domyślne style komórek używane przez wszystkie wiersze w kontrolce. Nie obejmuje to komórek nagłówka.
AlternatingRowsDefaultCellStyle DataGridView Pobiera lub ustawia domyślne style komórek używane przez przemienne wiersze w kontrolce. Służy do tworzenia efektu przypominającego rejestr.
RowHeadersDefaultCellStyle DataGridView Pobiera lub ustawia domyślne style komórek używane przez nagłówki wierszy kontrolki. Przesłonięć bieżący motyw, jeśli są włączone style wizualne.
ColumnHeadersDefaultCellStyle DataGridView Pobiera lub ustawia domyślne style komórek używane przez nagłówki kolumn kontrolki. Przesłonięć bieżący motyw, jeśli są włączone style wizualne.
Style DataGridViewCell i klasy pochodne Pobiera lub ustawia style określone na poziomie komórki. Te style zastępują te dziedziczone z wyższych poziomów.
InheritedStyle DataGridViewCell, DataGridViewRow, DataGridViewColumni klasy pochodne Pobiera wszystkie style stosowane obecnie do komórki, wiersza lub kolumny, w tym style dziedziczone z wyższych poziomów.

Jak wspomniano powyżej, pobieranie wartości właściwości stylu automatycznie tworzy wystąpienie nowego DataGridViewCellStyle obiektu, jeśli właściwość nie została wcześniej ustawiona. Aby uniknąć niepotrzebnego tworzenia tych obiektów, klasy wierszy i kolumn mają HasDefaultCellStyle właściwość, którą można sprawdzić, aby określić, czy DefaultCellStyle właściwość została ustawiona. Podobnie klasy komórek mają właściwość wskazującą HasStyle , czy Style właściwość została ustawiona.

Każda z właściwości stylu ma odpowiednie zdarzenie PropertyNameChanged w kontrolce DataGridView . W przypadku właściwości wiersza, kolumny i komórki nazwa zdarzenia zaczyna się od "Row", "Column" lub "Cell" (na przykład RowDefaultCellStyleChanged). Każde z tych zdarzeń występuje, gdy odpowiednia właściwość stylu jest ustawiona na inny DataGridViewCellStyle obiekt. Te zdarzenia nie występują podczas pobierania DataGridViewCellStyle obiektu z właściwości stylu i modyfikowania jej wartości właściwości. Aby odpowiedzieć na zmiany w obiektach stylu komórki, obsłuż CellStyleContentChanged zdarzenie.

Dziedziczenie stylów

Każdy DataGridViewCell dostaje swój wygląd z jego InheritedStyle właściwości. DataGridViewCellStyle Obiekt zwrócony przez tę właściwość dziedziczy jego wartości z hierarchii właściwości typu DataGridViewCellStyle. Te właściwości są wymienione poniżej w kolejności, w której InheritedStyle komórki inne niż nagłówkowe uzyskują jego wartości.

  1. DataGridViewCell.Style

  2. DataGridViewRow.DefaultCellStyle

  3. DataGridView.AlternatingRowsDefaultCellStyle (tylko w przypadku komórek w wierszach z nieparzystnymi liczbami indeksów)

  4. DataGridView.RowsDefaultCellStyle

  5. DataGridViewColumn.DefaultCellStyle

  6. DataGridView.DefaultCellStyle

W przypadku komórek InheritedStyle nagłówka wiersza i kolumny właściwość jest wypełniana wartościami z poniższej listy właściwości źródłowych w podanej kolejności.

  1. DataGridViewCell.Style

  2. DataGridView.ColumnHeadersDefaultCellStyle lub DataGridView.RowHeadersDefaultCellStyle

  3. DataGridView.DefaultCellStyle

Na poniższym diagramie przedstawiono ten proces.

Properties of type DataGridViewCellStyle

Możesz również uzyskać dostęp do stylów dziedziczonego przez określone wiersze i kolumny. Właściwość kolumny InheritedStyle dziedziczy jej wartości z następujących właściwości.

  1. DataGridViewColumn.DefaultCellStyle

  2. DataGridView.DefaultCellStyle

Właściwość wiersza InheritedStyle dziedziczy jej wartości z następujących właściwości.

  1. DataGridViewRow.DefaultCellStyle

  2. DataGridView.AlternatingRowsDefaultCellStyle (tylko w przypadku komórek w wierszach z nieparzystnymi liczbami indeksów)

  3. DataGridView.RowsDefaultCellStyle

  4. DataGridView.DefaultCellStyle

Dla każdej właściwości w obiekcie zwróconym DataGridViewCellStyle przez InheritedStyle właściwość wartość właściwości jest uzyskiwana z pierwszego stylu komórki na odpowiedniej liście, która ma odpowiednią właściwość ustawioną na wartość inną niż DataGridViewCellStyle wartości domyślne klasy.

W poniższej tabeli pokazano, jak ForeColor wartość właściwości dla przykładowej komórki jest dziedziczona z jej kolumny zawierającej.

Właściwość typu DataGridViewCellStyle Przykładowa ForeColor wartość pobranego obiektu
DataGridViewCell.Style Color.Empty
DataGridViewRow.DefaultCellStyle Color.Red
DataGridView.AlternatingRowsDefaultCellStyle Color.Empty
DataGridView.RowsDefaultCellStyle Color.Empty
DataGridViewColumn.DefaultCellStyle Color.DarkBlue
DataGridView.DefaultCellStyle Color.Black

W takim przypadku Color.Red wartość z wiersza komórki jest pierwszą rzeczywistą wartością na liście. Staje się to wartością ForeColor właściwości komórki InheritedStyle.

Na poniższym diagramie pokazano, jak różne DataGridViewCellStyle właściwości mogą dziedziczyć ich wartości z różnych miejsc.

DataGridView property-value inheritance

Korzystając z dziedziczenia stylów, można podać odpowiednie style dla całej kontrolki bez konieczności określania tych samych informacji w wielu miejscach.

Chociaż komórki nagłówka uczestniczą w dziedziczeniu stylu zgodnie z opisem, obiekty zwracane przez ColumnHeadersDefaultCellStyle właściwości i RowHeadersDefaultCellStyle kontrolki mają początkowe wartości właściwości DataGridView , które zastępują wartości właściwości obiektu zwrócone przez DefaultCellStyle właściwość. Jeśli chcesz, aby właściwości ustawione dla obiektu zwróconego przez DefaultCellStyle właściwość miały zastosowanie do nagłówków wierszy i kolumn, musisz ustawić odpowiednie właściwości obiektów zwróconych przez ColumnHeadersDefaultCellStyle właściwości i RowHeadersDefaultCellStyle na wartości domyślne wskazane dla DataGridViewCellStyle klasy.

Uwaga

Jeśli style wizualne są włączone, nagłówki wierszy i kolumn (z wyjątkiem TopLeftHeaderCell) są automatycznie stylizowane przez bieżący motyw, przesłaniając wszystkie style określone przez te właściwości.

Typy DataGridViewButtonColumn, DataGridViewImageColumni DataGridViewCheckBoxColumn inicjują również niektóre wartości obiektu zwróconego przez właściwość kolumny DefaultCellStyle . Aby uzyskać więcej informacji, zobacz dokumentację referencyjną dla tych typów.

Dynamiczne ustawianie stylów

Aby dostosować style komórek z określonymi wartościami, zaimplementuj procedurę obsługi dla DataGridView.CellFormatting zdarzenia. Programy obsługi dla tego zdarzenia otrzymują argument DataGridViewCellFormattingEventArgs typu. Ten obiekt zawiera właściwości, które umożliwiają określenie wartości komórki sformatowanej wraz z jej lokalizacją w kontrolce DataGridView . Ten obiekt zawiera również właściwość zainicjowaną CellStyle do wartości InheritedStyle właściwości sformatowanej komórki. Właściwości stylu komórki można zmodyfikować, aby określić informacje o stylu odpowiednie dla wartości i lokalizacji komórki.

Uwaga

Zdarzenia RowPrePaint i RowPostPaint również odbierają DataGridViewCellStyle obiekt w danych zdarzenia, ale w ich przypadku jest to kopia właściwości wiersza InheritedStyle do celów tylko do odczytu i zmiany w niej nie wpływają na kontrolkę.

Można również dynamicznie modyfikować style poszczególnych komórek w odpowiedzi na zdarzenia, takie jak DataGridView.CellMouseEnter zdarzenia i CellMouseLeave . Na przykład w procedurze obsługi CellMouseEnter zdarzenia można przechowywać bieżącą wartość koloru tła komórki (pobranej za pośrednictwem właściwości komórki Style ), a następnie ustawić go na nowy kolor, który będzie wyróżniać komórkę po umieszczeniu kursora myszy na nim. W procedurze obsługi zdarzenia CellMouseLeave można następnie przywrócić kolor tła do oryginalnej wartości.

Uwaga

Buforowanie wartości przechowywane we właściwości komórki Style są ważne niezależnie od tego, czy określona wartość stylu jest ustawiona. Jeśli tymczasowo zastąpisz ustawienie stylu, przywrócenie go do oryginalnego stanu "nie ustawiono" gwarantuje, że komórka powróci do dziedziczenia ustawienia stylu z wyższego poziomu. Jeśli musisz określić rzeczywisty styl dla komórki niezależnie od tego, czy styl jest dziedziczony, użyj właściwości komórki InheritedStyle .

Zobacz też