【问题标题】:For loop skipping rows in DataSetFor循环跳过DataSet中的行
【发布时间】:2010-07-26 17:25:35
【问题描述】:

我的应用程序使用 For...Next 循环将电子表格读入 DataSet,然后根据搜索条件(搜索词和日期范围)的结果显示其中的信息。

我的数据有问题,如果我运行搜索应该返回电子表格中的前 400 行,我只会得到大约 200 个结果。我知道搜索应该返回 400 行,因为我在运行搜索之前在电子表格中检查了它。

我认为我的问题可能是由我的日期比较引起的。我认为问题可能在于我正在比较 String 值,所以如果有人可以向我展示一种更有效的比较日期的方法,那就太好了。

这是我的代码:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If ListBox1.Items.Count <> 0 Then : ListBox1.Items.Clear() : End If
    Dim j As Integer = 0
    If TextBox1.Text.Length = 4 Then
        For i As Integer = 0 To CallData.Tables(0).Rows.Count - 1
            'MsgBox(CallData.Tables(0).Rows(i)(2) & " - FROM( " & DateTimePicker1.ToString & " ) TO( " & DateTimePicker2.ToString & " )")
            If CallData.Tables(0).Rows(i)(3).ToString = TextBox1.Text _
            And CallData.Tables(0).Rows(i)(2).ToString > DateTimePicker1.Value.ToString _
            And CallData.Tables(0).Rows(i)(2).ToString < DateTimePicker2.Value.ToString Then
                ListBox1.BeginUpdate()
                ListBox1.Items.Add(CallData.Tables(0).Rows(i)(2).ToString)
                ListBox1.EndUpdate()
                j = j + 1
            End If
        Next

        Label1.Text = j & " records found."
    End If
End Sub

【问题讨论】:

    标签: vb.net datetime date dataset


    【解决方案1】:

    当您将字符串相互比较时,它与日期没有任何关系,它会按字母顺序进行比较。 您可以将对象从行转换为日期,然后进行比较。

    变化:

    CallData.Tables(0).Rows(i)(2).ToString > DateTimePicker1.Value.ToString
    CallData.Tables(0).Rows(i)(2).ToString < DateTimePicker2.Value.ToString 
    

    到:

    CType(CallData.Tables(0).Rows(i)(2), DateTime) > DateTimePicker1.Value
    CType(CallData.Tables(0).Rows(i)(2), DateTime) < DateTimePicker2.Value
    

    顺便说一句,我不是 vb 专家,但我想这段代码应该可以解决问题 :-)

    【讨论】:

    • 太棒了!!!应用此更改后,我的数字完全匹配。非常感谢:)
    猜你喜欢
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多