Foxtable(狐表)用户栏目专家坐堂 → 求助:listview中不分组时候可以双击赋值 分组显示后就不能双击赋值了 求纠正代码!(已由朱老师解决)


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

主题:求助:listview中不分组时候可以双击赋值 分组显示后就不能双击赋值了 求纠正代码!(已由朱老师解决)

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
求助:listview中不分组时候可以双击赋值 分组显示后就不能双击赋值了 求纠正代码!(已由朱老师解决)  发帖心情 Post By:2014/7/12 20:21:00 [只看该作者]

求助:listview中不分组时候可以双击赋值  分组显示后就不能双击赋值了 求纠正代码!


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

不分组代码如下:
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw.StopRedraw() '暂停绘制
lvw.View = ViewMode.SmallIcon '显示模式为小图标
For Each dr As DataRow In DataTables("物品信息").DataRows '从数据表中提取数据
    Dim Key As String = dr("图片")
    Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
    lvw.Images.AddSmallImage(Key, Key & ".ico") '添加代表这个国家的小图标
    r.ImageKey = Key '指定图标键值
    r.Text = dr("物品名称") '设置标题
    r.Tag = dr  '将对应的Datarow赋值给tag属性,方便在其他事件中调用
Next
lvw.ResumeRedraw() '恢复绘制

分组显示代码:
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} '定义列宽 
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 Key As String = dr("图片")
    Dim r As  WinForm.ListViewRow =  lvw.Rows.Add() '增加一行
    lvw.Images.AddImage(Key, Key & ".ico", Key & "48.ico") '添加代表这个国家的一对图标
    r.ImageKey = Key '指定图标键值
    r.Group = dr("物品类别") '指定所属分组
    For Each cl As String In cls '逐列取值
        Select Case cl
            Case "人口","面积" '如果是人口列或面积列
                'r(cl) = format(dr(cl),"#,000") '则显示千位分割符号
            Case Else
                r(cl) = dr(cl)
        End Select
    Next
Next
lvw.ResumeRedraw() '恢复绘制


listview双击事件:(在不分组情况下是可以实现赋值操作的,但是在分组下就不能了 提示错误
.NET Framework 版本:2.0.50727.6413
Foxtable 版本:2014.3.8.1
错误所在事件:窗口,下拉窗口显示菜品,ListView1,RowActivate
详细错误信息:
未将对象引用设置到对象的实例。

Dim lvw As WinForm.ListView = e.Sender
Dim dr As DataRow =  lvw.Current.tag
Dim r As Row = e.Form.DropTable.Current
r("消费物品") = dr("物品名称")
r("物品规格") = dr("规格")
r("物品单价") = dr("物品单价")
e.Form.DropDownBox.Value = dr("物品名称")
e.Form.DropDownBox.CloseDropdown()

求纠正双击事件代码:
纠正如下:
Dim lvw As WinForm.ListView = e.Sender
Dim lv As WinForm.ListViewRow = lvw.Current
If lv Is Nothing Then
    Return
End If
If e.Form.DropTable IsNot Nothing Then '如果下拉窗口是从表中打开
    Dim tr As Row = e.Form.DropTable.Current
    tr("消费物品") = lv("物品名称")
    tr("物品规格") = lv("规格")
    tr("物品单价") = lv("物品单价")
    If tr("消费物品")<>"饭品" Then
        tr("消费数量") = 1
    Else
        Dim fanpin As Row = Tables("消费信息").Current
        tr("消费数量") = fanpin("就餐人数")
    End If
    e.Form.DropDownBox.Value = lv("物品名称")
End If
e.Form.DropDownBox.CloseDropdown()
[此贴子已经被作者于2014-7-13 22:26:54编辑过]

 回到顶部