원본 문자열의 시작과 검색 문자열의 길이를 일치시켜 숫자 문자열을 필터링하려고합니다.DataColumn에서 BindingSource와 함께 'SUBSTRING (expression, startIndex, length)'사용
필터링 된 모든 열은 문자열입니다. 대부분은 단어 일 뿐이며, 001302:Alt#
과 같은 값을 가진 열이 하나 있습니다. 기본 데이터 소스는 엉망이지만 구조를 변경할 수는 없습니다. 숫자는 왼쪽 값에 따라 그룹화됩니다. 즉 050110
및 050534
은 모두 클라이언트 (05)와 관련이 있으며 052123
은 클라이언트 (05) 송장 (2)과 관련됩니다. 내 사용자는 DataGridView의 데이터를 검색하고 그룹별로 해당 열을 필터링 할 수 있기를 원합니다. 05를 입력하고 05 또는 052로 시작하여 052000-052999를 참조하십시오.
필터 문자열을 생성 중입니다. BindingSource의 DataSet을 DataSource로, Table을 DataMember로 사용하여 BindingSource의 Filter 속성을 설정합니다. 나머지 필터링 작업은 숫자 필터를 사용하는 것만 큼 문제가됩니다. BindingSource.Filter
속성을 설정하면 ArgumentOutOfRange
예외가 발생합니다.
'System.ArgumentOutOfRangeException이' 는 추가 정보가 system.data.dll 발생 유형의 처리되지 않은 예외 : 문자열을() 인수 범위 밖이다.
빈 행 또는 몇 자리 숫자가있는 행에 대해이 문제를 발생시킬 수 있다고 생각했지만 단 한 문자로만 실행됩니다. 따라서 length 인수는 유효해야하지만 여전히 예외가 발생합니다.
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));
}
}
}
나는 바보 같은 것을 놓친 것 같습니다. 제 실수를 지적 해 주셔서 미리 감사드립니다!