我想通過匹配源字符串的開始和搜索字符串的長度來過濾數字字符串。在DataColumn上使用'SUBSTRING(expression,startIndex,length)'BindingSource
所有過濾的列都是字符串。大多數只是單詞,但有一列的值看起來像這樣001302:Alt#
。底層的數據源很糟糕,但我無法改變結構。這些號碼基於左側值進行分組(即,050110
和050534
都與客戶端(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));
}
}
}
我相信我只是想念一些愚蠢的東西。我提前感謝您指出我的錯誤!