Foxtable(狐表)用户栏目专家坐堂 → [求助] 列表视图 分类显示表中数据


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

主题:[求助] 列表视图 分类显示表中数据

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


加好友 发短信
等级:幼狐 帖子:175 积分:1431 威望:0 精华:0 注册:2017/8/4 14:17:00
[求助] 列表视图 分类显示表中数据  发帖心情 Post By:2017/9/24 22:30:00 [只看该作者]

想要按表内的某一列(字段)分组,但是想要定义新的分组名字,而不是按表里面的字段显示,如何做到?(下面是我写的代码)还有就是,在Listview里面怎么筛选加载的数据,比如加载今天的数据(这个筛选条件怎么加)




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 r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
        
    r.Group = dr("开始时") '指定所属分组
    For Each cl As String In cls '逐列取值
                        r(cl) = dr(cl)
        
    Next
Next
lvw.ResumeRedraw() '恢复绘制

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/25 0:01:00 [只看该作者]

1、分组名你要如何修改?你可以添加一个辅助列,对应的分组改成你想修改的名称

 

2、你可以控制预约表的加载条件,只加载今天数据;也可以直接在生成listview数据的时候,加上筛选条件


 回到顶部
帅哥哟,离线,有人找我吗?
堕落的后天
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1431 威望:0 精华:0 注册:2017/8/4 14:17:00
  发帖心情 Post By:2017/9/25 8:47:00 [只看该作者]

我不知道怎么添加自定义分组列,和添加筛选加载,能在我的代码基础上示范么,谢谢老师。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/25 9:02:00 [只看该作者]

以下是引用堕落的后天在2017/9/25 8:47:00的发言:
我不知道怎么添加自定义分组列,和添加筛选加载,能在我的代码基础上示范么,谢谢老师。

 

结合你的代码,做一个例子发上来,说明你要做到什么效果。


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


加好友 发短信
等级:幼狐 帖子:175 积分:1431 威望:0 精华:0 注册:2017/8/4 14:17:00
  发帖心情 Post By:2017/9/25 11:38:00 [只看该作者]

我的表里面有(状态,病人姓名,开始时间,结束时间,日期*****  几个字段),想要在listview 按开始时间分类,加载当天的预约病人,编写了下面的代码;

1.现在不知道在哪里添加前置筛选来只加载日期符合当天的项目

2.如何将“开始时间”(分类的组)改为自己想要的分组;

3.按每行的某一字段判断,自定义这个单元格的颜色;

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 r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
        
    r.Group = dr("开始时") '指定所属分组
    For Each cl As String In cls '逐列取值
                        r(cl) = dr(cl)
        
    Next
Next
lvw.ResumeRedraw() '恢复绘制



***********************************

改颜色的代码  自己写的 (但是是改整行的,不是单元格) 

If dr("状态") = "已约" Then '用蓝底白字整行显示东正教国家
        r.CellUseRowStyle = False
      r.BackColor = Color.Brown
        r.ForeColor = Color.White
        
    Else If dr("状态") = "取消" Then
        r.BackColor = Color.Brown
        r.ForeColor = Color.White
    Else If dr("状态") = "到达" Then
        r.BackColor = Color.DarkViolet
        r.ForeColor = Color.White
    Else If dr("状态") = "过期" Then
        r.BackColor = Color.Gray
        r.ForeColor = Color.White
    Else
 End If


*****************************************************************

自己觉得的自定义分组名字

For i As Integer = 0 To nms.Length - 1

Dim r As WinForm.ListViewRow = lvw.Rows.Add()

r.Text = nms(i)

Dim sj() As String = {"8::0-9:00","9:00-10:00","10:00-11:00"} 

Select Case sj(i) '指定各个国家所属的分组
Case "9"
r.Group = "9:00-10:00"
Case "10"
r.Group = "10:00-11:00"

End Select








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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/25 11:43:00 [只看该作者]

 foxtable数据表发上来测试。

 回到顶部
帅哥哟,离线,有人找我吗?
堕落的后天
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1431 威望:0 精华:0 注册:2017/8/4 14:17:00
  发帖心情 Post By:2017/9/25 12:18:00 [只看该作者]

上传了

 回到顶部
帅哥哟,离线,有人找我吗?
堕落的后天
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1431 威望:0 精华:0 注册:2017/8/4 14:17:00
  发帖心情 Post By:2017/9/25 12:20:00 [只看该作者]

上传
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:预约测试.zip


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/25 14:36:00 [只看该作者]

参考代码

 

Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw.StopRedraw() '停止绘制
lvw.Groups.Clear() '清除原来的分组
lvw.Columns.Clear() '清除原来的列
lvw.Rows.Clear() '清除原来的行
lvw.Images.Clear() '清除原来的图片
Dim filter As String = "日期 = #" & Date.Today & "#"
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("开始时", filter) '增加分组
    Dim grp As WinForm.ListViewGroup = lvw.Groups.Add()
    grp.Name = zh
    Select Case zh
        Case 9
            grp.Text = "9:00-10:00"
        Case 10
            grp.Text = "10:00-11:00"
        Case 11
            grp.Text = "11:00-12:00"
        Case Else
            grp.Text = zh
    End Select
Next

For Each dr As DataRow In DataTables("预约表").Select(filter)
    Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
    r.Group = dr("开始时")
    For Each cl As String In cls '逐列取值
        r(cl) = dr(cl)
    Next
   
    r.CellUseRowStyle = False
    If dr("状态") = "已约" Then '用蓝底白字整行显示东正教国家
        r.Cells(0).BackColor = Color.Gray
        r.Cells(0).ForeColor = Color.White
       
    Else If dr("状态") = "取消" Then
        r.Cells(0).BackColor = Color.Brown
        r.Cells(0).ForeColor = Color.White
    Else If dr("状态") = "到达" Then
        r.Cells(0).BackColor = Color.DarkViolet
        r.Cells(0).ForeColor = Color.White
    Else If dr("状态") = "过期" Then
        r.Cells(0).BackColor = Color.Gray
        r.Cells(0).ForeColor = Color.White
    Else
       
    End If
Next
lvw.ResumeRedraw() '恢复绘制


 回到顶部
帅哥哟,离线,有人找我吗?
堕落的后天
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1431 威望:0 精华:0 注册:2017/8/4 14:17:00
  发帖心情 Post By:2017/9/26 12:49:00 [只看该作者]

谢谢版主,测试代码没有问题了,这个您写的代码为什么在  帮助里没有(listview  )  是借鉴vb.net么?

还有就是  如何用一句简短的代码刷新当前的  listview (在编辑某一行数据后),(是不是刷新还是要从新删选的) 

最后,分组栏的的字体是不能设置格式的么?  貌似说明上只有三个属性,不包含front

 回到顶部
总数 11 1 2 下一页