0

データベースにバインドした後、アイテムをコンボボックスに追加しようとしているので、コンボボックスは次のようになります。

コンボボックス

< オプション選択 >
値 1
値 2
値 3

以下のコードを試してみましたが、「DataSource プロパティが設定されている場合、アイテム コレクションを変更できません」というエラーが表示されます。コンボ ボックスがバインドされた後、別の項目を追加することはできません。バインドされたコンボ ボックスを使用してコンボ ボックスに項目を追加するにはどうすればよいですか?

Public Overloads Sub SqLoadCombo2(ByVal comboBox As ComboBox, ByVal cnnStr As String, ByVal TextField As String, ByVal ValueField As String, ByVal sAdditionalText As String, ByVal sAdditionalValue As String, ByVal sTextSeperator As String, ByVal sAdditionalTextDirection As String)
    comboBox.Items.Clear()

    Dim sAddText() As String
    Dim sAddValue() As String
    Dim iAddSize As Integer
    Dim iCtr As Integer

    Dim conn As New SqlConnection("SERVER=192.168.168.200,1433;DATABASE=WBIS_Laos;UID=BISSKG;PWD=BISSKG;Asynchronous Processing=false;")

    Dim strSQL As String = cnnStr
    Dim da As New SqlDataAdapter(strSQL, conn)
    Dim ds As New DataSet
    da.Fill(ds, "Disk")

    With comboBox
        .DataSource = ds.Tables("Disk")
        .DisplayMember = TextField
        .ValueMember = ValueField
        .SelectedIndex = 0
    End With

    '==Retrieve Additional Text and Value==
    If sAdditionalText.ToString <> "" Then
        sAddText = sAdditionalText.Split(sTextSeperator)
        sAddValue = sAdditionalValue.Split(sTextSeperator)
        iAddSize = sAddText.Length
    Else
        ReDim sAddText(0)
        ReDim sAddValue(0)
        iAddSize = 0
    End If
    '**Retrieve Additional Text and Value**


    '==Push Additional text into combo based on the direction request==
    sAdditionalTextDirection = sAdditionalTextDirection.ToString.Trim.ToUpper

    If sAdditionalTextDirection <> "TOP" And sAdditionalTextDirection <> "BTM" Then
        sAdditionalTextDirection = "TOP"
    End If

    If sAdditionalTextDirection = "BTM" Then
        For iCtr = 0 To iAddSize - 1
            comboBox.Items.Add(sAddText(iCtr))
            comboBox.Items(comboBox.Items.Count - 1).Value = sAddValue(iCtr)
        Next
    Else
        For iCtr = iAddSize - 1 To 0 Step -1
            comboBox.Items.Insert(0, sAddText(iCtr))
            comboBox.Items(0).Value = sAddValue(iCtr)
        Next
    End If
End Sub
4

3 に答える 3

0

私の解決策は、テーブルの一番上に新しい行を追加することです。

da.Fill(ds, "Disk")

このコードを挿入します:

Dim dr As DataRow = ds.Tables("Disk").NewRow
dr(ValueField) = -1                    ' NB :use dr(0) in others situation see example 
dr(TextField) = "< Select Option >"    ' NB :use dr(1) in others situation see example 
ds.Tables("Disk").Rows.InsertAt(dr, 0) ' Insert the new row to datatable's top

それで全部です

例 :

    Dim da As New SqlDataAdapter("Select id, Description FROM CelleEssiccazione", sConnessione)
    Dim ds As New DataSet
    da.Fill(ds, "Disk")

    Dim dr As DataRow = ds.Tables("Disk").NewRow
    dr("id") = 0                         ' or dr(0)
    dr("Description ") = "Seleziona..."  ' or dr(1)
    ds.Tables("Disk").Rows.InsertAt(dr, 0)

    MyComboBox.DataSource = ds.Tables("Disk")
    MyComboBox.DisplayMember = ds.Tables("Disk").Columns("Description").ToString
    MyComboBox.ValueMember = ds.Tables("Disk").Columns("id").ToString
于 2020-11-26T09:47:21.290 に答える