Tryb wirtualny w formancie DataGridView formularzy systemu Windows

W trybie wirtualnym można zarządzać interakcją między kontrolką DataGridView a niestandardową pamięcią podręczną danych. Aby zaimplementować tryb wirtualny, ustaw VirtualMode właściwość na true i obsłuż co najmniej jedno zdarzenie opisane w tym temacie. Zazwyczaj będzie obsługiwane co najmniej CellValueNeeded zdarzenie, co umożliwia kontrolce wyszukiwanie wartości w pamięci podręcznej danych.

Tryb powiązany i tryb wirtualny

Tryb wirtualny jest niezbędny tylko wtedy, gdy trzeba uzupełnić lub zamienić tryb ograniczenia. W trybie powiązanym ustawiasz DataSource właściwość i kontrolka automatycznie ładuje dane z określonego źródła i przesyła zmiany użytkownika z powrotem do niego. Możesz kontrolować, które kolumny powiązane są wyświetlane, a samo źródło danych zwykle obsługuje operacje, takie jak sortowanie.

Tryb ograniczenia uzupełniającego

Tryb ograniczenia można uzupełnić, wyświetlając niezwiązane kolumny wraz z powiązanymi kolumnami. Jest to czasami nazywane "trybem mieszanym" i jest przydatne do wyświetlania elementów, takich jak wartości obliczeniowe lub kontrolki interfejsu użytkownika.

Ponieważ niezwiązane kolumny znajdują się poza źródłem danych, są ignorowane przez operacje sortowania źródła danych. W związku z tym po włączeniu sortowania w trybie mieszanym należy zarządzać danymi niezwiązanymi w lokalnej pamięci podręcznej i zaimplementować tryb wirtualny, aby umożliwić kontrolce DataGridView interakcję z nim.

Aby uzyskać więcej informacji na temat używania trybu wirtualnego do obsługi wartości w niezwiązanych kolumnach, zobacz przykłady w DataGridViewCheckBoxColumn.ThreeState tematach referencyjnych dotyczących właściwości i System.Windows.Forms.DataGridViewComboBoxColumn klas.

Zastępowanie trybu ograniczenia

Jeśli tryb ograniczenia nie spełnia wymagań dotyczących wydajności, możesz zarządzać wszystkimi danymi w niestandardowej pamięci podręcznej za pomocą procedur obsługi zdarzeń trybu wirtualnego. Na przykład można użyć trybu wirtualnego, aby zaimplementować mechanizm ładowania danych just in time, który pobiera tylko tyle danych z sieciowej bazy danych, co jest niezbędne do optymalnej wydajności. Ten scenariusz jest szczególnie przydatny podczas pracy z dużą ilością danych za pośrednictwem powolnego połączenia sieciowego lub z maszynami klienckimi, które mają ograniczoną ilość pamięci RAM lub miejsca do magazynowania.

Aby uzyskać więcej informacji na temat korzystania z trybu wirtualnego w scenariuszu just in time, zobacz Implementowanie trybu wirtualnego za pomocą ładowania danych just in time w kontrolce DataGridView formularzy systemu Windows.

Zdarzenia trybu wirtualnego

Jeśli dane są tylko do odczytu, zdarzenie może być jedynym zdarzeniem, CellValueNeeded które należy obsłużyć. Dodatkowe zdarzenia trybu wirtualnego umożliwiają włączenie określonych funkcji, takich jak edytowanie użytkowników, dodawanie i usuwanie wierszy oraz transakcje na poziomie wiersza.

Niektóre standardowe DataGridView zdarzenia (takie jak zdarzenia, które występują, gdy użytkownicy dodawają lub usuwają wiersze lub kiedy wartości komórek są edytowane, analizowane, weryfikowane lub sformatowane) są również przydatne w trybie wirtualnym. Można również obsługiwać zdarzenia, które umożliwiają zachowanie wartości, które nie są zwykle przechowywane w powiązanym źródle danych, takich jak tekst etykietki narzędzia komórki, tekst błędu komórki i wiersza, dane menu skrótów komórek i wierszy oraz dane wysokości wiersza.

Aby uzyskać więcej informacji na temat implementowania trybu wirtualnego do zarządzania danymi odczytu/zapisu za pomocą zakresu zatwierdzania na poziomie wiersza, zobacz Przewodnik: implementowanie trybu wirtualnego w kontrolce DataGridView formularzy systemu Windows.

Aby zapoznać się z przykładem implementowania trybu wirtualnego z zakresem zatwierdzania na poziomie komórki, zobacz VirtualMode temat odwołania do właściwości.

Następujące zdarzenia występują tylko wtedy, gdy właściwość jest ustawiona VirtualMode na truewartość .

Zdarzenie opis
CellValueNeeded Używany przez kontrolkę do pobierania wartości komórki z pamięci podręcznej danych do wyświetlenia. To zdarzenie występuje tylko w przypadku komórek w niezwiązanych kolumnach.
CellValuePushed Używany przez kontrolkę do zatwierdzania danych wejściowych użytkownika dla komórki w pamięci podręcznej danych. To zdarzenie występuje tylko w przypadku komórek w niezwiązanych kolumnach.

Wywołaj metodę UpdateCellValue podczas zmieniania buforowanej wartości poza CellValuePushed procedurą obsługi zdarzeń, aby upewnić się, że bieżąca wartość jest wyświetlana w kontrolce i aby zastosować wszystkie tryby automatycznego określania rozmiaru aktualnie stosowane.
NewRowNeeded Używany przez kontrolkę do wskazywania potrzeby nowego wiersza w pamięci podręcznej danych.
RowDirtyStateNeeded Używany przez kontrolkę do określania, czy wiersz ma jakiekolwiek niezatwierdzone zmiany.
CancelRowEdit Używany przez kontrolkę, aby wskazać, że wiersz powinien powrócić do buforowanych wartości.

Następujące zdarzenia są przydatne w trybie wirtualnym, ale mogą być używane niezależnie od VirtualMode ustawienia właściwości.

Wydarzenia opis
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
Używany przez kontrolkę do wskazywania, kiedy wiersze są usuwane lub dodawane, co pozwala odpowiednio zaktualizować pamięć podręczną danych.
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

RowValidated
Używany przez kontrolkę do formatowania wartości komórek do wyświetlania i analizowania i weryfikowania danych wejściowych użytkownika.
CellToolTipTextNeeded Używany przez kontrolkę do pobierania tekstu etykietki narzędzia komórki, gdy DataSource właściwość jest ustawiona VirtualMode lub właściwość to true.

Narzędzie komórki Wskazówki są wyświetlane tylko wtedy, gdy ShowCellToolTips wartość właściwości to true.
CellErrorTextNeeded

RowErrorTextNeeded
Używany przez kontrolkę do pobierania tekstu błędu komórki lub wiersza, gdy DataSource właściwość jest ustawiona VirtualMode lub właściwość to true.

Wywołaj metodę lub UpdateRowErrorText metodę UpdateCellErrorText podczas zmiany tekstu błędu komórki lub wiersza, aby upewnić się, że bieżąca wartość jest wyświetlana w kontrolce.

Symbole błędów komórek i wierszy są wyświetlane, gdy ShowCellErrors wartości właściwości i ShowRowErrors to true.
CellContextMenuStripNeeded

RowContextMenuStripNeeded
Używana przez kontrolkę do pobierania komórki lub wiersza ContextMenuStrip , gdy właściwość kontrolki DataSource jest ustawiona VirtualMode lub właściwość to true.
RowHeightInfoNeeded

RowHeightInfoPushed
Używany przez kontrolkę do pobierania lub przechowywania informacji o wysokości wiersza w pamięci podręcznej danych. Wywołaj metodę UpdateRowHeightInfo podczas zmiany buforowanych informacji o wysokości wiersza poza procedurą RowHeightInfoPushed obsługi zdarzeń, aby upewnić się, że bieżąca wartość jest używana w wyświetlaniu kontrolki.

Najlepsze rozwiązania w trybie wirtualnym

Jeśli wdrażasz tryb wirtualny w celu wydajnej pracy z dużą ilością danych, warto również upewnić się, że pracujesz wydajnie z samą kontrolką DataGridView . Aby uzyskać więcej informacji na temat wydajnego używania stylów komórek, automatycznego określania rozmiaru, zaznaczeń i udostępniania wierszy, zobacz Best Practices for Scaling the Windows Forms DataGridView Control (Najlepsze rozwiązania dotyczące skalowania kontrolki DataGridView formularzy systemu Windows).

Zobacz też