2015-07-20 83 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