首页 文章

将额外的项添加到数据绑定组合框中

提问于
浏览
0

我试图在与数据库绑定后将一个项目添加到组合框中,这样组合框可以有这样的东西:

Combobox

<选择选项>
Value 1
Value 2
Value 3

尝试使用下面的代码,但我收到错误 "Items collection cannot be modified when the DataSource property is set." 它's doesn' t允许我在组合框绑定后添加另一个项目 . 如何使用绑定的组合框将额外的项添加到组合框中?

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

2 回答

  • 1

    而不是将组合框绑定到 dataAdapter 只是从头开始创建自己的 DataTable - 首先用你想要添加到列表中的字段填充你的表,然后循环读取你将每个项目添加到 DataTable . 在此之后,您可以将表格绑定到组合框 . 下面是我使用它的一个例子

    Dim sqlHardware As String = "SELECT * FROM Hardware ORDER BY HardwareType"
    Dim dtHardware As New DataTable, drHardware As DataRow
    dtHardware.Clear()
    dtHardware.Columns.Add(New DataColumn("ID", GetType(String))) '1
    dtHardware.Columns.Add(New DataColumn("HardwareType", GetType(String))) ' 2
    Dim commandHardware As New SqlCommand(sqlHardware, ConnMVC)
    If ConnMVC.State <> 1 Then ConnMVC.Open()
    Dim readerHardware As SqlDataReader = commandHardware.ExecuteReader()
    If readerHardware.HasRows Then
        drHardware = dtHardware.NewRow()
        drHardware(0) = "0"
        drHardware(1) = "Select Type"
        dtHardware.Rows.Add(drHardware)
        Do While readerHardware.Read
            drHardware = dtHardware.NewRow()
            drHardware(0) = readerHardware!ID
            drHardware(1) = readerHardware!HardwareType
            dtHardware.Rows.Add(drHardware)
        Loop
        cbSoortHardware.DataSource = dtHardware
        cbSoortHardware.DisplayMember = "SoortHardware"
        cbSoortHardware.ValueMember = "ID"
        cbSoortHardware.SelectedIndex = 0
    End If
    
  • 1

    我使用BindingSource对象,我连接到源列表,然后将其tye到ComboBox . 所有操作都转移到源并刷新到组合框 . 在带有组合框和按钮的简单样品下方:

    Public Class Form1
    Dim CoupledOrder As New List(Of clsCoupledOrder)
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim cOrder As clsCoupledOrder
        cOrder = New clsCoupledOrder("1", "Sunday")
    
        CoupledOrder.Add(New clsCoupledOrder("1", "Sunday"))
        CoupledOrder.Add(New clsCoupledOrder("2", "Monday"))
        CoupledOrder.Add(New clsCoupledOrder("3", "Tuesday"))
        CoupledOrder.Add(New clsCoupledOrder("4", "Wednesday"))
        CoupledOrder.Add(New clsCoupledOrder("5", "Thursday"))
        CoupledOrder.Add(New clsCoupledOrder("6", "Friday"))
        CoupledOrder.Add(New clsCoupledOrder("7", "Saturday"))
    
        BindingSource1.DataSource = New BindingSource(CoupledOrder, Nothing)
    
        ComboBox1.DataSource = BindingSource1
        ComboBox1.DisplayMember = "Value"
        ComboBox1.ValueMember = "Description"
    
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
        Dim AddValue As clsCoupledOrder = New clsCoupledOrder("8", "ExtraDay")
    
        BindingSource1.List.Insert(0, AddValue)
    End Sub
    
    Private Sub BindingSource1_CurrentChanged(sender As Object, e As EventArgs) Handles BindingSource1.CurrentChanged
    
    End Sub
    

    结束班

    Public Class clsCoupledOrder
    Private StringDesc As String
    Private GUID As String
    
    Public Sub New(ByVal desc As String, ByVal value As String)
    
        Me.StringDesc = desc
        Me.GUID = value
    
    End Sub
    
    
    Public Property Description() As String
        Get
            Return StringDesc
        End Get
        Set(ByVal value As String)
            StringDesc = value
    
        End Set
    End Property
    
    Public Property Value() As String
        Get
            Return GUID
        End Get
        Set(ByVal value As String)
            GUID = value
        End Set
    End Property
    

    结束班

相关问题