如何在ListView中更改行颜色

时间:2018-09-05 12:47:44

标签: c# winforms listview

当我逐一读取我的数据库值时,我做了一个if语句,然后尝试更改行颜色。
例如,如果fark <= 10.000,我的行颜色是红色;如果fark < 0我的行颜色是黑色。

我写了上面的代码,执行时给我错误:

  

InvalidArgument =值'1'对于'索引'无效。   参数名称:索引

我的代码:

while (dr.Read())
{
    ListViewItem lv = new ListViewItem(
    dr[0].ToString());
    lv.SubItems.Add(dr[1].ToString());
    lv.SubItems.Add(dr[2].ToString());
    lv.SubItems.Add(dr[3].ToString());
    lv.SubItems.Add(dr[4].ToString());
    listView1.Items.Add(lv);
    fark = Convert.ToDouble(dr[3].ToString()) - Convert.ToDouble(dr[4].ToString());     

    if (fark <= 10.000) 
    {
        MessageBox.Show("Near Maximum ");
        listView1.Items[linemum].BackColor = Color.Red;
    }
    else if (fark <= 20.000 && fark >= 10.000) 
    {
        MessageBox.Show("Maybe Near");
        listView1.Items[linemum].BackColor = Color.Yellow;
    }
    else if (fark < 0) 
    {
      MessageBox.Show("overflow");
      listView1.Items[linemum].BackColor = Color.Black;
    }
    linemum = linemum + 1;
}

1 个答案:

答案 0 :(得分:4)

首先,此代码永远不会执行

else if (fark < 0) 
{
     //
}

因为fark < 0fark <= 10.000为真并且执行了该if中的语句

第二,您的异常InvalidArgument=Value of '1' is not valid for 'index'表示您想获得Items之外的项目。例如,如果您的Items中有1个元素,并且您想要获得Items [1],它将引发一个异常,但是Items [0]必须起作用。

尝试在循环之前初始化linemum = 0