2010-07-26 67 views
0

我的應用程序使用For ... Next循環將電子表格讀入DataSet,然後根據搜索條件(搜索項和日期範圍)的結果顯示信息。用於循環跳過DataSet中的行

我遇到了一個數據問題,如果我運行的搜索應該返回電子表格中的前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 

回答

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的專家,但我想這個代碼應該做的伎倆:-)

+0

絕對真棒!應用此更改後,我的號碼完美匹配。非常感謝 :) – 2010-07-26 09:29:54