虚拟模式与数据表的互动
为了便于学习本节的内容,可以先打开CaseStudy目录下的文件“ListView.Table”,并参考该文件名为“示例十 八”的窗口。
由于虚拟模式可以瞬间显示大量数据,所以实际使用ListView的时候,使用虚拟模式的几率非常大。
FoxTable针对虚拟模式进行了大量的优化,与数据表的互动就是其中之一,你会看到,和常规模式相比,虚拟模式下和数据表的互动反倒变得简单了。
本节的任务是设计下图所示的系统,要求:
1、ListView用虚拟模式生成
2、在ListView中双击某国家,能宽带一个编辑窗口来修改此国家的信息。
2、单击增加、删除按钮,可以增加、删除国家。
设计步骤:
1、新建一个窗口,插入一个ListView控件和三个按钮
2、窗口的AfterLoad事件代码设置为:
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1")
lvw.StopRedraw()
'暂停绘制
lvw.View
= ViewMode.Details
'显示模式为详细内容
lvw.GridLines
= True
'显示网格线
lvw.MultiSelect
= False
'禁止选择多行
Dim
cls() As
String =
{"国家","人口","面积","语言","宗教","洲"}
'指定要显示的各列
Dim
wds()
As
Integer
=
{120,100,130,80,80,80}
'定义列宽
For
i
As
Integer
=
0
To
cls.Length
-
1
Dim
c
As
WinForm.ListViewColumn
=
lvw.Columns.Add()
c.Name
=
cls(i)
'指定列名
c.Text
=
cls(i)'指定列标题
c.Width
=
wds(i)
'指定列宽
Next
lvw.Columns("人口").Text
= "人口(万)"
'修改人口列的标题
lvw.Columns("人口").TextAlign
= HorizontalAlignment.Right
'人口列靠右对齐
lvw.Columns("面积").TextAlign
= HorizontalAlignment.Right
'面积列靠右对齐
lvw.VirtualMode
= True
'以虚拟模式显示
lvw.VirtualListSize
= DataTables("国家").DataRows.count
'设置虚拟模式下要显示的行数
lvw.ResumeRedraw()
'恢复绘制
3、将ListView的RetrieveVirtualRow事件代码设置为:
Dim
lvw As
WinForm.ListView
= e.Sender
Dim
dr As
DataRow = DataTables("国家").DataRows(e.Index)
'根据行位置从数据表中取得对应的DataRow
Dim
Key As
String = dr("图标")
lvw.Images.AddImage(Key,
Key &
".ico", Key
& "48.ico")
'添加代表这个国家的图标
e.Row.Imagekey
= key '指定图标键值
e.Row.Tag
= dr '将DataRow赋值给ListViewRow的Tag属性,将二者联系起来
For
Each cl
As WinForm.ListViewColumn
In lvw.Columns
'逐列取值
Select Case
cl.Name
Case
"人口","面积"
'如果是人口列或面积列
e.Row(cl.Name)
= Format(dr(cl.Name),"#,000")
'则显示千位分割符号
Case
Else
e.Row(cl.Name)
= dr(cl.Name)
End Select
Next
4、将ListView的RowActivate事件代码设置为:
Dim
btn As
WinForm.Button
= e.Form.Controls("btnModify")
btn.PerformClick()
'模拟单击修改按钮
5、三个按钮的代码分别设置为:
按钮 | 代码 |
增加 |
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1") |
删除 |
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1") |
修改 |
Dim
lvw As
WinForm.ListView
= e.Form.Controls("ListView1") |
可以看出,在虚拟模式下,增加和修改按钮的代码变得简单了,只需简单地通知ListView,已经增加了一行或某一行需要重新生成,当你需要对ListView的显示做更多复杂设置时,你会觉得这种特性尤为可贵。