我已经尝试搜索论坛以找到答案,但他们似乎都检查整数值,而不是字符串。 我有一个C#表单从SQL表中提取数据值并在datagridview上显示它们。我希望检查字符串值的列标记为“Type”,并且是我数据表中的第三列。我希望在第三列中突出显示包含“药房”一词的所有红色行。
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")
代码有效,但错误的列。它似乎只适用于整数,但我希望它能用于字符串。我该怎么做?
编辑:是的,对不起,我应该保持一致。我想要比较的价值是“药房”,大写。
Edit2:好的,我发现为什么它给了我这么多麻烦。第[2]栏中的值是由组合框添加的,由于某种原因,它总是在单词后面添加两个空格,即使它没有在字符串集合编辑器中显示空格。
答案 0 :(得分: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;
}
}