数学条件语句导致所有受影响的Datagridview单元格相同的颜色

时间:2014-06-23 07:46:21

标签: c# math datagridview conditional-statements

我有一个dataGridView列出了很长的价格列表,因此我的基本价格是17.25,如果每个Cells[2]的{​​{1}}中的值比{{高1.5%} 1}},将其突出显示为黄色;如果每个row的{​​{1}}中的值为3.0%,请将其突出显示为橙色。但是,它们都以黄色突出显示,即使有些值应该属于橙色类别。

如果值应该进入橙色区域,我该如何停止黄色?谁能查看/更正我的代码?非常感谢任何帮助,谢谢! :)

17.25

修改:分别以黄色(Cells[2])和橙色(row)绘制的两个样本价格private void button_1_Click(object sender, EventArgs e) { double baseprice = 17.25; double onepoint5 = baseprice * 1.015; double threepoint0 = baseprice * 1.03; foreach (DataGridViewRow row in dataGridView_showPrices.Rows) { if (row.Cells["Prices_Date"].Value.ToString() != "") { int cellprices = Convert.ToInt16(row.Cells[2].Value); if (cellprices >= onepoint5) { row.Cells[2].Style.BackColor = Color.Yellow; } else if (cellprices >= threepoint0) { row.Cells[2].Style.BackColor = Color.Orange; } else { //do nothing } } } } 17.50

1 个答案:

答案 0 :(得分:1)

问题在于你的if语句。如果该值大于threepoint0,则大于onepoint5,因此else-if永远不会达到。

您必须检查 onepoint5threepoint0之间的值是否

更改为以下内容以解决您的问题:

if (cellprices >= onepoint5 && cellprices < threepoint0)
{
       row.Cells[2].Style.BackColor = Color.Yellow;
}
else if (cellprices >= threepoint0)
{
       row.Cells[2].Style.BackColor = Color.Orange;
}
else
{
       //do nothing
}

您遇到了第二个问题,就在这一行:int cellprices = Convert.ToInt16(row.Cells[2].Value);

在此,您要将您的值转换为integer,将17,50更改为18。您必须转换为双精度才能比较两个双打:Convert.ToDouble(value)

参见示例:

double firstValue = 17.50;

Console.WriteLine("double value:" + firstValue);
Console.WriteLine("integer value:" + Convert.ToInt16(firstValue));
Console.WriteLine("double converted value:" + Convert.ToDouble(firstValue));
Console.Read();

输出:

double值:17,5整数值:18
双转换值:17,5

要解决您的问题,请将此行:int cellprices = Convert.ToInt16(row.Cells[2].Value);更改为double cellprices = Convert.ToDouble(row.Cells[2].Value);