【发布时间】:2014-05-12 14:14:14
【问题描述】:
我正在使用 Visual Basic 2010 开发一个用于管网水力计算的应用程序。
此应用程序使用大量迭代和循环,具体取决于用户输入和网络大小。大部分结果必须暂时保存,以供下一步计算使用。
首先,我使用DataGridView 来保存结果,但随着迭代次数的增加,应用程序变得非常慢。
现在我正在尝试创建一个DataTable,然后用一些初始结果填充它(这部分是成功的)。获得的DataTable 有一些列没有像这样填充:
22 24 10
3 16 22 9 15
16 12 24 13
14 21 10 23 12 1
24 18 23 2 1
进行其他计算,得到某个值(X)。
现在我正在尝试遍历特定行的列,以检查计算值 (X) 是否等于这些列中的值之一。
我的问题是:对于特定行,我如何才能只遍历具有值的列(避免包含 NULL 值的列)?
我是 VB.net 的初学者。我希望我的问题很清楚,因为我没有提供任何代码。
提前感谢您的帮助。
这是我使用的初始代码:
Results.DGVInitial.Rows.Clear()
Results.DGVFinal.Rows.Clear()
For m As Integer = 0 To NetworkLayout.DGVNetworkLayout.Rows.Count - 1
Results.DGVInitial.Rows.Add()
Next
Dim I As Integer = NetworkLayout.DGVNetworkLayout.Rows.Count - 1
Dim Sec(I), Ini(I) As Integer
Dim Hyd(I), Dia(I), Len(I) As Single
Dim Qsec(I), Qini(I), Vsec(I) As Single
Dim U(I), Y(I) As Single
Do
I = I - 1
Sec(I) = NetworkLayout.DGVNetworkLayout.Rows(I).Cells(0).Value
Ini(I) = NetworkLayout.DGVNetworkLayout.Rows(I).Cells(1).Value
Hyd(I) = NetworkLayout.DGVNetworkLayout.Rows(I).Cells(6).Value
Dia(I) = NetworkLayout.DGVNetworkLayout.Rows(I).Cells(4).Value
Len(I) = NetworkLayout.DGVNetworkLayout.Rows(I).Cells(3).Value
Dim V As Integer
V = Results.DGVRandomGen.Rows(TotalNum_Runs - 1).Cells(I).Value
Qsec(I) = 0
Dim q As Single = 0
For n As Integer = 0 To Results.DGVInitial.Rows.Count - 1
If Results.DGVInitial.Rows(n).Cells(1).Value = Sec(I) Then
q = Results.DGVInitial.Rows(n).Cells(0).Value
Qsec(I) = Qsec(I) + q
Else
Qsec(I) = Qsec(I)
End If
Next
If V = 1 Then ' if the hydrant is open
Qini(I) = Hyd(I) + Qsec(I)
Else ' if the hydrant is close
Qini(I) = Qsec(I)
End If
Results.DGVInitial.Rows(I).Cells(0).Value = Qini(I)
Results.DGVInitial.Rows(I).Cells(1).Value = Ini(I)
Results.DGVSectionDischarges.Rows(TotalNum_Runs - 1).Cells(I).Value = ini(I).ToString("F2")
现在代替使用
V = Results.DGVRandomGen.Rows(TotalNum_Runs - 1).Cells(I).Value
我想用一个名为“DT_Random”的数据表替换“DGVRandomGen”
就像我说的我是一个初学者,所以我不知道如何编码,但它会是这样的:
对于 DT_Random.Rows (TotalNum_Runs - 1)
For Each col As DataColumn In DT_Random.Columns
If DT_Random.Rows(TotalNum_Runs - 1).Item(col) = I Then
Qini(I) = Hyd(I) + Qsec(I)
Else
Qini(I) = Qsec(I)
End If
Next
但我想避免 Null 值,因为并非所有列都已填充
谢谢
【问题讨论】:
-
列或行,您似乎想检查该行列下的单元格值...请提供更多详细信息和代码。 ..
-
代码有助于极大地阐明问题,并且更容易提供适用的答案。
-
是的,我想检查特定行的每一列下的单元格值@Mr CoDeXeR
-
我添加了一个代码,希望能澄清我想要做什么@Plutonix .....这是我第一次使用 DataTables
标签: vb.net datatable vb.net-2010 datarow datacolumn