2014-04-14 19 views
0

我想通過匹配源字符串的開始和搜索字符串的長度來過濾數字字符串。在DataColumn上使用'SUBSTRING(expression,startIndex,length)'BindingSource

所有過濾的列都是字符串。大多數只是單詞,但有一列的值看起來像這樣001302:Alt#。底層的數據源很糟糕,但我無法改變結構。這些號碼基於左側值進行分組(即,050110050534都與客戶端(05)相關,052123與客戶端(05)發票(2)相關)。我的用戶希望能夠搜索DataGridView中的數據並按組篩選該列(即輸入05並查看以05或052開頭並看到052000-052999的所有內容)

我生成過濾器字符串並使用DataSet作爲DataSource和Table作爲DataMember在BindingSource上設置Filter屬性。我的其他過濾工作,我遇到的唯一問題是數字過濾器。當我設置BindingSource.Filter屬性時,它會拋出ArgumentOutOfRange異常。

類型的未處理的異常 'System.ArgumentOutOfRangeException' 出現在system.data.dll其他信息:SUBSTRING() 參數超出範圍。

我想我可能會針對一個空行或者只有一些數字但是它只有一個字符的情況下觸發。因此,長度參數應該是有效的,但它仍然拋出異常。

bool firstColumn = true; 
foreach (DataColumn column in FilteredColumns.Keys) 
{ 
    if (FilteredColumns[column]) 
    { 
     if (!firstColumn) fieldFilter.Append(") OR ("); else firstColumn = false; 

     int numericFilter; 
     if (int.TryParse(filterWord, out numericFilter)) 
     { 
      fieldFilter.Append(String.Format("SUBSTRING({0}, 0, {2}) = {1}", column.ColumnName, filterWord, filterWord.Length)); 
     } 
     else 
      { 
      fieldFilter.Append(String.Format("{0} like '%{1}%'", column.ColumnName, filterWord)); 
      } 
    } 
} 

我相信我只是想念一些愚蠢的東西。我提前感謝您指出我的錯誤!

回答

2

沒關係。我假設DataColumn表達式SUBSTRING的行爲與String.Substring相同。然而,SUBSTRING表達式是一個基於1的索引,而String.Substring方法從0開始索引。我應該先檢查一下,但是試着跑到磚牆上好幾個小時...

謝謝反正傢伙!