DataGridViewComboBoxColumn如何设置默认值?

lcnkr 2017-02-05 12:13:44
我有一个DataGridView,未绑定数据源,而是从DataSource中读取并逐行添加。
现在要将其中的一列替换为DataGridViewComboBoxColumn格式。
方法参考网上说的,实现代码如下:
        Dim Type_Column As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn
Type_Column.HeaderText = "材料类型"
Type_Column.Name = "Obj_Name"
'定义DGV下拉列表列

Dim sql As String = "select Obj_Type from ObjectType_List"
da = New OleDbDataAdapter(sql, cn)
ds = New DataSet
'准备查询所有材料类型

da.Fill(ds, "FillComboBoxByObjType")
Dim RowsCount = ds.Tables(0).Rows.Count
'建立数据集,统计记录数

Dim i
For i = 0 To RowsCount - 1
Dim Type As String = ds.Tables(0).Rows(i)(0).ToString
Type_Column.Items.Add(Type)
Next
'将查询结果(数据集)添加到Combobox中

cn.Close()

ObjectList_DataGridView.Columns.Insert(0, Type_Column)
'将下拉列表列插入到DGV第一列

For i = 0 To ObjectList_DataGridView.Rows.Count - 1
ObjectList_DataGridView.Rows(i).Cells(0).Value = ObjectList_DataGridView.Rows(i).Cells(2).Value
Next
'将下拉列表的默认值设为与DS中材料类型一致

ObjectList_DataGridView.Columns.RemoveAt(2)
'删除材料类型列,用combobox替换


效果是实现了,DataGridViewComboBoxColumn那一列也能正确显示默认值。
但是问题来了,一旦点击该DataGridView的某列重新排序,那ComboBoxColumn一列的value就会消失变成“”。
也许是我默认值的设置有问题?

combox的话好像是通过"DisplayMember"和"ValueMember"来设置默认值,那ComboBoxColumn的话该如何设置呢?
...全文
759 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2017-02-07
  • 打赏
  • 举报
回复
有病啊?你不会一次性把需要的字段都取出来。
谁告诉你一个 SELECT 语句只能取一个字段的?×翔教的?
xdashewan 2017-02-06
  • 打赏
  • 举报
回复
引用 2 楼 lcnkr 的回复:
这样一来,每行都要查询一次,如果有很多行的话,加载速度会很慢。 有什么好的解决办法吗?谢谢!
如果ObjectType_List内类型数据不多,可以一次全部获取,之后在内存中取值
lcnkr 2017-02-05
  • 打赏
  • 举报
回复
啊,我自己找到办法了…… 还是要先新建一个dataset,设置好"DisplayMember"和"ValueMember",绑定为ComboBoxColumn的数据源。 然后就可以指定指定cells的value了
lcnkr 2017-02-05
  • 打赏
  • 举报
回复
那我能不能换个问题? 现在的情况,我在设置初始值时,要先从数据库中查询显示值对应的ID值。
    Public Function GetIDByType(ByVal Obj_Type As String) As String
        DBcon()

        Dim sql As String = "Select Type_ID from ObjectType_List where Obj_Type = '" + Obj_Type + "'"
        da = New OleDbDataAdapter(sql, cn)
        ds = New DataSet
        da.Fill(ds, "GetIDByType")
        Dim Type_ID As String = ds.Tables(0).Rows(0)(0).ToString

        Return Type_ID
    End Function
这样一来,每行都要查询一次,如果有很多行的话,加载速度会很慢。 有什么好的解决办法吗?谢谢!

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧