如何在listview2中检查listview1项目是否不再存在并触发事件?

时间:2017-09-12 18:15:40

标签: c# listview for-loop foreach

我不认为我看到过这样的东西,我通过网络进行了搜索,但我能找到的只是使用foreach循环。

here I have the Listviews

我想做的是如果listview1没有任何名为" Joshua"的项目,它将改变listview2" Joshua"来自" Incomplete"到"完成"。

listview1可以有2个或更多" Joshua",所以直到所有" Joshua"已经消失了listview2必须留下" Incomplete"。当所有的约书亚"在Listview1中消失了,那就是listview2" joshua" be"完成"。

this must be the output.

我用于循环,但它不会完全变得不完整。我想我在循环本身可能是错的。

我把它放在timer1_tick中,因为listview1项目可以在时间到期时删除。

这是我的代码:

for (int lst = 0; lst < listView2.Items.Count; lst++)
{
    for (int dgv = 0; dgv < dataGridView1.Rows.Count; dgv++)
    {
        if (listView2.Items[lst].SubItems[0].Text == listView1.Items[dgv].SubItems[0].Text )
        {
            continue;
        }
        else if (listView2.Items[lst].SubItems[0].Text != listView1.Items[dgv].SubItems[0].Text ) 
        {
            listView2.Items[lst].SubItems[1].Text = "Complete";
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您不需要遍历列表视图项。您的要求是不断检查ListView1是否有特定项目(在这种情况下为Joshua。),如果没有,请更改ListView2中的状态。

我要做的是创建一个方法并将字符串列表传递给它。字符串列表是您要搜索的所有项目的列表,例如Joshua

然后,对于列表中的每个项目,如果ListView1包含它,则在ListView2中更改所述项目的状态。在其他地方,您需要使用要检查的项目更新字符串列表。

private void TimerTick(object sender, EventArgs e)
{
    // items is a list of string which contains strings to search for, such as "Joshua"
    ChangeStatus(items);
}

private void ChangeStatus(List<string> items)
{
    foreach(string it in items)
    {
        if(!lv1.Items.Contains(it))
        {
            // Change the status of 'it' in ListView2 from Incomplete to Complete
            // Change only if status is 'Incomplete'. No point in changing if it's already 'Complete'.
        }
    }
}

您没有指定这是WPF还是WinForms。如果它是前者,那么最好的方法是为表示每个列表视图的项目提供两个ObservableCollection个集合。然后数据将两个集合绑定到列表视图,并操纵ObservableCollections以查看项目是否存在等,WPF将自动处理该数据的ListView表示。

答案 1 :(得分:0)

我有点觉得使用隐藏在listview后面的数据网格来使这项工作变得迟钝。但总而言之,它在实现功能方面迈出了一大步。

public void cceceec()
        {
            if (listView1.Items.Count > 0)
            {

                for (int e = 0; e < listView2.Items.Count; e++)
                {
                    for (int w = 0; w < listView1.Items.Count; w++)
                    {
                        if (listView2.Items[e].SubItems[0].Text == listView1.Items[w].SubItems[2].Text)
                        {
                            if (listView1.Items[w].SubItems[7].Text == "Finished")
                            {
                                fcounter[e] = fcounter[e] + 1;
                                for (int dd = 0; dd < dataGridView1.Rows.Count; dd++)
                                {
                                    if (listView2.Items[e].SubItems[0].Text == dataGridView1.Rows[dd].Cells[0].Value.ToString())
                                    {
                                        MessageBox.Show(fcounter[0].ToString());
                                        if (fcounter[e] == Int32.Parse(dataGridView1.Rows[dd].Cells[2].Value.ToString()))
                                        {
                                            listView2.Items[e].SubItems[1].Text = "Complete";
                                        }
                                    }
                                }
                            }
                        }
                    }

                }
            }
        }
        private void timer2_Tick(object sender, EventArgs e)
        {

            servings();
            label3.Text = string.Format("{0:h:mm:ss tt}", DateTime.Now);

            if(dataGridView1.Rows.Count > 0)
            {
                for (int lst = 0; lst < listView2.Items.Count; lst++)
                {

                    for (int dgv = 0; dgv < dataGridView1.Rows.Count; dgv++)
                    {
                        if (listView2.Items[lst].SubItems[0].Text == dataGridView1.Rows[dgv].Cells[0].Value.ToString())
                        {
                            //serv checking
                            if (dataGridView1.Rows[dgv].Cells[1].Value.ToString() == "blanked")
                            {
                                continue;
                            }
                            else if (dataGridView1.Rows[dgv].Cells[1].Value.ToString() == "noblanked")
                            {
                                cceceec();
                            } 
                        }
                    }
                }
            }`