清除特定列表视图列的内容?

时间:2013-11-25 20:09:08

标签: c# winforms listview

这就是我目前向listview添加信息的方式:

private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
    int totItems = Seq3.Count - 1;
    if (PercentPopTolerance1.Count - 1 > totItems) totItems = PercentPopTolerance1.Count - 1;

    for (int i = 0; i <= totItems; i++)
    {
        ListViewItem lvi = new ListViewItem();
        string item1 = "";
        string item2 = "";

        if (Seq3.Count - 1 >= i) item1 = Seq3[i].ToString();
        if (PercentPopTolerance1.Count - 1 >= i) item2 = PercentPopTolerance1[i].ToString();

        lvi.SubItems.Add(item1);
        lvi.SubItems.Add(item2);

        listView2.Items.Add(lvi);
    }
}

查看空列表视图:

enter image description here

现在我如何清除任何特定列的内容?假设我想添加到YYMM列,但在此之前,我想清除该特定列。怎么会这样做?

2 个答案:

答案 0 :(得分:1)

您应该按名称指定列(列对应于ListViewItem中的子项),请注意,此Name不是ColumnHeader.Name,我的意思是相应的ListViewSubItem.Name:< / p>

public void ClearColumn(string colName){
  foreach(ListViewItem item in listView1.Items){
    var cell = item.SubItems[colName];
    if(cell != null) cell.Text = "";
  }
}

以下代码适用于传递的ColumnHeader.Name而不是ListViewSubItem.Name,如上面的代码所示:

public void ClearColumn(string columnHeaderName){
  int i = listView1.Columns.IndexOfKey(columnHeaderName);
  if(i == -1) return;
  foreach(ListViewItem item in listView1.Items){
    item.SubItems[i].Text = "";
  }
}

您可以尝试使用以下代码使其适用于Text而不是Name

public void ClearColumn(string colText){
  if(listView1.Items.Count == 0) return;
  var col =  listView1.Columns.Cast<ColumnHeader>()
                      .Select((x,i)=>new{x,i})
                      .FirstOrDefault(a=>a.x.Text == colText);
  if(col == null) return;
  foreach(ListViewItem item in listView1.Items){
    item.SubItems[col.i].Text = "";
  }
}

答案 1 :(得分:1)

您可以像这样清除列值

        var items = listView1.Items;

        foreach (ListViewItem item in items)
        {
            a.SubItems["YYWW"].Text = "";
        }