以文本方式查看主题 - 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=178064) |
-- 作者:zyxhx -- 发布时间:2022/6/16 15:04:00 -- 筛选后的数据加载到容器ListView后双击提示错误 请老师指正:在用ListView容器中显示筛选后的数据,双击选中行或单击修改按钮后提示错误,请问老师如何修改代码?按钮代码如下: Dim lvw As WinForm.ListView = e.Form.Controls("ListView1") Dim vr As WinForm.ListViewRow = lvw.Current \'获取ListView的当前行 If vr Is Nothing Then \'如果不存在当前行,也就是内有选定任何一行 Return End If Dim dr As DataRow = vr.tag \'获取此行对应的DataRow Dim ps As Integer = Tables("高血压糖尿病老年人的随访个体化健康教育活动记录表").FindRow(dr) If ps >= 0 Then Tables("高血压糖尿病老年人的随访个体化健康教育活动记录表").Position = ps Forms("慢病随访个体化窗口三").Open For Each cl As WinForm.ListViewColumn In lvw.Columns \'逐列更新值 vr(cl.Name) = dr(cl.Name) Next End If 错误提示如下: .NET Framework 版本:4.0.30319.42000 Foxtable 版本:2020.4.19.8 错误所在事件:窗口,随访个体化健康教育记录表三,btnEdit,Click 详细错误信息: 无法将类型为“Foxtable.Row”的对象强制转换为类型“Foxtable.DataRow”。 [此贴子已经被作者于2022/6/16 15:07:11编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/6/16 15:06:00 -- 提示什么错误? |
-- 作者:zyxhx -- 发布时间:2022/6/16 15:08:00 -- 错误提示如下: .NET Framework 版本:4.0.30319.42000 Foxtable 版本:2020.4.19.8 错误所在事件:窗口,随访个体化健康教育记录表三,btnEdit,Click 详细错误信息: 无法将类型为“Foxtable.Row”的对象强制转换为类型“Foxtable.DataRow”。 |
-- 作者:有点蓝 -- 发布时间:2022/6/16 15:12:00 -- ListView怎么生成的? |
-- 作者:zyxhx -- 发布时间:2022/6/16 15:19:00 -- 用查询后生成的: Dim nms() As String = {"xinmin","qsdate","jsdate"} Dim sps() As String = {"\'","#","#"} Dim bjf() As String = {" = "," >= "," <= "} Dim fds() As String = {"姓名","随访时间","随访时间"} Dim filter As String For i As Integer = 0 To nms.Length - 1 If e.Form.Controls(nms(i)).value IsNot Nothing Then If filter > "" Then filter = filter & " and " End If filter = filter & fds(i) & bjf(i) & sps(i) & e.Form.Controls(nms(i)).value & sps(i) End If Next If filter > "" Then Tables("高血压糖尿病老年人的随访个体化健康教育活动记录表").filter = filter End If Dim lvw As WinForm.ListView = e.Form.Controls("ListView1") lvw.Reset() \'重置ListView,清除所有的分组?列?行和图片. lvw.View = ViewMode.Details lvw.Images.AddSmallImage("Man", "Man.ico") \'添加代表男性的图标 lvw.Images.AddSmallImage("Woman", "Woman.ico") \'添加代表女性的图标 Dim cls() As String = {"序号","姓名","性别","年龄","地址","电话","疾病诊断","档案编号","随访时间","随访编号","随访单位","随访图片"} \'定义列名 Dim wds() As String = {60,60,50,50,100,100,100,150,100,100,100,100} \'定义列宽 For i As Integer = 0 To cls.Length - 1 \'增加列 Dim c As WinForm.ListViewColumn = lvw.Columns.Add() c.Text = cls(i) \'指定列标题 c.Name = cls(i) \'指定列名 c.Width = wds(i) \'指定列宽 Next For Each dr As Row In Tables("高血压糖尿病老年人的随访个体化健康教育活动记录表").Rows \'从数据表中提取数据 Dim vr As WinForm.ListViewRow = lvw.Rows.Add() \'增加一行 For Each cl As String In cls \'逐列取值 vr(cl) = dr(cl) Next If dr("性别") = "男" Then \'设置分组 vr.ImageKey = "Man" Else vr.ImageKey = "Woman" End If vr.Tag= dr \'将DataRow赋值给ListViewRow的Tag属性,将二者联系起来 Next [此贴子已经被作者于2022/6/16 15:21:01编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/6/16 15:26:00 -- tag属性绑定的是row,所以使用的时候也必须使用row For Each dr As Row In Tables("高血压糖尿病老年人的随访个体化健康教育活动记录表").Rows \'从数据表中提取数据 …… vr.Tag= dr \'将DataRow赋值给ListViewRow的Tag属性,将二者联系起来 Next 既然是row就没有必要再查一次了 Dim dr As Row = vr.tag \'获取此行对应的DataRow Tables("高血压糖尿病老年人的随访个体化健康教育活动记录表").Position = dr.index Forms("慢病随访个体化窗口三").Open For Each cl As WinForm.ListViewColumn In lvw.Columns \'逐列更新值 vr(cl.Name) = dr(cl.Name) Next |
-- 作者:zyxhx -- 发布时间:2022/6/16 15:33:00 -- 谢谢老师指正,修改后可以了。 |
-- 作者:zyxhx -- 发布时间:2022/6/16 15:38:00 -- 另外请教一下老师:能不能在容器加载所有datatables数据后再在容器中直接查询:用日期,姓名等进行查询。 |
-- 作者:有点蓝 -- 发布时间:2022/6/16 15:58:00 -- 容器指listview?listview没有查询功能,只能遍历所有行,逐行比较判断。 |
-- 作者:zyxhx -- 发布时间:2022/6/16 16:15:00 -- 好的,感谢老师指点。 |