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

Dea*_*tin 2 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()
Run Code Online (Sandbox Code Playgroud)

slo*_*oth 7

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

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

我做了一个简单的检查和使用AddRange比使用快约3倍Add.

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

  • @varocarbas Linq非常好,但VB.Net中匿名方法的语法太丑了:-) (2认同)

小智 5

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"
Run Code Online (Sandbox Code Playgroud)