Foxtable(狐表)用户栏目专家坐堂 → [求助]动态加载控件绑定出错


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

主题:[求助]动态加载控件绑定出错

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


加好友 发短信
等级:三尾狐 帖子:712 积分:5553 威望:0 精华:0 注册:2019/11/14 9:36:00
[求助]动态加载控件绑定出错  发帖心情 Post By:2020/8/26 11:53:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.zip

Dim cm As WinForm.ComboBox
cm = e.Form.CreateControl("ComboBox" & "+" & Tables("导入资料").Rows(0)("第一列"), ControlTypeEnum.ComboBox)
e.Form.AddControl(cm)
cm.SetBounds(100,30,150,21)


为什么加上以下代码,及绑定的表和列就会出错?

'cm.DisplayMember = "列标题" '设置显示列
'cm.ValueMember = "列标题" '设置取值列
'cm.DataSource = "导入" '列表项目来源的表

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107896 积分:548849 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/26 12:08:00 [只看该作者]

换种用法:cm.ComboList = DataTables("导入").GetComboListString("列标题")

 回到顶部
帅哥哟,离线,有人找我吗?
2425004926
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5553 威望:0 精华:0 注册:2019/11/14 9:36:00
  发帖心情 Post By:2020/8/26 12:18:00 [只看该作者]

 因为在组合框后边还增加了一个文本框,组合框选值,自动带出文本框值
If Typeof e.sender Is WinForm.ComboBox Then
    Dim cm As WinForm.ComboBox = e.sender
    Dim dr As DataRow = cm.SelectedItem
   
    For Each c As Winform.Control In e.Form.Controls
        If Typeof c Is WinForm.textBox Then
            Dim d As WinForm.textBox = c             '必须要定义文本框,否则会出错,Value对应的是文本框,而不是原始控件
            Dim a As String = cm.name.Replace("ComboBox","")
            If d.Name.Contains(a) Then
                d.Value = dr("第二列")
            End If
        End If
    Next
End If

如果用上边的方法,是可以选择,但文本框带出值时会出错
我以前用静态时没有问题 ,现在想改成动态增加时就出错

 回到顶部
帅哥哟,离线,有人找我吗?
2425004926
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5553 威望:0 精华:0 注册:2019/11/14 9:36:00
  发帖心情 Post By:2020/8/26 12:22:00 [只看该作者]


[此贴子已经被作者于2020/8/26 12:31:31编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
2425004926
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5553 威望:0 精华:0 注册:2019/11/14 9:36:00
  发帖心情 Post By:2020/8/26 12:38:00 [只看该作者]

 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:导入测试--看窗口1.zip


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107896 积分:548849 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/26 13:41:00 [只看该作者]

由于不是绑定的,所以SelectedItem并不是datarow类型

If Typeof e.sender Is WinForm.ComboBox AndAlso e.sender.Name.Contains("+") Then
    Dim cm As WinForm.ComboBox = e.sender
    If cm.text > "" Then
        Dim txtName As String = "TextBox+" & cm.Name.Split("+")(1)
        Dim dr As DataRow = DataTables("导入").Find("列标题='" & cm.text & "'")
        If e.Form.ExistControl(txtName ) And dr IsNot Nothing
            Dim d As WinForm.textBox = e.Form.Controls(txtName)
            d.Text = dr("第二列")
        End If
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
2425004926
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5553 威望:0 精华:0 注册:2019/11/14 9:36:00
  发帖心情 Post By:2020/8/26 14:31:00 [只看该作者]

非常感谢!感谢!
还有一个问题,窗口的高度是随着”导入资料“表的行数决定,是变化状态,以下代码没有起作用,应该写在哪个事件
e.Form.Height = 20+134+20 + Tables("导入资料").rows.Count * 31 +30 +20+85+25

 回到顶部
帅哥哟,离线,有人找我吗?
2425004926
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:712 积分:5553 威望:0 精华:0 注册:2019/11/14 9:36:00
  发帖心情 Post By:2020/8/26 14:57:00 [只看该作者]

改成以下,好了
e.Form.BaseForm.Height

 回到顶部