2015-07-20 84 views
3

我試着搜索論壇來找到答案,但它們似乎都檢查整數值,而不是字符串。 我有一個C#表單從SQL表中提取數據值並在datagridview上顯示它們。我希望檢查字符串值的列標記爲「類型」,並且是我的數據表中的第三列。我希望突出顯示第三欄中包含「藥房」一詞的所有行。如何更改基於字符串值的datagridview行顏色

private void invTableDataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
    { 
     foreach (DataGridViewRow row in invTableDataGridView.Rows) 
     { 
      if (row.Cells[2].Value.ToString() == "Pharmacy") 
      { 
       invTableDataGridView.DefaultCellStyle.BackColor = Color.Red; 
      } 
     } 

    } 

當我使用此代碼運行程序,沒有什麼變化,甚至當我進行應該觸發databindingcomplete事件動作。令人沮喪的,如果我改變row.Cells [2] row.Cells [3]其中I具有整數值,並鍵入

if (row.Cells[3].Value.ToString() == "0") 

代碼工作,但對於錯列。它似乎只適用於整數,但我希望它能與字符串一起工作。我該怎麼做呢?

編輯:是的,抱歉,我應該保持一致。我想比較的價值是「藥房」,大寫。

編輯2:好吧,我發現它爲什麼給我這麼多麻煩。列[2]中的值由組合框添加,出於某種原因,它總是在該單詞後添加兩個空格,即使它不顯示字符串集合編輯器中的空格。

+0

==必須.Equals( 「藥」) – Cageman

+0

@Cageman 我試圖更換如果格式控制(row.Cells [2] .Value.ToString() ==「藥房」)與if(row.Cells [2] .Value.ToString()。Equals(「藥房」)),但它沒有奏效。這是否意味着別的地方有什麼錯? – anesthetic

+1

也在工作的字符串。在你寫的問題中,價值必須是「藥房」,但是在與「藥房」比較的代碼中。如果數據包含小寫版本,則比較將返回false。 – Fabio

回答

2

因爲你的代碼和整數列一起工作,所以問題必須在字符串比較中。
正如我在評論中提到的那樣,檢查你有哪些數據和比較值。
或者您可以對單元格值執行ToLower()並將其與「藥房」進行比較
而且您可以使用CellFormatting事件處理程序。此事件應該好用於基於所述值

private void invTableDataGridView_CellFormatting(Object sender, 
               DataGridViewCellFormattingEventArgs e) 
{ 
    Int32 yourindexColumn = 2; 
    if (e.RowIndex < 0 || e.ColumnIndex <> yourindexColumn) 
     Return; 
    //Compare value and change color 
    DataGridViewCell cell = invTableDataGridView.Rows[e.RowIndex].Cells[yourindexColumn] 
    String value = cell.Value == null ? string.Empty : cell.Value.ToString() 
    if (value.ToLower().Equals("pharmacy") == true) 
    { 
     invTableDataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red; 
    } 
} 
+0

這一個工作!謝謝!我嘗試添加+1,但它表示我沒有足夠的代表將其公開顯示。 – anesthetic

+0

@anesthetic,尼斯。你可以接受答案,也許有人誰downvoted這將刪除他downvote :) – Fabio