Foxtable(狐表)用户栏目专家坐堂 → ListView如何做筛选查询


  共有1295人关注过本帖树形打印复制链接

主题:ListView如何做筛选查询

帅哥哟,离线,有人找我吗?
dhyskyworld
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
ListView如何做筛选查询  发帖心情 Post By:2023/12/8 14:07:00 [只看该作者]

在窗口中有以下控件,按钮控件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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107131 积分:544898 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By:2023/12/8 14:39:00 [只看该作者]

蓝老师,代码出错
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
dhyskyworld
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:85 积分:722 威望:0 精华:0 注册:2018/5/2 16:58:00
  发帖心情 Post By: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年里出现过的人,要如何修改代码,还是说按照之前的思路,插入两个日期控件来录入开始和结束日期来查询,就是有点不方便

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107131 积分:544898 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/12/8 14:41:00 [只看该作者]

http://www.foxtable.com/webhelp/topics/0400.htm

Dim filteredDRs As  List(Of DataRow)

 回到顶部