Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 仅显示datatable中的某些行_Vb.net - Fatal编程技术网

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我明白你的意思。但是我已经按照我的要求完成了。我会尽快发布答案。