我不认为我看到过这样的东西,我通过网络进行了搜索,但我能找到的只是使用foreach循环。
我想做的是如果listview1没有任何名为" Joshua"的项目,它将改变listview2" Joshua"来自" Incomplete"到"完成"。
listview1可以有2个或更多" Joshua",所以直到所有" Joshua"已经消失了listview2必须留下" Incomplete"。当所有的约书亚"在Listview1中消失了,那就是listview2" joshua" be"完成"。我用于循环,但它不会完全变得不完整。我想我在循环本身可能是错的。
我把它放在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";
}
}
}
答案 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();
}
}
}
}
}`