简体   繁体   English

如何在VB.NET中填充COMBO BOX

[英]HOW TO FILL COMBO BOX IN VB.NET

I have a code to fill my combo box but every time i close the form the list is being doubled, if i have a list from my database of English, Mathematics, Science after i close the form and open it again the list showing is now English, Mathematics, Science, English, Mathematics, Science 我有一个代码来填充我的组合框但是每次我关闭表单时列表都会加倍,如果我有一个来自我的英语,数学,科学数据库的列表,我关闭表单后再打开它列表显示现在英语,数学,科学,英语,数学,科学

HERE IS THE CODE, 这是代码,

    Call OpenDB()

    cmd.CommandText = "select * from Subject"
    cmd.Connection = conn
    dr = cmd.ExecuteReader

    While dr.Read()
        cmbSubject.Items.Add(dr("Subject Name"))    

    End While
    dr.Close()

    Call CloseDB()

The problem is not in the method you are using to bind the combobox . 问题不在于您用于绑定combobox in each time it binds that's why you are getting duplicate records in the database. 在每次它绑定,这就是你在数据库中获得重复记录的原因。 to avoid this please clear the combobox before each bind, like the following: 为避免这种情况,请在每次绑定前清除combobox ,如下所示:

Call OpenDB()
cmbSubject.Items.Clear ' extra statement added to clear the item collection
cmd.CommandText = "select * from Subject"
cmd.Connection = conn
dr = cmd.ExecuteReader
While dr.Read()
    cmbSubject.Items.Add(dr("Subject_Name"))
End While
dr.Close()
Call CloseDB()

If you need an alternate method for binding the combobox i will suggest you binding with Dataset following is the example code for this : 如果您需要另一种方法来绑定combobox我建议您使用Dataset绑定,以下是此示例代码:

    Dim  SQL As String= "select Subject_Name,Subject_code from Subject"
    Dim adapter As New OdbcDataAdapter(SQL, conn) '<-- This function will Retrieve Data and Return as Dataset together with table name
    Dim myData As New DataSet
    myData.Fill(lobjDataSet, tblName)
    cmbSubject.DataSource = ds_myData 
    cmbSubject.DataMember = "Subject"
    cmbSubject.DataTextField = "Subject_Name"
    cmbSubject.DataValueField = "Subject_code"
    cmbSubject.DataBind()
    myData .Dispose()
Public Class frmRegistration
    Dim obj As New Entity.Registration
    Dim bus As New Business.Registration



    Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
        BindingSource1.EndEdit()
        bus.Save(obj)
        RefreshGrid()
        MsgBox("Saved.")
    End Sub


    Sub RefreshGrid()
        Dim dt1 As DataTable = bus.Select()
        BindingSource2.DataSource = dt1
        DataGridView1.AllowUserToAddRows = False
        DataGridView1.DataSource = BindingSource2
    End Sub

    Private Sub Registration_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        RefreshGrid()
        NewItem()
    End Sub

    Private Sub BtnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnNew.Click
        NewItem()
    End Sub

    Sub ResetDis()
        BindingSource1.DataSource = obj
    End Sub

    Sub NewItem()
        obj = New Entity.Registration
        ResetDis()
    End Sub


    Private Sub BindingSource2_CurrentChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingSource2.CurrentChanged
        obj = New Entity.Registration(CType(Me.BindingSource2.Current, DataRowView).Row)
        ResetDis()
    End Sub


End Class

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM