ListView.FindItemWithText WHILE 循环在第一行 ListView 后失败
ListView.FindItemWithText inside WHILE loop fails after first ListView line
我想根据通过 FindItemWith
找到的不同数据更改 ListView
每行第二列的内容。
我的问题是第 2 行的开始覆盖了前面的列,例如,当我想更改内容搜索保留在第一行的文本时效果很好,请参阅:
当我想更改搜索停留在第二行的文本的内容时,发生了这种情况:
这是代码:
public void fillData(string search, string data, ListView haystack)
{
if (haystack.Items.Count > 0)
{
int idx = 0;
ListViewItem found;
while (idx < haystack.Items.Count)
{
found = haystack.FindItemWithText(search, true, idx);
if (found != null)
{
haystack.Items[idx].SubItems[1].Text = data.ToString();
}
idx++;
}
}
}
private void button3_Click(object sender, EventArgs e)
{
int i = 0;
while (i < 3)
{
ListViewItem item = new ListViewItem();
item.Text = i.ToString();
item.SubItems.Add("192.168.0." + i.ToString());
listView1.Items.Add(item);
i++;
}
}
private void button1_Click(object sender, EventArgs e)
{
fillData("192.168.0.0", "AAA", listView1);
}
private void button2_Click(object sender, EventArgs e)
{
fillData("192.168.0.1", "BBB", listView1);
}
这是因为您用于 FindItemWithText
的重载函数一直在搜索您传入的索引中的所有项目。
当循环的 idx = 0 时,FindItemWithText
将尝试搜索所有三项 0、1、2。
当循环的 idx = 1 时,FindItemWithText
将尝试搜索两个项目 1,2。
当循环的 idx = 2 时,FindItemWithText
将尝试仅搜索一项 2。
所以现在在第一种情况下,当您搜索第一项时,您的循环只找到它一次。但是在第二种情况下你正在搜索第二个项目,它在 (idx = 0 ---- 0,1,2) 和 (idx = 1 ---- 1,2) 迭代中被发现两次。因此,您正在更新 idx=0 和 idx = 1 的两个值。
这是文档link
无论如何 FindItemWithText
returns System.Windows.Forms.ListViewItem
。只需从零搜索一次。使用该项目进行更新。
我想根据通过 FindItemWith
找到的不同数据更改 ListView
每行第二列的内容。
我的问题是第 2 行的开始覆盖了前面的列,例如,当我想更改内容搜索保留在第一行的文本时效果很好,请参阅:
当我想更改搜索停留在第二行的文本的内容时,发生了这种情况:
这是代码:
public void fillData(string search, string data, ListView haystack)
{
if (haystack.Items.Count > 0)
{
int idx = 0;
ListViewItem found;
while (idx < haystack.Items.Count)
{
found = haystack.FindItemWithText(search, true, idx);
if (found != null)
{
haystack.Items[idx].SubItems[1].Text = data.ToString();
}
idx++;
}
}
}
private void button3_Click(object sender, EventArgs e)
{
int i = 0;
while (i < 3)
{
ListViewItem item = new ListViewItem();
item.Text = i.ToString();
item.SubItems.Add("192.168.0." + i.ToString());
listView1.Items.Add(item);
i++;
}
}
private void button1_Click(object sender, EventArgs e)
{
fillData("192.168.0.0", "AAA", listView1);
}
private void button2_Click(object sender, EventArgs e)
{
fillData("192.168.0.1", "BBB", listView1);
}
这是因为您用于 FindItemWithText
的重载函数一直在搜索您传入的索引中的所有项目。
当循环的 idx = 0 时,FindItemWithText
将尝试搜索所有三项 0、1、2。
当循环的 idx = 1 时,FindItemWithText
将尝试搜索两个项目 1,2。
当循环的 idx = 2 时,FindItemWithText
将尝试仅搜索一项 2。
所以现在在第一种情况下,当您搜索第一项时,您的循环只找到它一次。但是在第二种情况下你正在搜索第二个项目,它在 (idx = 0 ---- 0,1,2) 和 (idx = 1 ---- 1,2) 迭代中被发现两次。因此,您正在更新 idx=0 和 idx = 1 的两个值。
这是文档link
无论如何 FindItemWithText
returns System.Windows.Forms.ListViewItem
。只需从零搜索一次。使用该项目进行更新。