2016-06-06 3 views
1

콤보 상자에서 선택한 열 이름으로 제한되는 텍스트 상자에서 문자열을 검색하여 datagridview에서 수천 개의 항목 표를 필터링하려고합니다. 검색이 실시간으로 일어나기를 원합니다. textbox_TextChanged 클래스를 통해 업데이트되었습니다. 나는 연구를 통해 필자가 필요로하는 코드를 작성했다. 나는 텍스트 상자에 입력 할 때마다 그러나의 TextChanged 클래스를 자극하는 오류가 발생합니다 :WinForm DataGridView C#의 문자열로 정렬 #

"던져 예외 :가 system.data.dll에서 'System.Data.SyntaxErrorException'"는 DataGridView에가하는

주 텍스트 상자에 입력하기 전에 모든 데이터 항목을 표시하고 콤보 상자 옵션은 datagridview의 열과 똑같습니다.

내 코드 :

private void searchTerms_TextChanged(object sender, EventArgs e) 
    { 
     BindingSource bs = new BindingSource(); 
     bs.DataSource = shareholderDataGrid.DataSource; 
     bs.Filter = string.Format(searchItem + " like '%{0}%'", searchTerms.Text.Trim().Replace("'", "''")); 
     shareholderDataGrid.DataSource = bs; 
    } 

shareholderDataGrid는 searchItem이 콤보 상자에서 선택한 캐릭터 라인을 적용, DataGrid를, 그리고의 SearchTerms는 사용자 유형으로 텍스트 상자를 의미합니다.

더 많은 도움이 필요하시면 언제든지 문의하십시오.

+0

봅니다이 볼 수 있습니다 :> http://stackoverflow.com/questions/5843537/filtering-datagridview-without-changing-datasource – Fred

+0

@cjpartin, 및 String.format'의 값 (searchItem은 무엇을 .. .)'예외가 발생했을 때? – ASh

+0

콤보 상자에서 선택한 옵션에 관계없이 발생합니다. 옵션은 'ID', '성', '성'입니다. 그것들은 searchItem의 값입니다. – cjpartin

답변

0

나는이 문제가 .Replace("'", "''") 전화 일 수 있다고 생각합니다. 당신은없이 시도 했습니까?

+0

나는 그걸 시험해 보았다. 운이 없다. 컬럼 이름이 ID, 성 및 이름임을 언급하는 데 도움이 될 수 있습니다. 이들은 또한 콤보 박스의 선택 이름입니다. – cjpartin

+0

그리고 예외가 안정적으로 나타 납니까? 분명한 질문은 열 이름의 공백이 구문 오류를 일으킬 수 있는지 여부이지만 ID를 선택하면 발생하지 않아야합니다. –

+0

예. 텍스트 상자에 단일 문자를 입력하면 항상 throw됩니다. 상관없이 열 선택. – cjpartin

0

나는 왜 그것이 예외를 던지고 있는지 알아 냈습니다! 데이터 소스의 열 이름에 공백이 있고 콤보 상자에서 동일한 작업을 수행하면 작업이 엉망이되었습니다. 공백이 없도록 액세스 데이터베이스 테이블을 편집하고 콤보 상자의 선택 항목에 동일한 변경 사항을 적용하면 수정되었습니다. 그것은 완벽하게 작동합니다. 관련없는 오류 때문에 완전히 새로운 비주얼 스튜디오 프로젝트를 만들어야했기 때문에 여기에 사용한 마지막 코드가 있습니다.

private void searchBox_TextChanged(object sender, EventArgs e) 
    { 
     BindingSource bs = new BindingSource(); 
     bs.DataSource = dataGridView1.DataSource; 
     bs.Filter = string.Format(columnChoice.Text + " LIKE '*{0}*'", searchBox.Text.Trim().Replace("'","''")); 
     dataGridView1.DataSource = bs; 
    }