我有一个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
。
答案 0 :(得分:1)
问题在于你的if语句。如果该值大于threepoint0
,则也大于onepoint5
,因此else-if永远不会达到。
您必须检查 onepoint5
和threepoint0
之间的值是否。
更改为以下内容以解决您的问题:
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);