【问题标题】:remove item with specific value in winforms listview在winforms listview中删除具有特定值的项目
【发布时间】:2017-07-21 18:12:03
【问题描述】:

我想在列表视图中删除其值(例如下图)等于 100109 的项目。

我的代码是:

     private void listy()
    {
        ListViewItem lvi = new ListViewItem(dgvPOSproduct.CurrentRow.Cells[0].Value.ToString());

        lvi.SubItems.Add(dgvPOSproduct.CurrentRow.Cells[1].Value.ToString());
        lvi.SubItems.Add(lblD.Text);
        lvi.SubItems.Add(lblV.Text);
        lvi.SubItems.Add("" + dgvPOSproduct.CurrentRow.Cells[6].Value.ToString() + " x " + quantity.Text + " ");
        lvi.SubItems.Add(unittotal.Text);
        listView1.Items.Add(lvi);
    }

要删除的代码(这是错误的)是:

     foreach (DataGridViewRow item in this.dgvPOScart.SelectedRows)
        {
            string id = "";
            if (dgvPOScart.SelectedCells.Count > 0)
            {
                int selectedrowindex = dgvPOScart.SelectedCells[0].RowIndex;

                DataGridViewRow selectedRow = dgvPOScart.Rows[selectedrowindex];

                id = Convert.ToString(selectedRow.Cells[0].Value);

                listView1.Items[id].Remove();

            }
    }

其中 id 值为 100109。

【问题讨论】:

  • 这只是添加项目的代码,那么您尝试将其删除什么?你的错误是什么?
  • 为什么不能循环遍历列表视图中的项目并检查是否找到删除它的值?
  • @jason 我只知道如何删除特定索引处的项目。像索引 0,1 等,但我想用问题中的特定值删除它。
  • @raj 我不知道有多抱歉这就是我问这个的原因
  • 已编辑我包含我的删除代码谢谢

标签: c# winforms listview


【解决方案1】:

一种选择是构建一个辅助函数来查找您需要的项目索引。

private int findIndexForItem(string name)
{
    int ind = -1;
    for (int i = 0; i < listView1.Items.Count; i++)
    {
        if (listView1.Items[i].Text.Equals(name))
        {
            ind = i;
            break;
        }
    }
    return ind;
}

那就这样称呼吧

int ind = findIndexForItem("100109");
if (ind >= 0)
    listView1.Items.RemoveAt(ind);

【讨论】:

  • 正是我要找的。非常感谢楼主
  • 我还建议考虑使用 ObjectListView。 objectlistview.sourceforge.net/cs/index.html 一种使用对象的列表视图,因此您不必单独添加项目。虽然在这种情况下它可能不起作用,但对未来很有用。
【解决方案2】:

为了使listView1.Items[id].Remove(); 工作,您必须设置 ListViewItem 的名称。有关所需更改,请参见下面的代码。

private void listy()
{
    ListViewItem lvi = new ListViewItem(dgvPOSproduct.CurrentRow.Cells[0].Value.ToString());
    lvi.Name = dgvPOSproduct.CurrentRow.Cells[0].Value.ToString(); // <---- add this line

    lvi.SubItems.Add(dgvPOSproduct.CurrentRow.Cells[1].Value.ToString());
    lvi.SubItems.Add(lblD.Text);
    lvi.SubItems.Add(lblV.Text);
    lvi.SubItems.Add("" + dgvPOSproduct.CurrentRow.Cells[6].Value.ToString() + " x " + quantity.Text + " ");
    lvi.SubItems.Add(unittotal.Text);
    listView1.Items.Add(lvi);
}

【讨论】:

  • 谢谢先生,我找到了答案,但我也会试试你的方法。
【解决方案3】:

您可以使用以下简单的方法,我已将循环放入按钮事件中。

private void button1_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem Item in listView1.SelectedItems)
            {
                listView1.Items.Remove(Item);
            }
        }  

【讨论】:

  • 谢谢先生,但很遗憾没有解决问题。我需要删除具有特定价值的项目。就像是。删除项目索引 = ID 的项目。 (其中 ID 的值为 100109)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多