Dzisiaj miałem ten problem. Mam numer DataGridView
, który regularnie zamienia jego DataSource
(a DataTable
). Udało mi się w końcu usunąć rodzaju, że użytkownik określony, gdy użytkownik kliknął nagłówek kolumny stosując następujący kod:
If dgv.SortedColumn IsNot Nothing AndAlso dgv.DataSource IsNot Nothing Then
Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)
dt_Sender.DefaultView.Sort = dt_Sender.Columns(0).ColumnName & " ASC"
End If
Funkcjonuje to bo mam ukrytą kolumnę w moim DataGridView
który jest zawsze w pozycji kolumny indeksu 0. Jest to klucz podstawowy będący liczbą całkowitą dla podstawowych danych, które są sortowane według obciążenia danych.
* Być może będziesz musiał nazwać swoją kolumnę indeksową w DataTable
, jeśli jeszcze jej nie masz (np. dt_Sender.Columns(0).ColumnName = "colIndex"
).
* Jeśli używasz BindingSource
obiekt jako pośrednik między Twoim DataGridView
i swojej DataTable
(jak wielu ludzi wydaje się zrobić), a następnie trzeba będzie gniazdo swoje DirectCast
odpowiednio w drugiej linii (tj Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)
zmieniłoby się coś w stylu: Dim dt_Sender As DataTable = DirectCast(DirectCast(dgv.DataSource, BindingSource), DataTable)
).
* Dodatkowo, jeśli twoja DataTable
zapełni się zapytaniem SQL Server, które nie ma klucza głównego integer (być może identyfikatora GUID?), Możesz zmienić jego zapytanie źródłowe o nowy numer wiersza, a następnie ukryj nową kolumnę w swoim DataGridView
. Na przykład.:
SELECT Row_Number() OVER (ORDER BY (SELECT '')) AS RowNumber, Column1, Column2, Column3
FROM SourceTable
Mam nadzieję, że to rozwiązanie jest pomocne dla kogoś innego w przyszłości.
Czy to jest siatka związana z danymi? –
Tak. Ale nawet przełączam DataSources. Nazywam DataSource = null i Columns.Clear przed przełącznikiem. – BuddyJoe
Chciałbym umożliwić odświeżenie, ale zapisać kolejność sortowania. Ale jeśli użytkownik przełącza to, na co chce spojrzeć (za pomocą TreeView), to chciałbym, aby kolejność sortowania zniknęła. Czy to błąd? Próbowałem kilku rzeczy, nie potrafię wymyślić sposobu, żeby to odejść. – BuddyJoe