Vb.net 仅显示datatable中的某些行
所以我有一个如下的数据集Vb.net 仅显示datatable中的某些行,vb.net,Vb.net,所以我有一个如下的数据集 Col1 Col2 Col3 Col4 Apple 1 10 Orange Apple 2 20 Orange Apple 3 30 Orange Apple 1 10 Pear Apple 2 20 Pear Apple 3 30 Pear Orange 1 10 grapes Orange 2 20 grape
Col1 Col2 Col3 Col4
Apple 1 10 Orange
Apple 2 20 Orange
Apple 3 30 Orange
Apple 1 10 Pear
Apple 2 20 Pear
Apple 3 30 Pear
Orange 1 10 grapes
Orange 2 20 grapes
ORange 1 10 kiwi
Berries 1 10 apple
Berries 1 20 Kiwi
我只需要像这样的东西
Col1 Col2 Col3 Col4
Apple 1 10 Orange
Apple 2 20 Orange
Apple 3 30 Orange
ORange 1 10 Grapes
Orange 2 20 Grapes
Berries 1 10 Apple
所以基本上是col1和col4,如果在我读取行时col4变为col1,我不应该显示它
有人能帮帮我吗
在第一人的建议之后
For i As Integer = 0 To dtResults.Rows.Count - 1
Dim firstItem As String = dtResults.Rows(i)("col1").ToString()
Dim firstToB As String = dtResults.Rows(i)("col4").ToString()
dtResults.DefaultView.RowFilter = "col4= '" + firstToB + "'"
Dim tempTable As DataTable = dtResults.DefaultView.ToTable()
Dim Total As Integer = 0
For Each dr As DataRow In tempTable.Rows
'Dim firstItem As String = dr("col1").ToString()
'If (dr("col1") = firstItem) AndAlso (firstToBin = dr("col4")) Then
If item Is Nothing OrElse item <> dr("col1") Then
If Not item Is Nothing Then
dgv.Rows.Add()
End If
itemnum = dr("col1")
Else
itemnum = ""
desc = ""
size = ""
Total += dr("col3")
End If
item = dr("col1")
dgv.Rows.Add(dr('',dr('',dr('')...)
count += 1
'End If
Next
Next
对于i As Integer=0到dtResults.Rows.Count-1
Dim firstItem As String=dtResults.Rows(i)(“col1”).ToString()
Dim firstToB As String=dtResults.Rows(i)(“col4”).ToString()
dtResults.DefaultView.RowFilter=“col4=”+firstToB+“”
作为DataTable=dtResults.DefaultView.ToTable()的可调参数
将总计调整为整数=0
对于Tentable.Rows中的每个dr As数据行
'Dim firstItem As String=dr(“col1”).ToString()
'如果(dr(“col1”)=firstItem)和(firstToBin=dr(“col4”)),则
如果项目为Nothing或LSE项目dr(“col1”),则
如果不是,则项目为空
dgv.Rows.Add()
如果结束
itemnum=dr(“col1”)
其他的
itemnum=“”
desc=“”
size=“”
总计+=dr(“col3”)
如果结束
项目=dr(“col1”)
dgv.行.添加(dr(“”,dr(“”,dr(“”)…)
计数+=1
"完"
下一个
下一个
您需要对数据表的行进行筛选。您可以使用DefaultView进行筛选
例如:
Dim ds1 As New DataSet1 'Create an instance of your DataSet1
ds1.yourDataTable.DefaultView.RowFilter = "Col4='Orange'"
如果数据集的数据表是在Visual Studio的设计器中创建的,则可以为每列指定数据类型(字符串、整数、布尔值)。默认情况下,数据类型设置为字符串。
你可以用两种方法来做
For i As Integer = 0 To dtResults.Rows.Count - 1
Dim firstItem As String = dtResults.Rows(i)("col1").ToString()
If acceptitem Is Nothing OrElse acceptitem <> firstItem Then
Dim firstToB As String = dtResults.Rows(i)("col4").ToString()
dtResults.DefaultView.RowFilter = "col4 = '" + firstToB + "' AND col1 = '" + firstItem + "'"
Dim tempTable As DataTable = dtResults.DefaultView.ToTable()
Dim Total As Integer = 0 ' dtResults.Rows(i)("col3").ToString()
For Each dr As DataRow In tempTable.Rows
acceptitem = dr("col1").ToString()
If item Is Nothing OrElse item <> dr("col1") Then
If Not item Is Nothing Then
dgv.Rows.Add()
End If
itemnum = dr("col1")
Total += Convert.ToInt16(dr("col3").ToString())
Else
itemnum = ""
Total += Convert.ToInt16(dr("col3").ToString())
End If
item = dr("col1")
dgv.Rows.Add(dr('',dr('',dr('').......)
count += 1
Next
End If
Next
对于i As Integer=0到dtResults.Rows.Count-1
Dim firstItem As String=dtResults.Rows(i)(“col1”).ToString()
如果acceptitem为Nothing或Else acceptitem firstItem,则
Dim firstToB As String=dtResults.Rows(i)(“col4”).ToString()
dtResults.DefaultView.RowFilter=“col4=”+firstToB+“”和col1=”+firstItem+“”
作为DataTable=dtResults.DefaultView.ToTable()的可调参数
Dim Total As Integer=0'dtResults.Rows(i)(“col3”).ToString()
对于Tentable.Rows中的每个dr As数据行
acceptitem=dr(“col1”).ToString()
如果项目为Nothing或LSE项目dr(“col1”),则
如果不是,则项目为空
dgv.Rows.Add()
如果结束
itemnum=dr(“col1”)
Total+=Convert.ToInt16(dr(“col3”).ToString())
其他的
itemnum=“”
Total+=Convert.ToInt16(dr(“col3”).ToString())
如果结束
项目=dr(“col1”)
dgv.Rows.Add(dr(“”,dr(“”,dr(“”)…)
计数+=1
下一个
如果结束
下一个
非常感谢所有其他建议…最好的方法是在源代码处修复它。数据来自何处?它来自传递到存储过程的参数,导致您进行筛选?将文本键入文本框的用户?请尝试解释用户为了实现您的目的将经历的场景r result…然后是更新存储过程以获得所需结果的最佳选择。您能看看我对您的建议做了什么吗?这没有太大帮助me@nysu我可能不明白您想做什么,但对我来说,这两行代码将取代您的循环…dtResults.DefaultView.RowFilter=“col4='Orange'”……dgv.DataSource=dtResults.defaultview我明白你的意思。但是我已经按照我的要求完成了。我会尽快发布答案。