以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  ListView如何做筛选查询  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189559)

--  作者:dhyskyworld
--  发布时间:2023/12/8 14:07:00
--  ListView如何做筛选查询
在窗口中有以下控件,按钮控件Button1,按钮控件代码如下:
Dim enterDate As DateTime = e.Form.Control.("DateTimePicker1").Value \'获取DateTimePicker2的日期 
Dim leaveDate As DateTime = e.Form.Control.("DateTimePicker2").Value \'获取DateTimePicker1的日期 
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 \'显示模式为详细信息  
lvw.Images.AddSmallImage("Man", "Man.ico") \'添加代表男性的图标  
lvw.Images.AddSmallImage("Woman", "Woman.ico") \'添加代表女性的图标  
Dim cls() As String = {"姓名", "性别", "出生日期", "年龄", "身份证号码", "现聘岗位", "现聘职务", "政治面貌", "进入单位日期", "籍贯", "民族", "婚姻状况", "毕业院校", "所学专业", "离开单位日期", "联系电话", "人员状态"} \'定义列名   
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.TextAlign = HorizontalAlignment.Center 
Next 
For Each lb As String In DataTables("EI").GetValues("人员类别") \'增加分组  
    Dim grp As WinForm.ListViewGroup = lvw.Groups.Add() 
    grp.Name = lb 
    grp.Text = lb 
Next 
Dim filteredDRs As DataRow() = DataTables("EI").Select("进入单位日期 < #" & enterDate & "# OR 离开单位日期 > #" & leaveDate & "#") \'筛选数据行  
For Each dr As DataRow In filteredDRs 
    Dim r As WinForm.ListViewRow = lvw.Rows.Add() \'增加一行      
    r.Group = dr("人员类别") \'指定所属分组  
    For Each cl As String In cls \'逐列取值  
        r(cl) = dr(cl) 
    Next 
    If dr("性别") = "男" Then \'设置分组  
        r.ImageKey = "Man" 
    Else 
        r.ImageKey = "Woman" 
    End If 
    r.Tag = dr\'将DataRow赋值给ListViewRow的Tag属性,将二者联系起来  
Next 
lvw.ResumeRedraw() \'恢复绘制
要求在此代码中加入筛选条件,根据入职日期和离开日期显示指定年度的出现过的人员,比如说,在窗口的一个文本控件或者是日期控件里输入2023,单击按钮,显示2023年里出现过的人,要如何修改代码,
[此贴子已经被作者于2023/12/8 14:45:28编辑过]

--  作者:有点蓝
--  发布时间:2023/12/8 14:11:00
--  
For Each lb As String In DataTables("EI").GetValues("人员类别","进入单位日期 < #" & enterDate & "# OR 离开单位日期 > #" & leaveDate & "#") \'增加分组
    Dim grp As WinForm.ListViewGroup = lvw.Groups.Add()
    grp.Name = lb
    grp.Text = lb
Next
Dim filteredDRs As DataRow() = DataTables("EI").Select("进入单位日期 < #" & enterDate & "# OR 离开单位日期 > #" & leaveDate & "#") \'筛选数据行  

--  作者:dhyskyworld
--  发布时间:2023/12/8 14:39:00
--  
蓝老师,代码出错
图片点击可在新窗口打开查看

--  作者:dhyskyworld
--  发布时间:2023/12/8 14:40:00
--  
这段是之前没加筛选之前的代码,运行没有问题:
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 \'显示模式为详细信息
lvw.Images.AddSmallImage("Man", "Man.ico") \'添加代表男性的图标
lvw.Images.AddSmallImage("Woman", "Woman.ico") \'添加代表女性的图标
Dim cls() As String = {"姓名", "性别", "出生日期", "年龄", "身份证号码", "现聘岗位", "现聘职务", "政治面貌", "进入单位日期", "籍贯", "民族", "婚姻状况", "毕业院校", "所学专业", "离开单位日期", "联系电话", "人员状态"} \'定义列名 
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.TextAlign = HorizontalAlignment.Center
Next
For Each lb As String In DataTables("EI").GetValues("人员类别") \'增加分组
    Dim grp As WinForm.ListViewGroup = lvw.Groups.Add()
    grp.Name = lb
    grp.Text = lb
Next
For Each dr As DataRow In DataTables("EI").DataRows
    Dim r As WinForm.ListViewRow = lvw.Rows.Add() \'增加一行    
    r.Group = dr("人员类别") \'指定所属分组
    For Each cl As String In cls \'逐列取值
        r(cl) = dr(cl) 
    Next
    If dr("性别") = "男" Then \'设置分组
        r.ImageKey = "Man"
    Else
        r.ImageKey = "Woman"
    End If
    r.Tag = dr\'将DataRow赋值给ListViewRow的Tag属性,将二者联系起来
Next
lvw.ResumeRedraw() \'恢复绘制
要根据入职日期和离开日期显示指定年度的出现过的人员,比如说,在窗口的一个文本控件里输入2023,单击按钮,显示2023年里出现过的人,要如何修改代码,还是说按照之前的思路,插入两个日期控件来录入开始和结束日期来查询,就是有点不方便

--  作者:有点蓝
--  发布时间:2023/12/8 14:41:00
--  
http://www.foxtable.com/webhelp/topics/0400.htm

Dim filteredDRs As  List(Of DataRow)