选择不同的DataTable行

时间:2016-09-02 10:37:45

标签: sql vb.net datatable iteration

在我的vb.net项目中,我有这个表单,用于在订单上添加额外费用(例如,交付成本)。

enter image description here

在此示例中,运费编号是相同的,因为运费是针对完整订单的,而不是每条线的运费。但是,可以选择为每个单独的订单行添加不同的运费值,因此数字将不同(例如,7和8),每行的值也是如此。

按下添加按钮后,行或订单(取决于如何添加运费)将添加到标记为'运费的网格中。但是,数据仅存储在DataTable中,然后传递到Order Save函数,从中将行复制到数据库中,然后从DataTable中删除。

现在,请注意textbox标记为'总运费' ...这当前正在迭代DataTable的每一行并将所有总计加在一起。如果货运都是不同的,这是很好的,但是,如果按顺序添加,并且有2行,如上所述,该值应为15,而不是30,当前显示。

那么,有没有办法让我只能迭代具有不同Freight#值的行,这样它就不会两次添加相同的行值?我不认为SQL SELECT DISTINCT可以在这里工作,因为它只是DataTable

这很难解释,但希望这有点道理,但如果它没有,那就很抱歉!

修改

计算总数的代码(freightTable是我的DataTable

If freightTable.Rows.Count = 0 Then
            txtTotal.Text = "0.00"
        Else
            Dim tot As Double = 0
            Dim i As Integer = 0
            For i = 0 To freightTable.Rows.Count - 1
                tot = tot + Convert.ToDouble(ugFreight.Rows(i).Cells("Freight_Val").Value)
            Next i
            txtTotal.Text = tot
        End If

3 个答案:

答案 0 :(得分:1)

记下您在列表中看到的运费值。

        Dim freightDone As New List(Of Integer)
        For i = 0 To freightTable.Rows.Count - 1
            Dim currentFreigth as Integer = Convert.ToInteger( ugFreight.Rows(i).Cells("Freight_#").Value )
            If Not freightDone.Contains(currentFreigth) Then
                tot = tot + Convert.ToDouble(ugFreight.Rows(i).Cells("Freight_Val").Value)
                freightDone.Add(currentFreigth)
            End If
        Next i

(您可能需要更改currentFreigth的定义以适合您的数据表列名称,或者稍微生锈的VB。)

答案 1 :(得分:1)

您可以使用linq以这种方式从列中选择不同的值:

Dim Values = table.AsEnumerable().Select(Function(x) x.Field(Of int)("SomeColumn")) _
                  .Distinct().ToList()

答案 2 :(得分:0)

在查询的where子句中添加条件:

where freight IN (select distinct freight from 'table_name')