如何更快地加载vb.net Combobox

3

我是VB.net的新手,我使用以下代码从MySQL数据库加载Combobox。虽然可以正常工作,但速度较慢。

是否有一种方法可以在一个查询中执行所有操作并加载所有Combobox或以其他方式更快地执行此任务?

    AbrirDB()
    comandomysql.CommandText = "select distinct TblMarcas.marca from TblMarcas order by marca"
    Try
        Lector = comandomysql.ExecuteReader
        Lector.Read()
        .cbom.Properties.Items.Clear()
        If Lector.HasRows Then
            .cbom.Properties.Items.Add(Lector.Item("marca"))
            Do While Lector.Read
                .cbom.Properties.Items.Add(Lector.Item("marca"))
            Loop
        Else
        End If
    Catch ex As Exception
        DevExpress.XtraEditors.XtraMessageBox.Show(Err.Number & Err.Description)
        If conexion.State = ConnectionState.Open Then conexion.Close()
    End Try
    CerrarDb()




    'CARGO  Categorias a treelist
    AbrirDB()
    comandomysql.CommandText = "select distinct TblCategorias.categoria from TblCategorias order by categoria ASC"
    Try
        Lector = comandomysql.ExecuteReader
        Lector.Read()
        .cboc.Properties.Items.Clear()
        If Lector.HasRows Then
            .cboc.Properties.Items.Add(Lector.Item("categoria"))
            Do While Lector.Read
                .cbocategoria.Properties.Items.Add(Lector.Item("categoria"))
            Loop
        Else

        End If

    Catch ex As Exception
        DevExpress.XtraEditors.XtraMessageBox.Show(Err.Number & Err.Description)
        If conexion.State = ConnectionState.Open Then conexion.Close()
    End Try
    CerrarDb()


    'CARGO Subcategorias
    AbrirDB()
    comandomysql.CommandText = "select distinct TblSubcategorias.subcategoria from TblSubcategorias order by subcategoria ASC"
    Try
        Lector = comandomysql.ExecuteReader
        Lector.Read()
        .cbos.Properties.Items.Clear()
        If Lector.HasRows Then
            .cbos.Properties.Items.Add(Lector.Item("subcategoria"))
            Do While Lector.Read
                .cbos.Properties.Items.Add(Lector.Item("subcategoria"))
            Loop

        End If

    Catch ex As Exception
        DevExpress.XtraEditors.XtraMessageBox.Show(Err.Number & Err.Description)
        If conexion.State = ConnectionState.Open Then conexion.Close()
    End Try
    CerrarDb()

非常感谢您的帮助。


2
填充一个 DataTable 并将 CBO.DataSource 绑定到它。示例:http://stackoverflow.com/a/36142887/1070452 - Ňɏssa Pøngjǣrdenlarp
2个回答

0
尝试一下:
myCombo.SuspendLayout()
dim Table as new DataTable()
table.Load(MyDataReader)
myCombo.DataSource=table
myCombo.DisplayMember="column1"
myCombo.ResumeLayout()

我尝试了一下,但它比使用 While 和 Loop 加载要慢。 - Peter013

0
combo.Items.Clear()
Dim ds As DataTable = yourtable
Dim arr As Object() = (From dc In ds.AsEnumerable Select dc(0)).ToArray
combo.Items.AddRange(arr)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接