0

適切に機能するコンボ ボックス セルをバインドする次のコードがあります。

Const colIndex As Integer = 1
        Dim dgvcombo As DataGridViewComboBoxCell
        dgvcombo = gvMain.Rows(_rowindex).Cells("SerialNumber")
        dtGrpBrand = getDataTable("select * from (select SSPERPSerialMaster.ProductID,SSPERPSerialMaster.SizeID,SSPERPSerialMaster.GaugeID, SSPERPSerialMaster.SerialID,SSPERPSerialMaster.SerialNumber,ISNULL(SSPERPSerialEntryOpening.Qty,0)+ISNULL(a.Stock,0) as [Closing Qty] " & _
                        "from SSPERPProductMaster " & _
                        "left join SSPERPSerialMaster on SSPERPSerialMaster.ProductID=SSPERPProductMaster.ProductID " & _
                        "left join SSPERPSerialEntryOpening on SSPERPSerialEntryOpening.SerialID=SSPERPSerialMaster.SerialID and SSPERPSerialMaster.ProductID=SSPERPSerialEntryOpening.ProductID " & _
                        "left join (select SerialId,SUM(ISNULL(case when AL='A' then Qty else - Qty end, 0)) as [Stock] from SSPERPStock group by SerialId) a on a.SerialId=SSPERPSerialMaster.SerialID) a " & _
                        "where a.[Closing Qty]<>0 and a.ProductID=" & gvMain.Rows(_rowindex).Cells("ProductId").Value.ToString() & " and a.SizeID=" & gvMain.Rows(_rowindex).Cells("SizeId").Value.ToString() & " and a.GaugeID=" & gvMain.Rows(_rowindex).Cells("GaugeId").Value.ToString(), CompanyCon)
        dtGrpBrand.Rows.Add()
        dtGrpBrand.Rows(dtGrpBrand.Rows.Count - 1)("SerialNumber") = "-- Select --"
        dtGrpBrand.Rows(dtGrpBrand.Rows.Count - 1)("SerialId") = 0
        dgvcombo.AutoComplete = True
        CType(gvMain.Rows(_rowindex).Cells(colIndex), DataGridViewComboBoxCell).DataSource = dtGrpBrand
        CType(gvMain.Rows(_rowindex).Cells(colIndex), DataGridViewComboBoxCell).DisplayMember = "SerialNumber"
        CType(gvMain.Rows(_rowindex).Cells(colIndex), DataGridViewComboBoxCell).ValueMember = "SerialId"
        CType(gvMain.Rows(_rowindex).Cells(colIndex), DataGridViewComboBoxCell).Value = 0

このコードは、データの挿入モードを使用している間、アプリケーションで完全に機能しますが、ユーザーがリストからレコードを選択すると、「SerialNumber」のセルを動的に結合する必要があります。コンボボックスのセルを適切にバインドしますが、次のコードを指定して値を設定すると、機能せず、エラーが発生します:

gvMain.Rows(gvMain.Rows.Count - 1).Cells("SerialNumber").Value = dtrow("SerialId")

選択した値を取得するために次の行も試しましたが、解決策はありません:

CType(gvMain.Rows(gvMain.Rows.Count - 1).Cells("SerialNumber"), DataGridViewComboBoxCell).Value = dtrow("SerialId")

ここで gvmain は datagridview で、dtrow は datarow です

4

2 に答える 2

0

DataGridViewComboboxCellプロパティを持っていDataSourceます。以下を使用して値を設定してみてください。

   Dim lst As New List(Of String)()
   lst.Add(dtrow("SerialId").ToString)
   DirectCast(DataGridView1.Rows(gvMain.Rows.Count - 1).Cells("SerialNumber"), DataGridViewComboBoxCell).DataSource = lst

問題が解決するはずです。

于 2012-11-05T12:43:49.967 に答える
0

dtrow("SerialId")オブジェクトを返します。あなたは明らかに値に興味があるので、試してみてくださいdtrow("SerialId").ToString

gvMain.Rows(gvMain.Rows.Count - 1).Cells("SerialNumber").Value = dtrow("SerialId").ToString
于 2012-11-05T08:51:58.727 に答える