从VB.Net中的数据表填充组合框的最快方法

时间:2013-09-04 08:42:25

标签: vb.net

以下代码中的数据表填充了7500多条记录。这一切都从服务器快速加载。问题是循环数据行需要一段时间才能将它们添加到组合框中。是否有其他方法可以设置组合框的数据源或加快此过程的速度?

        Dim dtColours As New DataTable
        Dim daColours As New SqlDataAdapter
        Dim i As Integer

        ConnectToSQL()
        daColours = New SqlDataAdapter("SELECT DISTINCT Rtrim(UPPER(Colour)) As Colour FROM invStockColour WHERE InUse = 1 ORDER BY Colour", dbSQL)
        daColours.Fill(dtColours)

        For i = 0 To dtColours.Rows.Count - 1
            cboColours.Items.Add(dtColours.Rows(i).Item(0).ToString)
        Next

        dbSQL.Close()

4 个答案:

答案 0 :(得分:7)

禁食方式是使用AddRange方法而不是使用Add,例如:

Dim items = dtColours.AsEnumerable().Select(Function(d) DirectCast(d(0).ToString(), Object)).ToArray()
cboColours.Items.AddRange(items)

我做了一个简单的检查,使用AddRange比使用Add快3倍。

当然,分配一个数组并用For循环填充它可能比使用Linq快几毫秒。

答案 1 :(得分:3)

您还可以将ComboBox DataSource属性绑定到DataTable。这具有绑定其他列数据的附加优势(例如您可能不希望用户看到的键值)。

您应该能够从SQLAdapter返回一个DataTable对象。

cboColours.DataSource = dtColours
cboColours.DisplayMember = dtColours.Columns("Colour").ToString
cboColours.ValueMember = dtColours.Columns("Colour_id").ToString

答案 2 :(得分:2)

Dim daColours As New SqlDataAdapter("SELECT DISTINCT Rtrim(UPPER(Colour)) As Colour FROM invStockColour WHERE InUse = 1 ORDER BY Colour", dbSQL)

Dim dtColours As New DataTable
daColours.Fill(dtColours)

cboColours.DataSource=dtColours  
cboColours.DisplayMember="Colour"

答案 3 :(得分:-1)

试试这个:

cboColours.DataSource = dtColours 'For Windows Forms

cboColours.ItemsSource = dtColours 'For WPF