【问题标题】:How to change row color in a ListView如何更改 ListView 中的行颜色
【发布时间】:2018-09-05 12:47:44
【问题描述】:

当我一一读取我的数据库值时,我做了一个 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;
}

【问题讨论】:

  • CodeProject 有很多示例。这是一个:codeproject.com/Articles/24114/…
  • 值得注意的是,DataGridView 是数据库相关数据显示的更好选择。这是一个实际的网格和条件颜色等很容易
  • 您可以通过设置LabelEdit=true让用户只在列表视图中编辑一个列。

标签: c# winforms listview


【解决方案1】:

首先,这段代码永远不会被执行

else if (fark < 0) 
{
     //
}

因为如果fark &lt; 0fark &lt;= 10.000 为真,并且此if 中的语句被执行

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多