【发布时间】:2016-11-06 11:08:23
【问题描述】:
我使用如下代码从 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 可排序的通用解决方案是什么?
【问题讨论】:
-
从
DataTable创建一个DataView,然后将过滤器应用于DataView。将数据源设置为您的视图... -
如果您的
DataGrdiView绑定到DataTable,则它已经是可排序的:如果用户单击列标题,则显示将按该列排序。要以编程方式执行此操作,您应该保留数据表:myDT.DefaultView.Sort = "COLUMN_NAME Asc" -
你从哪里得到错误 - 什么事件?在任何情况下,您都不需要任何代码来实现排序 - 它自己完成
-
没有代码,我们只能猜测。假设与所选项目的数量有关,它可能与所选索引或代码有关。该帖子提到了
e.RowIndex,但这在SelectionChanged事件中不可用 -
抱歉,我不能聊天
标签: vb.net sqlite sorting datagridview