轻松实现拖动行动能
为了便于学习本节的内容,可以先打开CaseStudy目录下的文件“ListView.Table”,并参考该文件名为“示例二十一”的窗口。
ListView中的行是拖动的,行可以在ListView内部拖动,以可视化的方式调整行的位置,也可以将行从一个ListView拖动到另一个ListView,只要两个ListView的结构相同。
ListView有两个和拖动相关的属性,分别是:
你如果要实现普通的拖动行功能,只需将这两个属性设置为True即可,是的,就是这么简单。
下面我们来做个练习,任务是实现下图所示的功能,ListView中行可以通过拖动调整位置,且可以将调整后的顺序保存在DataTable中:
设计步骤:
1、窗口的AfterLoad事件代码设置为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1") |
上面的代码中,和拖动相关的代码就是第5和第6行,另外注意第18行的,为了体现出“顺序”,我们根据_SortKey列的值的顺序来添加ListViewRow,并在第23行代码将对应的DataRow赋值给ListViewRow的Tag属性,方便之后调用。
2、将“保存顺序”按钮的代码设置为:
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1")
DataTables("国家").StopRedraw
For
Each vr
As WinForm.ListViewRow
In lvw.Rows
Dim dr
As DataRow =
vr.tag
dr.BaseRow("_SortKey")
= vr.Index
Next
DataTables("国家").ResumeRedraw
DataTables("国家").Save()
提示:
1、这个例子用_SortKey列作为顺序列,你也可以用其它列,只要这一列的值能代表行的顺序即可。
2、对于外部表,_SortKey列默认是没有的,需要启用插入行功能,才会增加这一列。
3、如果你足够细心,你也许已经发现我们是这样更新_SortKey这一列的值的:
dr.BaseRow("_SortKey") = vr.Index
这是因为_SortKey是系统列,不能直接更改它的值,必须通过BaseRow才能更改。