如何根据字符串值更改DataGridView行的颜色

4

我尝试过在论坛上搜索答案,但它们似乎都是检查整数值而不是字符串。 我有一个C#表单从SQL表中提取数据值并在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;
            }
        }

    }

当我运行这段代码时,即使我执行应该触发数据绑定完成事件的操作,也没有任何变化。令人沮丧的是,如果我将row.Cells [2]更改为row.Cells [3],其中我有整数值,并键入

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

代码可以运行,但是作用在错误的列上。它似乎只能处理整数,但我希望它可以处理字符串。我该怎么做?
编辑:是的,抱歉,我应该保持一致。我想要比较的值是“Pharmacy”,首字母大写。
编辑2:好的,我找到了为什么会有这么多麻烦的原因。第二列中的值是通过组合框添加的,由于某种原因,它总是在单词后面添加两个空格,即使在字符串集编辑器中不显示这些空格。

== 必须是 .Equals("Pharmacy") - Cageman
我尝试将 if (row.Cells[2].Value.ToString() == "Pharmacy") 替换为 if (row.Cells[2].Value.ToString().Equals( "Pharmacy")),但它没有起作用。这是否意味着其他地方也有问题? - anesthetic
1
在字符串上也可以工作。你在问题中写道Value必须是“pharmacy”,但在代码中,你正在与“Pharmacy”进行比较。如果数据包含小写版本,则比较将返回false。 - Fabio
@Fabio,这就是我想说的,现在还很早,我应该解释得更清楚一些。+1 给你 :-) - Cageman
@anesthetic 在对数据网格进行着色后执行刷新操作:base.refresh() - Cageman
1个回答

2
由于你的代码涉及整数列,问题必须出在字符串比较上。
正如我在评论中提到的那样,请检查您所拥有的数据和比较的值。
或者您可以在单元格值上执行ToLower()并将其与“pharmacy”进行比较。
您还可以使用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;
    }
}

这个可以运行!谢谢你!我尝试加+1,但它说我没有足够的声望来公开显示。 - anesthetic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接