数据集在DatagridViewComboboxColumn行中设置默认的SelectedValue

时间:2016-01-26 14:18:30

标签: vb.net dataset datagridviewcomboboxcell

我有一个DataGridView(dgwList),我在其中加载了一组项目。这是一个中间形式,用户需要选择Action和Category,我为此创建了DataGridViewComboBoxColumns并在Form_Load事件中设置它们,如下所示:

    dtCats = ds.Tables(0)      ' Datatable with Categories
    dtActions = ds.Tables(1)   ' Datatable with Actions

    Dim colCat As DataGridViewComboBoxColumn = Me.dgwList.Columns("Category")
    Dim colActions As DataGridViewComboBoxColumn = Me.dgwList.Columns("Action")

    colCat.ValueMember = "ID"
    colCat.DisplayMember = "CategoryText"
    colCat.DataSource = dtCats
    colCat.DataPropertyName = "Category"

    colActions.ValueMember = "ID"
    colActions.DisplayMember = "Action"
    colActions.DataSource = dtActions
    colActions.DataPropertyName = "Action"

一切正常,当我加载项目(使用另一个数据集)而没有Action和Category的默认值时,我可以从DropDownList中选择它们。但是,当我加载第二个数据集(ds)并使用“Action”将值加载为默认的SelectedValue时,如下所示:

    Dim cmdtext As String = "SELECT ****, 2 as Action, *** WHERE ****; "
    Dim ds As DataSet
    ds = DAL.GetQueryResults(cmdtext)  ' using own Data Access Layer to get dataSet

    Me.dgwList.AutoGenerateColumns = False
    Me.dgwList.DataSource = ds.Tables(0)  ' load the data table

我得到“ Datagridviewcomboboxcell值无效”错误。看起来,它试图将它作为DisplayMember加载,或者只是DatGridViewComboBoxCell的Text属性,因为它显示为选定的文本。

enter image description here

我花了很多时间浏览论坛,但我发现没有任何与数据集相关的内容(Set selectedValue in DataGridViewComboBoxColumn除了缺少DataPropertyName)。一切都是关于用户在组合单元上引发的循环和事件。

我想避免错误并使用数据集(不循环修改每个单元格)来填充组合框的默认值。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

确定,

魔鬼在细节。我在数据库中将ID设置为 tinyint 数据类型,而当我尝试设置为2时,它被处理为 int32

我强制输入值到 int16 并在数据库中将ID设置为 smallint 然后它可以工作 - 我可以设置一个值:

ExpressionVisitor

所以我发现了问题,但它不符合我的问题的答案,因为它处理特定的单元格,而不是数据集。但是在SQL查询中添加CAST(.... as smallint)可以完全解决问题(结合将数据库中的ID设置为smallint):

    Dim CBox As DataGridViewComboBoxCell = CType(Me.dgwList.Rows(2).Cells("Category"), DataGridViewComboBoxCell)
    CBox.Value = CType(2, System.Int16)  ' set value to 2