首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在datagridview vb.net中为comboboxcell设置selectedindex

在datagridview vb.net中为comboboxcell设置selectedindex
EN

Stack Overflow用户
提问于 2014-11-13 20:27:38
回答 4查看 26.8K关注 0票数 1

我正在尝试通过cellvaluechanged事件为我的datagridviewcomboboxcell设置selectedindex,也就是说,当我更改datagrid行中的一些值时,该列应该会自动更改。这是代码。

代码语言:javascript
复制
 Private Sub DataGridView1_CellValueChanged(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged

          Try       
                If Me.DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToString <> Nothing Then
                    Me.DataGridView1("unit_code", e.RowIndex).Value = "1" 
                    MsgBox(Me.DataGridView1.Rows(e.RowIndex).Cells(6).Value)
                End If
            Else
                Exit Sub
            End If

        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try 

我的datagridview绑定到dataset。搜索了许多站点并做了所有的研究,得到了上面的解决方案,其中我们需要将valuemember设置为.value部件。即使在这样做之后,它也会给出

system.formatexception:datagridviewcomboboxcell value is not valid

请帮帮我。

编辑

表结构

unit_code descp

0*--

1%*

2%,%1,%。

三个月前,三个月前,三个月后,三个月后

编辑2

代码语言:javascript
复制
 query = "select Switch(qty=0,'2',qty<=rcvd_qty,'1',rcvd_qty=0,'2',qty>rcvd_qty,'3') as Status,item_type,catalogue,name,pd.rate,qty,pd.unit_code" _
                & " from pur_det pd,itemhead th where pd.item_code=th.itemcode and order_no=0 order by catalogue"

            adap1 = New OleDbDataAdapter(query, conn)
            Dim saldet As New DataSet
            adap1.Fill(saldet, "puritems")

            Me.DataGridView1.DataSource = saldet.Tables(0)
            DataGridView1.Columns.Item(0).HeaderText = "STATUS"
            DataGridView1.Columns.Item(0).Width = 68
            DataGridView1.Columns.Item(1).HeaderText = "TYPE"
            DataGridView1.Columns.Item(1).Width = 60
            DataGridView1.Columns.Item(2).HeaderText = "CATALOGUE"
            DataGridView1.Columns.Item(2).Width = 140
            DataGridView1.Columns.Item(3).HeaderText = "DESCRIPTION"
            DataGridView1.Columns.Item(3).Width = 300
            DataGridView1.Columns.Item(4).HeaderText = "RATE"
            DataGridView1.Columns.Item(4).Width = 60
            DataGridView1.Columns.Item(5).HeaderText = "QUANTITY"
            DataGridView1.Columns.Item(5).Width = 84
            DataGridView1.Columns.Item(6).HeaderText = "UNIT" ' this column is removed below because it only had primary key values of this table("unitmast").
            DataGridView1.Columns.Item(6).Width = 70

            adap1 = New OleDbDataAdapter("select * from unitmast order by unitcode ASC", conn)
            Dim unitc As New DataSet
            adap1.Fill(unitc, "unitmast")

            Me.DataGridView1.Columns.RemoveAt(6) 'here the same is added with display member to view its actual value
            Dim uncol As New DataGridViewComboBoxColumn
            With uncol
                .Name = "unit_code"
                .DataPropertyName = "unit_code"
                .DataSource = unitc.Tables(0)
                .ValueMember = "unitcode"
                .DisplayMember = "desc"
                .HeaderText = "UNIT"
                .FlatStyle = FlatStyle.Flat
                .DropDownWidth = 160
                .Width = 70
            End With
            Me.DataGridView1.Columns.Insert(6, uncol)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-11-13 20:42:29

DataGridViewComboBoxCell没有SelectedIndexSelectedValue属性。

可以直接设置该值,如下所示:

代码语言:javascript
复制
CType(Me.DataGridView1("unit_code", e.RowIndex), DataGridViewComboBoxCell).Value = "your value string"

或者使用items集合的索引:(只有在没有设置ValueMemberDisplayMember属性的情况下才有效)

代码语言:javascript
复制
Dim combo As DataGridViewComboBoxCell
combo = CType(Me.DataGridView1("unit_code", e.RowIndex), DataGridViewComboBoxCell)
combo.Value = combo.Items('your index')

您还可以检查一个值,而不是像这样:

代码语言:javascript
复制
If Not Me.DataGridView1.Rows(e.RowIndex).Cells(2).Value Is Nothing Then
    'Your code
End If
票数 5
EN

Stack Overflow用户

发布于 2014-11-13 21:17:15

我为您编写并测试代码祝您好运:

代码语言:javascript
复制
Dim Dt As New DataTable
Sub CreateDT()
    Dt.Columns.Add("Col1")
    Dt.Columns.Add("Col2")

    Dt.Rows.Add(New Object(1) {"1", "A"})
    Dt.Rows.Add(New Object(1) {"2", "B"})
    Dt.Rows.Add(New Object(1) {"3", "C"})
End Sub
Private Sub ChildRibbonForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    CreateDT()
    '
    'Dim CellCol As DataGridViewComboBoxColumn = CType(DataGridView1.Columns(0), DataGridViewComboBoxColumn)

    Dim CellCol As New DataGridViewComboBoxColumn
    CellCol.Items.Add("Test1")
    CellCol.Items.Add("Test2")
    CellCol.Items.Add("Test3")

    Me.DataGridView1.DataSource = Dt
    Me.DataGridView1.Columns.Insert(0, CellCol)
    Dim CellBox As DataGridViewComboBoxCell = CType(DataGridView1.Rows(1).Cells(0), DataGridViewComboBoxCell)
    'Select the Second Item
    CellBox.Value = CellCol.Items(1)
End Sub
票数 2
EN

Stack Overflow用户

发布于 2018-06-02 06:20:39

代码语言:javascript
复制
'Declare datatable
Dim cdt as new Datatable
'Add columns with types. It is important you specify the type for value member column
cdt.Columns.Add("vm", System.Type.GetType("System.Int32"))
cdt.Columns.Add("dm", System.Type.GetType("System.String"))

'Add items to table
cdt.Rows.Add
cdt.Rows(0).Item(0) = 1
cdt.Rows(0).Item(1) = "Red Cat"
cdt.Rows.Add
cdt.Rows(1).Item(0) = 2
cdt.Rows(1).Item(1) = "Black Cat"

'Add datasource to DataGridViewComboBoxColumn
Dim cc As DataGridViewComboBoxColumn
cc = datagridview1.Columns('colIndex')
cc.DataSource = cdt
cc.ValueMember = "vm"
cc.DisplayMember = "dm"

'Setting then selected value is thus:
Datagridview1.Rows('rowIndex').Cells('colIndex').Value = 2  '2 for black cat

这对我很管用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26908886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档