我有一个list view
,它有两列:一列用于前缀,另一列用于连接字符串。
示例:
Prefix| Connection string
--------------------------
OR1_ | blablabla
--------------------------
OR2_ | blebleble
--------------------------
OR3_ | blublublu
--------------------------
(对不起临时表,我认为这样会更容易理解)
所以现在每当我从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
工作正常,它会正确地重命名所有其他项,但如果我删除中间或底部的项,好吧,不是第一个,所有其他人都得到同一个名字。
我错过了什么,出了什么问题?
答案 0 :(得分:0)
我在你的代码中看到的第一件事是,在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() + @"_";
}