检查新记录(异常情况)

时间:2016-01-08 08:30:56

标签: vb.net datatable compare

我需要检查是否有新记录添加到表中。 我的问题是:

  1. 我无法阅读整个表格,只能阅读"报告"包含最后25 记录(我的意思是最后添加的25行);
  2. 每个新行都添加在 报告的顶部。
  3. 我的想法是从我的表中取出最后的2/3行并在报告中查找它们。 因此,如果我在顶部找到它们,则没有添加任何内容,但是,如果我从第3行到第5行找到它们,则意味着添加了2个新行。

    我想强调一下,有一个日期字段。所以我可以使用它来防止更新错误。

    然后我的问题是:

    1. 有没有更好的逻辑来做我想要的事情?
    2. 使用这种逻辑我对如何编码有一些疑问。
    3. 我需要选择:

      • 在数据字段上使用for-next循环,在表格中查找最后一个数据,然后比较剩余的字段;
      • 将报告和我的表格同时放入DataTables并使用Equals比较每一行(但我不确定相同内容上的代码将始终返回' True');
      • 使用datatable.Select在报告中找到我最后插入的行(将其放入数据表后),但我不知道如何检索找到的行'位置。

      任何提示都会受到赞赏。

1 个答案:

答案 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

请注意,我不应包含您应为生产代码添加的任何异常处理/验证。