Vb.net 用于循环跳过数据集中的行

Vb.net 用于循环跳过数据集中的行,vb.net,datetime,date,dataset,Vb.net,Datetime,Date,Dataset,我的应用程序使用For…Next循环将电子表格读入数据集中,然后根据搜索条件(搜索词和日期范围)的结果显示其中的信息 我的数据有问题,如果我运行一个搜索,应该返回电子表格中的前400行,我只得到大约200个结果。我知道搜索应该返回400行,因为我在运行搜索之前在电子表格中检查了它 我想我的问题可能是因为我的日期比较。我想问题可能是我在比较字符串值,所以如果有人能给我展示一种更有效的比较日期的方法,那就太好了 这是我的密码: Private Sub Button1_Click(ByVal send

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

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

我想我的问题可能是因为我的日期比较。我想问题可能是我在比较字符串值,所以如果有人能给我展示一种更有效的比较日期的方法,那就太好了

这是我的密码:

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
Private子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
如果ListBox1.Items.Count为0,则:ListBox1.Items.Clear():如果结束
尺寸j为整数=0
如果TextBox1.Text.Length=4,则
对于i As Integer=0,调用data.Tables(0).Rows.Count-1
'MsgBox(CallData.Tables(0).Rows(i)(2)和“-从(“&DateTimePicker1.ToString&”)到(&DateTimePicker2.ToString&”)
如果调用数据.Tables(0).Rows(i)(3).ToString=TextBox1.Text_
和CallData.Tables(0).Rows(i)(2).ToString>DateTimePicker1.Value.ToString_
和CallData.Tables(0).Rows(i)(2).ToString
当您将字符串相互比较时,它与日期无关,而是按字母顺序进行比较。 您可以将对象从行强制转换为日期,然后进行比较

更改:

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

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

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

绝对棒!!!应用此更改后,我的数字完全匹配。非常感谢:)
CType(CallData.Tables(0).Rows(i)(2), DateTime) > DateTimePicker1.Value
CType(CallData.Tables(0).Rows(i)(2), DateTime) < DateTimePicker2.Value