以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]无法将类型为“Foxtable.Row”的对象强制转换为类型“Foxtable.DataRow”  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=67021)

--  作者:liuxianjie1980
--  发布时间:2015/4/17 16:51:00
--  [求助]无法将类型为“Foxtable.Row”的对象强制转换为类型“Foxtable.DataRow”
什么意思?
--  作者:Bin
--  发布时间:2015/4/17 16:51:00
--  
你的代码不对. ROW 和DATAROW是不同的,不能互相赋值.

ROW里面有.DATAROW属性 解决不了具体请把代码发上来

--  作者:liuxianjie1980
--  发布时间:2015/4/17 16:58:00
--  

“查看”按钮,写在点击事件:

 

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

 

“显示”按钮代码:

 

Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
Dim pg As Integer = e.Form.Controls("Label1").Text
Dim idx1 As Integer = (pg - 1)*10 \'获取要显示的第一行
Dim idx2 As Integer = (pg*10)-1 \'获取要显示的最末行
idx2 = Math.Min(DataTables("建议栏").dataRows.Count -1,idx2) \'idx2不能超过表的最大行数
lvw.Images.Clear() \'清除之前的图片
lvw.Rows.Clear() \'清除之前的行
For idx As Integer = idx1 To idx2
    Dim dr As Row = Tables("建议栏").Rows(idx) \'根据行位置从数据表中取得对应的DataRow
    Dim vr As WinForm.ListViewRow = lvw.Rows.Add() \'在ListView增加一行
    For Each cl As WinForm.ListViewColumn In lvw.Columns \'逐列取值
        vr(cl.Name) = dr(cl.Name)
        vr.Tag= dr
    Next
Next

 

问题原由:我在另外一个帖子中提到新增行第一个显示,就按照bin的意思把原来教材中的代码替换为红色部分,新增条位于首行的功能实现了,但是其他的按钮,如:“查看”就出现了上述的问题。

[此贴子已经被作者于2015/4/17 16:59:08编辑过]

--  作者:liuxianjie1980
--  发布时间:2015/4/17 17:03:00
--  
急盼解决,
--  作者:Bin
--  发布时间:2015/4/17 17:07:00
--  
那就发查看按钮的代码, 错误不是在这里
--  作者:Bin
--  发布时间:2015/4/17 17:08:00
--  
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 Row = vr.tag \'获取此行对应的DataRow
Dim ps As Integer = dr.index
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