2016-10-08 156 views
1

我試圖過濾一個數據視圖,其中有一些是數值的多列。當輸入一個字符串時,一切都很完美,但是一旦輸入一個數字值(如檢查信使號碼),它就會過濾爲空。如何過濾DataView RowFilter中的整數?

如何過濾器前,我的數據顯示: enter image description here

如何過濾後,我的數據顯示:作爲跟隨 enter image description here

我的代碼:

private void tbxSearchCourier_KeyUp(object sender, KeyEventArgs e) 
    { 
     string outputInfo = ""; 
     string[] keyWords = tbxSearchCourier.Text.Split(' '); 

     foreach (string word in keyWords) 
     { 
      if (outputInfo.Length == 0) 
      { 
       outputInfo = "('Courier #' LIKE '%" + word + "%' OR Name LIKE '%" + word + "%' OR Branch LIKE '%" + word + "%' OR 'Contact Number' LIKE '%" + word 
        + "%' OR 'Email Address' LIKE '%" + word + "%')"; 
      } 
      else 
      { 
       outputInfo += " AND ('Courier #' LIKE '%" + word + "%' OR Name LIKE '%" + word + "%' OR Branch LIKE '%" + word + "%' OR 'Contact Number' LIKE '%" + word 
        + "%' OR 'Email Address' LIKE '%" + word + "%')"; 
      } 
     } 
     CourierDV.RowFilter = outputInfo; 
    } 

我尋找一個解決方案在網絡上,但找不到任何有效的東西。爲什麼會發生這種情況,我該如何解決?

+1

您已將列名稱放在''''之間,使其成爲字符串文字。如果它是一個複雜的名稱,請在列名稱周圍使用'[]'。另外爲了將一個整數列與LIKE運算符進行比較,您應該先將其轉換爲字符串。 –

+0

爲了使過濾器更具可讀性,請使用String.Format混合過濾器字符串和輸入值。 –

+0

謝謝@RezaAghaei這是該死的'[]',我忘記使用,而不是''''。 – sgtBlueBird

回答

4

考慮以下注意事項:

  • 你已經把''這使得它作爲一個字符串的列名。

  • 如果列名是一個複雜的名稱,則使用[]

  • 要與LIKE運營商比較的integer列,你應該首先將其轉換爲string因爲LIKEstring操作。

  • 還要確保您的列名是Courier #而且它不是標題/標題文本。

dataView.RowFilter = "Convert([Some Column], System.String) LIKE '12%'"; 

更多信息

要了解更多關於過濾器支持的語法,看看DataColumn.Expression

+0

感謝您的回覆。不幸的是,它不想工作。任何其他想法爲什麼? – sgtBlueBird

+0

當然,它會工作。創建一個乾淨的測試並查看結果。這是我做的測試:'var dt = new DataTable(); dt.Columns.Add(「A」,typeof(int)); dt.Rows.Add(123); dt.Rows.Add(111); this.dataGridView1.DataSource = dt; dt.DefaultView.RowFilter =「Convert(A,System.String)LIKE '12%'」;' –

相關問題