我从SQLite数据库加载DataGrid上的数据,代码如下:
conn.Open()
Dim sql = "SELECT * FROM TableDataGrid"
Dim cmdConnection As SQLiteCommand = New SQLiteCommand(sql, conn)
Dim da As New SQLiteDataAdapter
da.SelectCommand = cmdConnection
Dim dt As New DataTable
da.Fill(dt)
MyDataGrid.DataSource = dt
当用户点击一行时,我会在几个文本框,组合框上显示数据,完全没问题。
现在我需要让用户通过单击他想要的列对DataGrid进行排序,当然不是那么简单。
研究" e.RowIndex> = 0"和" System.NullReferenceException"错误我理解"问题是开箱即用的BindingList不支持排序!我知道 - 听起来很愚蠢,但事实就是如此。"张贴在这里:WinForms: DataGridView - programmatic sorting
所以,如果我是对的,我需要实现自己的SortableBindingList,但我感到困惑,因为代码示例是关于LIST的,我在TABLE(dt)上加载数据库记录
实施例: http://timvw.be/2007/02/22/presenting-the-sortablebindinglistt/
另一篇帖子说我可以通过以下方式解决问题:
SortableBindingList<YourListType> sortableBindingList = new SortableBindingList<YourListType>(list)
在这种情况下,使DataGrid可以排序的通用解决方案是什么?
答案 0 :(得分:0)
感谢用户的提示,我找到了解决方案
Private Sub MyDataGrid_SelectionChanged(sender As Object, e As EventArgs) Handles MyDataGrid.SelectionChanged
'Check if the user clicked on a header or a row
Try
If MyDataGrid.CurrentRow.Index = Nothing Then
'Header clicked!!
Else
'Row clicked!!!
'Here I load the data of the clicked row on my form
FormCleanDataEntry()
FormShowRowData()
End If
Catch ex As Exception
'MsgBox(ex.ToString())
End Try
End Sub
好奇心是抛出了异常,但无论如何我没有向用户显示任何消息,并且DataGrid已经排序并且程序正常运行