如何在ListView中更改行颜色

3

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

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

InvalidArgument=Value of '1' is not valid for 'index'. Parameter name: index

我的代码:

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;
}

CodeProject有很多示例。这是其中之一:https://www.codeproject.com/Articles/24114/Adding-Color-to-Listview-with-Customdraw - jdweng
值得注意的是,DataGridView 是显示与数据库相关数据的更好选择。它是一个实际的网格,条件颜色等非常容易。 - Ňɏssa Pøngjǣrdenlarp
通过设置 LabelEdit=true,您可以让用户仅编辑列表视图中的 一个 列。 - TaW
1个回答

4
首先,这段代码从未被执行。
else if (fark < 0) 
{
     //
}

因为如果 fark < 0,则 fark <= 10.000 成立并且执行此 if 中的语句。

其次,你的异常 InvalidArgument = Value of '1' is not valid for 'index' 意味着你想要获取在 Items 外部的项。例如,如果你的 Items 中有 1 个元素,并且你想要获取 Items [1],那么它会引发异常,但是 Items [0] 必须有效。

在循环之前尝试初始化你的 linenum = 0


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