以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  listview 控件中可以弹出vr.text的值,怎么对应弹出当前行的其它字段值呢?比如uuid  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=173666)

--  作者:cnsjroom
--  发布时间:2021/12/10 18:42:00
--  listview 控件中可以弹出vr.text的值,怎么对应弹出当前行的其它字段值呢?比如uuid
listview 控件中可以弹出vr.text的值,怎么对应弹出当前行的其它字段值呢?比如uuid


当前代码如下:
Dim lvw As WinForm.ListView = Forms("首页窗体").Controls("ListView1")
If lvw.Current IsNot Nothing Then
    Dim vr As WinForm.ListViewRow = lvw.Current
    vars("uuid")=vr("uuid")  vars("uuid")=vr.text  
    MessageBox.Show(vars("uuid"))
    Forms("设备外借").open
Else
    MessageBox.Show("请在图标处单击【设备外借】增加信息!","温馨提示")
End If
图片点击可在新窗口打开查看

如果改成vr(“uuid”)时候
图片点击可在新窗口打开查看
图片点击可在新窗口打开查看


[此贴子已经被作者于2021/12/10 23:53:12编辑过]

--  作者:有点蓝
--  发布时间:2021/12/11 8:58:00
--  
有添加这个名称的列吗?

Dim cls() As String = {"国家","人口","面积","语言","宗教","洲"} \'定义列名 
Dim wds() As Integer = {100,100,150,80,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

--  作者:cnsjroom
--  发布时间:2021/12/11 10:27:00
--  回复:(有点蓝)有添加这个名称的列吗?Dim cls() As...
这个是生成listview的代码:
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw.StopRedraw() \'暂停绘制
lvw.Rows.Clear() \'清除原来的行
lvw.Images.Clear() \'清除原来的图片
lvw.View = ViewMode.LargeIcon \'显示模式为大图标
lvw.Images.AddLargeImage("笔记本", "e3.ico") \'添加代表图标
lvw.Images.AddLargeImage("手机", "n1.ico") \'添加代表图标
lvw.Images.AddLargeImage("打印机", "k1.ico") \'添加代表图标
lvw.Images.AddLargeImage("记录仪", "f3.ico") \'添加代表图标
lvw.Images.AddLargeImage("台式机", "e4.ico") \'添加代表图标
lvw.Images.AddLargeImage("录音笔", "m4.ico") \'添加代表图标
lvw.Images.AddLargeImage("摄像机", "r6.ico") \'添加代表图标
lvw.Images.AddLargeImage("照相机", "r9.ico") \'添加代表图标
lvw.Images.AddLargeImage("同录设备", "31.ico") \'添加代表图标
lvw.Images.AddLargeImage("屏蔽", "e2.ico") \'添加代表图标
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 vr As  WinForm.ListViewRow =  lvw.Rows.Add() \'增加一行
    vr.Text = dr("设备型号")  \'设置标题
    If dr("设备属性") = "笔记本" Then \'设置分组
        vr.ImageKey = "笔记本"
    Else If dr("设备属性") = "记录仪" Then
        vr.ImageKey = "记录仪"
    Else If dr("设备属性") = "手机" Then
        vr.ImageKey = "手机"
    Else If dr("设备属性") = "打印机" Then
        vr.ImageKey = "打印机"
    Else If dr("设备属性") = "台式机" Then
        vr.ImageKey = "台式机"
    Else If dr("设备属性") = "录音笔" Then
        vr.ImageKey = "录音笔"
    Else If dr("设备属性") = "摄像机" Then
        vr.ImageKey = "摄像机"
    Else If dr("设备属性") = "照相机" Then
        vr.ImageKey = "照相机"
    Else If dr("设备属性") = "同录设备" Then
        vr.ImageKey = "同录设备"
    Else If dr("设备属性") = "屏蔽" Then
        vr.ImageKey = "屏蔽"
    End If
    vr.Group = dr("设备类别") \'指定所属分组
    vr.Tag= dr \'将DataRow赋值给ListViewRow的Tag属性,将二者联系起来
Next
lvw.ResumeRedraw() \'恢复绘制

生成效果如下:

然后我在窗体鼠标按下事件中写入如下代码:
If e.Button = MouseButtons.Right Then \'假定按下的是鼠标右键
    ContextMenus("设备一览").Show(e.Sender,e.x,e.y) \'则在鼠标位置显示快捷菜单
End If

并且预先设置了快捷菜单对应项  其中有一个项目是设备外借  该项目代码如下:(也就是一楼的代码)
Dim lvw As WinForm.ListView = Forms("首页窗体").Controls("ListView1")
If lvw.Current IsNot Nothing Then
    Dim vr As WinForm.ListViewRow = lvw.Current
    vars("名称")=vr.text
    Forms("设备外借").open
Else
    MessageBox.Show("请在图标处单击【设备外借】增加信息!","温馨提示")
End If


当前按照老师的提示  我是不是还要在这个生成listview的代码上写上添加listview列内容的代码  对吧
Dim cls() As String = {"设备标题","设备状态","uuid"} \'定义列名 
Dim wds() As Integer = {100,100,150} \'定义列宽 
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
假定我已经完成了上述这个添加列名的操作,我又该如何去从设备信息表里面去获取设备标题  设备状态  uuid显示在listview列名呢?
麻烦老师指导下   另外生成listview的代码有没有简化一下的写法呢

当前设备信息表里面有  键值  图片文件名称  设备属性   设备类别  设备型号这几个列   想根据这几个列的内容自动生成如图效果,而不用每一个设备属性我都去写一个键值和对应的图片

--  作者:有点蓝
--  发布时间:2021/12/11 10:47:00
--  
http://www.foxtable.com/webhelp/topics/2770.htm
--  作者:cnsjroom
--  发布时间:2021/12/11 11:32:00
--  回复:(有点蓝)http://www.foxtable.com/webhelp/to...
看了一下 参照帮助  还是没有找到解决vr(“uuid”)这个值从设备信息表中的获取的路子

Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw.StopRedraw() \'暂停绘制
lvw.Rows.Clear() \'清除原来的行
lvw.Images.Clear() \'清除原来的图片
lvw.View = ViewMode.LargeIcon \'显示模式为大图标
lvw.Images.AddLargeImage("笔记本", "e3.ico") \'添加代表图标
lvw.Images.AddLargeImage("手机", "n1.ico") \'添加代表图标
lvw.Images.AddLargeImage("打印机", "k1.ico") \'添加代表图标
lvw.Images.AddLargeImage("记录仪", "f3.ico") \'添加代表图标
lvw.Images.AddLargeImage("台式机", "e4.ico") \'添加代表图标
lvw.Images.AddLargeImage("录音笔", "m4.ico") \'添加代表图标
lvw.Images.AddLargeImage("摄像机", "r6.ico") \'添加代表图标
lvw.Images.AddLargeImage("照相机", "r9.ico") \'添加代表图标
lvw.Images.AddLargeImage("同录设备", "31.ico") \'添加代表图标
lvw.Images.AddLargeImage("屏蔽", "e2.ico") \'添加代表图标


Dim cls() As String = {"设备标题","设备状态","uuid"} \'定义列名 
Dim wds() As Integer = {100,100,150} \'定义列宽 
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 vr As  WinForm.ListViewRow =  lvw.Rows.Add() \'增加一行
    For Each cl As String In cls \'逐列取值
        vr(cl) = dr(cl)
    Next
    vr.Text = dr("设备型号")  \'设置标题
    If dr("设备属性") = "笔记本" Then \'设置分组
        vr.ImageKey = "笔记本"
    Else If dr("设备属性") = "记录仪" Then
        vr.ImageKey = "记录仪"
    Else If dr("设备属性") = "手机" Then
        vr.ImageKey = "手机"
    Else If dr("设备属性") = "打印机" Then
        vr.ImageKey = "打印机"
    Else If dr("设备属性") = "台式机" Then
        vr.ImageKey = "台式机"
    Else If dr("设备属性") = "录音笔" Then
        vr.ImageKey = "录音笔"
    Else If dr("设备属性") = "摄像机" Then
        vr.ImageKey = "摄像机"
    Else If dr("设备属性") = "照相机" Then
        vr.ImageKey = "照相机"
    Else If dr("设备属性") = "同录设备" Then
        vr.ImageKey = "同录设备"
    Else If dr("设备属性") = "屏蔽" Then
        vr.ImageKey = "屏蔽"
    End If
    vr.Group = dr("设备类别") \'指定所属分组
    vr.Tag= dr \'将DataRow赋值给ListViewRow的Tag属性,将二者联系起来
Next
lvw.ResumeRedraw() \'恢复绘制

选择上述代码生成的图标,然后选择设备外借依旧弹出一楼的错误提示

设备外借项目代码:【红色部分写上后会报错,删除后会正常打开设备外借窗口】
Dim lvw As WinForm.ListView = Forms("首页窗体").Controls("ListView1")
If lvw.Current IsNot Nothing Then
    Dim vr As WinForm.ListViewRow = lvw.Current
    vars("名称")=vr.text
    vars("状态")=vr("设备状态")
    Forms("设备外借").open
Else
    MessageBox.Show("请在图标处单击【设备外借】增加信息!","温馨提示")
End If

当前代码已经暂定如上。红色部分代码怎么将listview列名对应的值与设备信息表中的值一一对应,并解决vars("状态")=vr("设备状态")报错问题 呢?
[此贴子已经被作者于2021/12/11 11:39:24编辑过]

--  作者:有点蓝
--  发布时间:2021/12/11 12:07:00
--  
代码看不出什么问题,请上传实例测试。

或者使用tag取数据,不是已经绑定行了吗?vr.Tag= dr

--  作者:cnsjroom
--  发布时间:2021/12/11 13:46:00
--  回复:(有点蓝)代码看不出什么问题,请上传实例测试...
麻烦老师帮忙看看 谢谢  要uuid
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:listview.table



--  作者:有点蓝
--  发布时间:2021/12/11 13:51:00
--  
我测试没有问题

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看