1

スルーイベントselectedindexを設定しようとしています。つまり、データグリッド行の値を変更すると、この列は自動的に変更されます。これがコードです。datagridviewcomboboxcellcellvaluechanged

 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 



私のデータグリッドビューはデータセットにバインドされています。多くのサイトを検索し、すべての調査を行い、valuememberto.value部分を設定する必要がある上記のソリューションを取得しました。それをした後でも
system.formatexception:datagridviewcomboboxcell value is not valid.

私を助けてください。

[編集]
テーブル構造
unit_code    descp
0 -
1 番号
2 kg
3 gms

[編集 2]

 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)
4

4 に答える 4