我试图向列表框中添加非常大量的项目以及我需要它是用于将所选项目添加到itextsharp表格报告我使用表格中的过滤器只是为了显示处理的销售人员客户或事件发生的日期(或产品报告问题)我的过滤系统如下我有4个类别,即4个列表框客户名称,客户代码(名为listBox1我还没有改变它)物种名称,以及我的过滤器放在searchBtn_Click事件下的错误类型我的过滤器和项目添加代码如下:
Private Sub searchBtn_Click(sender As Object, e As EventArgs) Handles searchBtn.Click
For Each obj As contactObject In custList
For Each item As speciesObject In speciesList
'loadLists()
If Trim(fromDate.Value) < Trim(obj.eventDate) Then
If Trim(toDate.Value) > Trim(obj.eventDate) Then
If Trim(fromDate.Value) < Trim(item.compDate) Then
If Trim(toDate.Value) > Trim(item.compDate) Then
End If
If Not customerListBox.Items.Contains(obj.customerName) Then
customerListBox.Items.Add(obj.customerName)
End If
If Not ListBox1.Items.Contains(obj.customer) Then
ListBox1.Items.Add(obj.customer)
End If
If Not speciesListBox.Items.Contains(item.name) Then
If ListBox1.Items.Contains(item.customerCode) Then
speciesListBox.Items.Add(Trim(item.name).ToUpper)
End If
End If
If Not errorListBox.Items.Contains(obj.issue + " - " + obj.issueDescription) Then
errorListBox.Items.Add(Trim(obj.issue + " - " + obj.issueDescription).ToUpper)
End If
End If
End If
End If
Next
Next
countErrors()
End Sub
然后我有一个查询,它被设置为从数据库系统获取客户信息
Dim SqlText As String = "SELECT DISTINCT QEE.[EventID] ,QEE.[EventDate] ,QEE.[Employee] ,QEE.[Communication] ,QEE.[OtherCommunication] ,QEE.[Issue] ,QEE.[IssueDescription] ,QEE.[IssueComments] ,QEE.[Resolution] ,QEE.[ResolutionComments] ,QEE.[SalesOrderNumber] ,QEE.[CustomerPO] ,QEE.[SOStatus] ,QEE.[Customer] ,QEE.[CustomerName] ,QEE.[SalesPersonName] ,QEE.[IsResolved] ,QEE.[IssueValue] ,QEE.[DateAndTimeAdded] ,DATEDIFF(day, SOR.ReqShipDate, QEE.[EventDate]) AS Elapsed, SOR.ReqShipDate FROM [QualityTracking].[dbo].[tblQualityEventEntry] QEE INNER JOIN SysproCompanyC.dbo.SorMaster SOR ON QEE.SalesOrderNumber = SOR.SalesOrder COLLATE Latin1_General_CI_AS ORDER BY EventDate ASC, CustomerName ASC, SalesOrderNumber ASC;"
我无法在此处填写所有代码
如果您也可以提供一般性的帮助,我也是vb.net的新手,但是我尝试过的其他信息: * listbox.startUpdate / endUpdate *改变查询 *更改已排序的属性(现在它的设置为false) *问题发生在我选择全选然后点击搜索数据库持有近2Mil项目,我需要能够让它移动一旦我得到它工作停止冻结我将能够提高速度我只是不能完全出问题的地方我知道查询可能更好(如果你有任何建议请随意我正在学习) *但我也看到很多人在列表框中遇到这个问题,因为它有点像列出项目的方式 *我已经尝试过研究它并且人们已经说过使用了其他我不能做的事情,因为列表框已经提交了
答案 0 :(得分:1)
由于要添加的记录太多,您的程序可能没有响应,每次将项添加到ListBox.Items集合时,UI都会刷新。
您可以SuspendLayout将Listbox添加到ResumeLayout,然后将ListBox.Items.AddRange()添加到其中。
Private Sub searchBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
customerListBox.SuspendLayout();
// Place your code to populate the ListBox control here...
customerListBox.ResumeLayout();
End sub
这样可以避免在逐个添加项目时发生大量刷新,并允许应用程序减轻项目的添加,然后重新开始布局,以便刷新控件以向屏幕显示足够的信息。 / p>
或强>
您可以使用List.ToArray()方法和DataGridView。
Private Sub searchBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim custList As List(Of ConstactObject) = loadYourCustomers();
customerListBox.Items.AddRange(custList.ToArray());
Dim speciesList As List(Of SpeciesObject) = loadYourSpecies();
speciesListBox.Items.AddRange(speciesList.ToArray());
End sub
OR ELSE
我建议使用DataSource并将其Form属性设置为对象列表。
因此,为了获得正确的数据,您必须:
DataGridView
DataGridView
重命名为有意义的名称(例如custListDataGridView
,speciesListDataGridview
)Form
BindingSource
重命名为有意义的名称(例如custListBindingSource
,speciesListBindingSource
)DataGridView.DataSource
属性设置为各自的 BindingSource
(例如custListDataGridview.DataSource = custListBindingsource
,speciesListDataGridView.DataSource = speciesListBindingSource
)在支持代码中,即在searchBtn.Click
事件中,您可以设置两个绑定来源 DataSource
属性
Private Sub searchBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim custList As IList(Of ContactObject) = loadYourContactObjects();
custListBindingSource.DataSource = custList;
Dim speciesList As IList(Of SpeciesObject) = loadYourSpeciesObject();
speciesListBindingSource.DataSource = speciesList;
End Sub
您的信息数据应自动列出,无需手动添加每条记录。