ListView 项目未正确重命名
ListView Items not getting renamed properly
我有一个包含两列的 list view
:一列用于前缀,一列用于连接字符串。
示例:
Prefix| Connection string
--------------------------
OR1_ | blablabla
--------------------------
OR2_ | blebleble
--------------------------
OR3_ | blublublu
--------------------------
(临时凑合抱歉table,我觉得这样会更容易理解)
所以现在每当我从 listView 中删除一个项目时,我都需要重命名所有前缀所以想象一下,如果我删除项目编号 2,我最终会得到:
Prefix| Connection string
--------------------------
OR1_ | blablabla
--------------------------
OR3_ | blublublu
--------------------------
但我实际上需要它是 OR1_ 和 OR2_
所以我编写了这段代码,当我删除一个项目时会执行此操作:
private void buttonDel_Click(object sender, EventArgs e)
{
if (listViewConnectionStrings.Items.Count == 0) return;
else
{
//Delete the items
foreach (ListViewItem eachItem in listViewConnectionStrings.SelectedItems)
{
Connections.Remove(eachItem.Text);
listViewConnectionStrings.Items.Remove(eachItem);
}
if(listViewConnectionStrings.Items.Count == 0) return;
//Rename the prefixes
int cntItems = listViewConnectionStrings.Items.Count;
for (int i = 0; i <= cntItems; i++)
{
ListViewItem newItem = new ListViewItem();
newItem = listViewConnectionStrings.Items[0];
int newPrefix = i++;
newItem.Text = @"OR" + newPrefix.ToString() + @"_";
}
}
}
当我删除列表中的第一个 第一个 项时,最后一个 for
工作正常,它会正确重命名所有其他项,但如果我在中间删除一个或者在底部,嗯,不是第一个,所有其他人都有相同的名字。
我错过了什么,怎么了?
我在你的代码中看到的第一件事是,在 for
循环中,你递增 i
两次,第一次是在循环的开始,第二次是在第二个块当您将它分配给 newPrefix
时,这可能是一个问题:
int cntItems = listViewConnectionStrings.Items.Count;
for (int i = 0; i <= cntItems; i++)//here you do i++
{
ListViewItem newItem = new ListViewItem();
newItem = listViewConnectionStrings.Items[0];
int newPrefix = i++;//here you increment i again
newItem.Text = @"OR" + newPrefix.ToString() + @"_";
}
当您想将 i 分配给 newPrefix
时应该使用什么,而不是插入不需要的行为是使用 i+1
而不是 i++
。
让我想到的第二件事是您如何使用 listViewConnectionStrings.Items
因为您从不更改项目的索引。它只使用了 Item[0]。您可以按以下两种修改方式重试:
int cntItems = listViewConnectionStrings.Items.Count;
for (int i = 0; i <= cntItems; i++)//here you do i++
{
ListViewItem newItem = new ListViewItem();
newItem = listViewConnectionStrings.Items[i];
int newPrefix = i+1;//here you increment i again
newItem.Text = @"OR" + newPrefix.ToString() + @"_";
}
我有一个包含两列的 list view
:一列用于前缀,一列用于连接字符串。
示例:
Prefix| Connection string
--------------------------
OR1_ | blablabla
--------------------------
OR2_ | blebleble
--------------------------
OR3_ | blublublu
--------------------------
(临时凑合抱歉table,我觉得这样会更容易理解)
所以现在每当我从 listView 中删除一个项目时,我都需要重命名所有前缀所以想象一下,如果我删除项目编号 2,我最终会得到:
Prefix| Connection string
--------------------------
OR1_ | blablabla
--------------------------
OR3_ | blublublu
--------------------------
但我实际上需要它是 OR1_ 和 OR2_
所以我编写了这段代码,当我删除一个项目时会执行此操作:
private void buttonDel_Click(object sender, EventArgs e)
{
if (listViewConnectionStrings.Items.Count == 0) return;
else
{
//Delete the items
foreach (ListViewItem eachItem in listViewConnectionStrings.SelectedItems)
{
Connections.Remove(eachItem.Text);
listViewConnectionStrings.Items.Remove(eachItem);
}
if(listViewConnectionStrings.Items.Count == 0) return;
//Rename the prefixes
int cntItems = listViewConnectionStrings.Items.Count;
for (int i = 0; i <= cntItems; i++)
{
ListViewItem newItem = new ListViewItem();
newItem = listViewConnectionStrings.Items[0];
int newPrefix = i++;
newItem.Text = @"OR" + newPrefix.ToString() + @"_";
}
}
}
当我删除列表中的第一个 第一个 项时,最后一个 for
工作正常,它会正确重命名所有其他项,但如果我在中间删除一个或者在底部,嗯,不是第一个,所有其他人都有相同的名字。
我错过了什么,怎么了?
我在你的代码中看到的第一件事是,在 for
循环中,你递增 i
两次,第一次是在循环的开始,第二次是在第二个块当您将它分配给 newPrefix
时,这可能是一个问题:
int cntItems = listViewConnectionStrings.Items.Count;
for (int i = 0; i <= cntItems; i++)//here you do i++
{
ListViewItem newItem = new ListViewItem();
newItem = listViewConnectionStrings.Items[0];
int newPrefix = i++;//here you increment i again
newItem.Text = @"OR" + newPrefix.ToString() + @"_";
}
当您想将 i 分配给 newPrefix
时应该使用什么,而不是插入不需要的行为是使用 i+1
而不是 i++
。
让我想到的第二件事是您如何使用 listViewConnectionStrings.Items
因为您从不更改项目的索引。它只使用了 Item[0]。您可以按以下两种修改方式重试:
int cntItems = listViewConnectionStrings.Items.Count;
for (int i = 0; i <= cntItems; i++)//here you do i++
{
ListViewItem newItem = new ListViewItem();
newItem = listViewConnectionStrings.Items[i];
int newPrefix = i+1;//here you increment i again
newItem.Text = @"OR" + newPrefix.ToString() + @"_";
}