2013-12-11 87 views
0

我有下面的代碼限制用戶只能在文本框中輸入數字。通過按鍵過濾datagridview中的行

我怎麼會那麼使用所鍵入通過匹配什麼是寫在driverNo文本框,什麼是在DriverNo過濾列在我的DataGrid(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)。

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

請注意,如果您DataGridView一定到DataSet中,你應該首先需要暫停數據綁定。

編輯:

如果你希望發生的過濾,而用戶鍵入(飛),您可以將此代碼附加到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

我想你應該爲你的文本框提交一個提交按鈕。或者您希望在用戶正在輸入時在飛行中發生?如果是第二種情況,那麼我想你應該對待顯示行的相反情況。 – etaiso

+0

它必須在飛行中發生 – theshizy