ListView项目未正确重命名

时间:2016-07-02 22:27:00

标签: c# list listview naming

我有一个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工作正常,它会正确地重命名所有其他项,但如果我删除中间或底部的项,好吧,不是第一个,所有其他人都得到同一个名字。

我错过了什么,出了什么问题?

1 个答案:

答案 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() + @"_";
            }