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 i true obsłuż co najmniej jedno ze zdarzeń opisanych w tym temacie. Zazwyczaj obsługiwane jest co najmniej zdarzenie CellValueNeeded , które umożliwia kontrolce wyszukiwania wartości w pamięci podręcznej danych.

Tryb powiązany i tryb wirtualny

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

Uzupełnianie trybu powiązanego

Tryb powiązany 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ą one ignorowane przez operacje sortowania źródła danych. Dlatego po włączeniu sortowania w trybie mieszanym musisz zarządzać niepowiązanym danymi w lokalnej pamięci podręcznej i zaimplementować tryb wirtualny, DataGridView aby umożliwić kontrolce interakcję z nimi.

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

Zastępowanie trybu powiązanego

Jeśli tryb powiązany nie spełnia wymagań dotyczących wydajności, możesz zarządzać wszystkimi danymi w niestandardowej pamięci podręcznej za pomocą programów 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, ile jest to konieczne do uzyskania optymalnej wydajności. Ten scenariusz jest szczególnie przydatny podczas pracy z dużymi ilościami 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 z ładowaniem danych just in time w kontrolce DataGridView usługi Windows Forms.

Virtual-Mode zdarzeń

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

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

Aby uzyskać więcej informacji na temat implementowania trybu wirtualnego do zarządzania odczytem/zapisem danych z zakresem zatwierdzania na poziomie wiersza, zobacz Przewodnik: implementowanie trybu wirtualnego w kontrolce DataGridView usługi Windows Forms.

Przykład implementacji trybu wirtualnego z zakresem zatwierdzania na poziomie komórki można znaleźć w temacie odwołania VirtualMode do właściwości.

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

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 UpdateCellValue metodę CellValuePushed podczas zmiany buforowanej wartości poza programem obsługi zdarzeń, aby upewnić się, że bieżąca wartość jest wyświetlana w kontrolce i zastosować wszystkie aktualnie stosowane tryby automatycznego zmieniania rozmiaru.
NewRowNeeded Używany przez kontrolkę do wskazania potrzeby nowego wiersza w pamięci podręcznej danych.
RowDirtyStateNeeded Używany przez kontrolkę do określenia, czy wiersz ma jakiekolwiek niezatwierdzone zmiany.
CancelRowEdit Używany przez kontrolkę, aby wskazać, że wiersz powinien przywrócić swoje wartości w pamięci podręcznej.

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

Zdarzenia Opis
UserDeletingRow

UserDeletedRow

RowsRemoved

RowsAdded
Używany przez kontrolkę do wskazywania, kiedy wiersze są usuwane lub dodawane, co umożliwia odpowiednie zaktualizowanie pamięci podręcznej danych.
CellFormatting

CellParsing

CellValidating

CellValidated

RowValidating

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

Etykietki narzędzi komórek są wyświetlane tylko wtedy, gdy wartość ShowCellToolTips 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 lub VirtualMode właściwość ma wartość true.

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

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

RowContextMenuStripNeeded
Używany przez kontrolkę do pobierania komórki lub wiersza ContextMenuStrip , gdy właściwość kontrolki DataSource jest ustawiona lub właściwość VirtualMode 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 UpdateRowHeightInfo metodę podczas zmiany buforowanych RowHeightInfoPushed informacji o wysokości wiersza poza programem obsługi zdarzeń, aby upewnić się, że bieżąca wartość jest używana na ekranie kontrolki.

Najlepsze rozwiązania w trybie wirtualnym

Jeśli wdrażasz tryb wirtualny w celu wydajnej pracy z dużymi ilościami danych, upewnij się, DataGridView że pracujesz wydajnie z samą kontrolką. Aby uzyskać więcej informacji na temat efektywnego używania stylów komórek, automatycznego doboru rozmiaru, wyborów i udostępniania wierszy, zobacz Najlepsze rozwiązania dotyczące skalowania kontrolki DataGridView Windows Forms.

Zobacz też