分组显示表中数据

为了便于学习本节的内容,可以先打开CaseStudy目录下的文件“ListView.Table”,并参考该文件名为“示例六”的窗口。

本节的目的是设计一个下图所示的窗口,ListView从数据表中提取数据,并用分组的形式显示各国 的详细信息:

设计步骤:

1、在窗口中分别插入一个ListView、Button控件和CheckBox控件,以及三个RadioButton控件

2、将按钮的Click事件代码设置为:

Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw.StopRedraw() '停止绘制
lvw
.Groups.Clear() '清除原来的分组
lvw
.Columns.Clear() '清除原来的列
lvw
.Rows.Clear() '清除原来的行
lvw
.Images.Clear() '清除原来的图片
lvw
.View = ViewMode.Details '显示模式为详细信息
Dim
cls() As String = {"国家","人口","面积","语言","宗教"} '定义列名
Dim
wds() As Integer = {100,100,150,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
For Each zh As String In DataTables("国家").GetValues("洲") '增加分组
    Dim
grp As WinForm.ListViewGroup = lvw.Groups.Add()
   
grp.Name = zh
   
grp.Text = zh
Next
For Each
dr As DataRow In DataTables("国家").DataRows
    Dim
Key As String = dr("图标")
    Dim
r As  WinForm.ListViewRowlvw.Rows.Add() '增加一行
   
lvw.Images.AddImage(Key, Key & ".ico", Key & "48.ico") '添加代表这个国家的一对图标
   
r.ImageKey = Key '指定图标键值
   
r.Group = dr("洲") '指定所属分组
    For Each
cl As String In cls '逐列取值
        Select Case
cl
            Case
"人口","面积" '如果是人口列或面积列
               
r(cl) = format(dr(cl),"#,000") '则显示千位分割符号
            Case Else
               
r(cl) = dr(cl)
        End Select
    Next
Next

lvw.ResumeRedraw() '恢复绘制

3、将CheckBox的CheckedChanged事件代码设置为:

Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw
.ShowGroups = e.Sender.Checked

一些提示:

1、需要向ListView中大量添加行的时候,为提高效率,应先执行StopRedraw方法,暂停绘制ListView,添加行结束后,再执行ResumeRedraw方法,恢复绘制。
2、通过设置ListView的
ShowGroups属性,可以在普通模式和分组模式中切换。


本页地址:http://www.foxtable.com/webhelp/topics/2773.htm