我需要检查是否有新记录添加到表中。 我的问题是:
我的想法是从我的表中取出最后的2/3行并在报告中查找它们。 因此,如果我在顶部找到它们,则没有添加任何内容,但是,如果我从第3行到第5行找到它们,则意味着添加了2个新行。
我想强调一下,有一个日期字段。所以我可以使用它来防止更新错误。
然后我的问题是:
我需要选择:
for-next
循环,在表格中查找最后一个数据,然后比较剩余的字段; Equals
比较每一行(但我不确定相同内容上的代码将始终返回' True'); datatable.Select
在报告中找到我最后插入的行(将其放入数据表后),但我不知道如何检索找到的行'位置。任何提示都会受到赞赏。
答案 0 :(得分:1)
使用数据表存储报告项目:
'Initial DataTable
Dim dt As New DataTable("MyTable")
dt.Columns.Add("MyValue", GetType(Double))
dt.Columns.Add("MyDate", GetType(DateTime))
模拟初始报告状态:
'Initital data of your report
Dim input = <table>
<tr>
<td>11</td>
<td>2016-01-01</td>
</tr>
<tr>
<td>21</td>
<td>2016-01-02</td>
</tr>
</table>
For Each x In input...<tr>
dt.Rows.Add(Double.Parse(x.<td>(0).Value), DateTime.Parse(x.<td>(1).Value))
Next
'......
模拟一个新添加的报告行。第二行保持不变:
'One new record added to report
Dim input2 = <table>
<tr>
<td>31</td>
<td>2016-02-15</td>
</tr>
<tr>
<td>11</td>
<td>2016-01-01</td>
</tr>
</table>
使用重要只选择一次,而不是循环:
'Order table by MyValue,MyDate to be able to find rows
Dim dv = New DataView(dt, "", "MyValue,MyDate", DataViewRowState.CurrentRows)
For Each x In input2...<tr>
Dim myVal As Double = Double.Parse(x.<td>(0).Value)
Dim myDate As DateTime = DateTime.Parse(x.<td>(1).Value)
'Find is faster than Select
If dv.Find({myVal, myDate}) >= 0 Then
'Existing record, 2nd row
Else
'new record, 1st row
End If
Next
请注意,我不应包含您应为生产代码添加的任何异常处理/验证。