2012-07-29 88 views
0

使用文本框搜索給定datagridview列中的值時,下面的代碼將選定行放置在包含輸入文本的列上。如何在搜索文本框中輸入字符時突出顯示datagridview行

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     //if (Char.IsLetter(e.KeyChar)) 
     //{ 
      for (int i = 0; i < (productDataGridView.Rows.Count); i++) 
      { 

       if (productDataGridView.Rows[i].Cells[1].Value.ToString().StartsWith(textBox1.Text, true, CultureInfo.InvariantCulture)) 
       { 
        productDataGridView.FirstDisplayedCell = productDataGridView[1, i]; 
        productDataGridView.CurrentRow.DefaultCellStyle.BackColor = System.Drawing.Color.Red; 
        return; // stop looping 
       } 
      } 
    } 

的問題是,我不能突出或更改所需行的背景色,而在文本框中輸入任何幫助嗎?

+0

不要相信FirstDisplayedCell該行設置爲當前。嘗試設置productDataGridView [1,i] .DefaultCellStyle.BackColor ...比CurrentRow更好嗎? – 2012-07-29 16:46:05

+0

這是真的FirstDisplayedCell不會將行設置爲當前,有沒有辦法將其設置爲當前? – 2012-07-29 17:32:10

+0

productDataGridView.CurrentRow = ... – 2012-07-29 19:29:01

回答

0

嘗試這樣的解決方案,這個最終的作品就像一個魅力:

  try 
     { 
      productDataGridView.ClearSelection(); //or restore rows backcolor to default 
      for (int i = 0; i < (productDataGridView.Rows.Count); i++) 
      { 
       if (productDataGridView.Rows[i].Cells[1].Value.ToString().StartsWith(textBox1.Text, true, CultureInfo.InvariantCulture)) 
       { 
        productDataGridView.FirstDisplayedScrollingRowIndex = i; 
        productDataGridView.Rows[i].Selected = true; //It is also possible to color the row backgroud 
        return; 
       } 
      } 
     } 
     catch (Exception) 
     { 
     } 
0

試試這個

 //restore backcolor of rows to default e.g. loop through grid and set backcolor to white 
     foreach(DataGridViewRow row in productDataGridView.Rows) 
     { 
      if (row.Cells[1].Value.ToString().StartsWith(textBox1.Text, true,  CultureInfo.InvariantCulture)) 
      { 
       //productDataGridView.FirstDisplayedCell = productDataGridView[1, i]; 
       row.DefaultCellStyle.BackColor = System.Drawing.Color.Red; 
       return; // stop looping 
      } 
      else 
       //Set backcolor to default 
     } 

     //return; //move return here 
+0

試過這種方法,只有當文本框內容被發現只有一行不多。儘管有文本框內容,行仍然被着色的第二個問題已被更改。 – 2012-07-29 17:36:33

+0

第一個問題是因爲你把'return'。第二個問題是在運行此代碼之前,必須將背景顏色恢復爲默認狀態。檢查更新的答案 – codingbiz 2012-07-29 17:49:08

+0

不可能刪除退貨,我收到異常。試過:productDataGridView.DefaultCellStyle.BackColor = System.Drawing.Color.White;不會將顏色恢復到默認狀態。 – 2012-07-29 18:04:45

相關問題