我有一个包含大约21000行的datagridview,它包含以下列" Ref"," Bestandsart"另外20列,每列包含特定周的库存值,每周将自动添加一个新列。
问题在于" Ref"重复,但不必要具有相同的股票价值,所以我想做的是抛出每一行(j),如果我找到" Ref"在行(j + 1到dg.rowcount-1)中,我获取该行的股票价值并将其添加到行(j)的股票价值并删除重复的"参考"。
这是代码:
Dim a = datagridview1.RowCount
Dim s(t2 - t1)
do until index >=a
If Not datagridview1.Rows(index).Cells("ref").Value.Equals(0) Then
For i = 0 To t2 - t1
s(i) = datagridview1.Rows(index).Cells("KW" + Convert.ToString(t1 + i)).Value
Next
For t = index + 1 To datagridview1.RowCount - 1
If datagridview1.Rows(index).Cells("Ref").Value.Equals(datagridview1.Rows(t).Cells("Ref").Value) And datagridview1.Rows(index).Cells("Bestandsart").Value.Equals(datagridview1.Rows(t).Cells("Bestandsart").Value) Then
For i = 0 To t2 - t1
s(i) = s(i) + datagridview1.Rows(t).Cells("KW" + Convert.ToString(t1 + i)).Value
Next
End If
Next
For i = 0 To t2 - t1
datagridview1.Rows(index).Cells("KW" + Convert.ToString(t1 + i)).Value = s(i)
Next
For t = index + 1 To datagridview1.RowCount - 1
If datagridview1.Rows(index).Cells("ref").Value.Equals(datagridview1.Rows(t).Cells("Ref").Value) And datagridview1.Rows(index).Cells("Bestandsart").Value.Equals(datagridview1.Rows(t).Cells("Bestandsart").Value) Then
datagridview1.Rows(t).Cells("ref").Value = 0
datagridview1.Rows(t).Cells("Bestandsart").Value = 0
End If
Next
BackgroundWorker1.ReportProgress((index + 1) * 100 / a)
index = index + 1
Else
BackgroundWorker1.ReportProgress((index + 1) * 100 / a)
index = index + 1
End If
loop
t1是第1周,t2是最后一周。
问题是,一旦达到第10000行左右,我就会出现内存不足的问题。
有关如何解决此问题的任何想法。
提前谢谢。
答案 0 :(得分:0)
我不确定您提供的信息是否足够。您使用的是什么版本的.NET?这是一个Webform应用程序还是Winform。
也是发生确切异常的地方。任何内部例外?
好像你正在处理大量的行。在过去的两年里,我一直在将代码从DataGridView转移到GridView。 我的第一个建议是,如果可以的话,使用GridView。我的经验是它更快,更少的错误,绝对少编码。希望你没有被判处处理我正在处理的.Net 1.1 DataGridview。
同时尝试启用专为具有大量数据的案例设计的DataGirdView VirtualMode
。
dataGridView1.VirtualMode = true;
https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.virtualmode.aspx