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 współużytkujących 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. Na przykład można chcieć, aby każda komórka w DataGridView kontrolce używała tej samej czcionki, ale tylko komórki w kolumnach walutowych do używania formatu waluty i tylko komórki waluty z liczbami ujemnymi do używania 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 poniższej sekcji.

Używanie 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 ustawiane na poziomie kontrolki, kolumny i wiersza są filtrowane przez poszczególne poziomy do poziomu komórki, można również uniknąć duplikowania stylów, ustawiając tylko te właściwości stylu na każdym poziomie, które różnią się od powyższych poziomów. Opisano to bardziej szczegółowo w sekcji Dziedziczenie stylu, która znajduje się poniżej.

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

Właściwości Klasy opis
DefaultCellStyle DataGridView, , DataGridViewColumnDataGridViewRowi 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 naprzemienne 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. Zastąpiony przez bieżący motyw, jeśli są włączone style wizualizacji.
ColumnHeadersDefaultCellStyle DataGridView Pobiera lub ustawia domyślne style komórek używane przez nagłówki kolumn kontrolki. Zastąpiony przez bieżący motyw, jeśli są włączone style wizualizacji.
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, , DataGridViewRowDataGridViewColumni 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 wierszy, kolumn i komórek 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 zwracany 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 dla komórek innych niż nagłówkowe uzyskuje swoje 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 wierszy i kolumn 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 obiektu zwróconego DataGridViewCellStyleInheritedStyle przez 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 stylu, można podać odpowiednie style dla całej kontrolki bez konieczności określania tych samych informacji w wielu miejscach.

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

Uwaga

Jeśli style wizualizacji są włączone, nagłówki wierszy i kolumn (z wyjątkiem TopLeftHeaderCell) są automatycznie stylowane 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 DataGridView.CellFormatting procedurę obsługi dla zdarzenia. Programy obsługi dla tego zdarzenia otrzymują argument DataGridViewCellFormattingEventArgs typu. Ten obiekt zawiera właściwości, które pozwalają określić wartość komórki sformatowanej wraz z jego 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. Możesz zmodyfikować właściwości stylu komórki, 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 nim nie wpływają na kontrolkę.

Można również dynamicznie modyfikować style poszczególnych komórek w odpowiedzi na zdarzenia, takie jak i DataGridView.CellMouseEnterCellMouseLeave . Na przykład w procedurze obsługi zdarzenia CellMouseEnter można przechowywać bieżącą wartość koloru tła komórki (pobraną 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 niej. 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 wró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ż