以下代码中的数据表填充了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)
禁食的方式是使用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快几毫秒.
小智 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)