在我的vb.net项目中,我有这个表单,用于在订单上添加额外费用(例如,交付成本)。
在此示例中,运费编号是相同的,因为运费是针对完整订单的,而不是每条线的运费。但是,可以选择为每个单独的订单行添加不同的运费值,因此数字将不同(例如,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
答案 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')