以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] 列表视图 分类显示表中数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=107275) |
||||
-- 作者:堕落的后天 -- 发布时间: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() \'恢复绘制
|
||||
-- 作者:有点甜 -- 发布时间:2017/9/25 0:01:00 -- 1、分组名你要如何修改?你可以添加一个辅助列,对应的分组改成你想修改的名称
2、你可以控制预约表的加载条件,只加载今天数据;也可以直接在生成listview数据的时候,加上筛选条件 |
||||
-- 作者:堕落的后天 -- 发布时间:2017/9/25 8:47:00 -- 我不知道怎么添加自定义分组列,和添加筛选加载,能在我的代码基础上示范么,谢谢老师。 |
||||
-- 作者:有点甜 -- 发布时间:2017/9/25 9:02:00 -- 以下是引用堕落的后天在2017/9/25 8:47:00的发言:
我不知道怎么添加自定义分组列,和添加筛选加载,能在我的代码基础上示范么,谢谢老师。
结合你的代码,做一个例子发上来,说明你要做到什么效果。 |
||||
-- 作者:堕落的后天 -- 发布时间: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 |
||||
-- 作者:有点甜 -- 发布时间:2017/9/25 11:43:00 -- foxtable数据表发上来测试。 |
||||
-- 作者:堕落的后天 -- 发布时间:2017/9/25 12:18:00 -- 上传了 |
||||
-- 作者:堕落的后天 -- 发布时间:2017/9/25 12:20:00 -- 上传
|
||||
-- 作者:有点甜 -- 发布时间:2017/9/25 14:36:00 -- 参考代码
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1") For Each dr As DataRow In DataTables("预约表").Select(filter) |
||||
-- 作者:堕落的后天 -- 发布时间:2017/9/26 12:49:00 -- 谢谢版主,测试代码没有问题了,这个您写的代码为什么在 帮助里没有(listview ) 是借鉴vb.net么? 还有就是 如何用一句简短的代码刷新当前的 listview (在编辑某一行数据后),(是不是刷新还是要从新删选的) 最后,分组栏的的字体是不能设置格式的么? 貌似说明上只有三个属性,不包含front
|