2013-12-11 4 views
0

다음 코드는 사용자가 텍스트 상자에 숫자 만 입력하도록 제한합니다.키 누르기로 DataGridview의 행 필터링

어떻게 다음 DriverNo 열에서 무엇에 driverNo 텍스트 상자에 기록 된 것을 일치시켜 내 데이터 그리드 (dataGridView1)의 행을 필터링하는 데에 입력하는 숫자 값을 사용해야합니까?

이 지금까지 내 코드입니다 :

private void driverNo_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar)) 
    { 
     e.Handled = true; 
    } 
} 
+0

내가 이해했는지 확인하기 위해 행에 누른 숫자 키가 포함되어 있으면 표시된 행을 필터링하고 싶습니까? – KSdev

+0

그래,하지만 DriverNo 열에서만 – theshizy

+0

'SelectedColumns'' Text.Contains''가'driverNo' 키가 눌러 졌는지 확인할 수 있습니다. 그리고 그 물건에 행동하십시오. – KSdev

답변

1

당신은 당신의 텍스트 상자에 같은 번호를 가진 모든 행을 숨기려면이 코드를 사용할 수 있습니다 (의이 textBox1를 부르 자). 당신의 DataGridView는 DataSet에 경계 경우 먼저 데이터 바인딩을 일시 중단해야한다고

foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
    if (row.Cells["driverNo"].Value != null 
     && row.Cells["driverNo"].Value.ToString() == textBox1.Text) 
    { 
     row.Visible = false; 
    } 
} 

참고.

편집 :

당신은 (즉시) 사용자 입력, 당신은 KeyUp 이벤트에이 코드를 첨부 할 수 있습니다 동안 필터링이 발생 할 경우 :이 코드를 최적화 할 수 있습니다

private void textBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if (row.Cells["driverNo"].Value != null 
      && row.Cells["driverNo"].Value.ToString() == textBox1.Text) 
     { 
      row.Visible = false; 
     } 
     else 
     { 
      row.Visible = true; 
     } 
    } 
} 

조회 또는 해시 테이블을 사용하여 루프를 제거하십시오. 그러나 이것은 기본적으로 잘 작동합니다 (큰 데이터 그리드에서 테스트하지 않았습니다).

+0

감사합니다 -이 코드는 어디에 있습니까? – theshizy

+0

textBox에 제출 버튼이 있어야합니다. 또는 사용자가 타이핑하는 동안 즉석에서 일어나는 것을 원하십니까? 두 번째 경우라면 행을 다시 표시하는 반대의 경우를 처리해야합니다. – etaiso

+0

비행 중에 발생해야합니다 – theshizy