2016-07-02 28 views
0

Ich habe eine list view, die zwei Spalten hat: eine für das Präfix und eine für die Verbindungszeichenfolge.ListView Elemente werden nicht richtig umbenannt

Beispiel:

Prefix| Connection string 
-------------------------- 
OR1_ | blablabla 
-------------------------- 
OR2_ | blebleble 
-------------------------- 
OR3_ | blublublu 
-------------------------- 

(Sorry für den behelfsmäßigen Tisch, ich glaube, es einfacher zu verstehen)

So, jetzt, wenn ich einen Artikel aus dem ich brauche Listview löschen Sie alle Präfixe umbenennen so vorstellen, wenn ich die Artikelnummer 2, löschen will ich bis am Ende mit:

Prefix| Connection string 
-------------------------- 
OR1_ | blablabla 
-------------------------- 
OR3_ | blublublu 
-------------------------- 

Aber ich brauche es eigentlich OR1_ und OR2_

zu sein

so habe ich diesen Code, die das tut, wenn ich einen Artikel löschen:

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

      } 
     } 

Die letzte for funktioniert gut, wenn ich die ersten Punkt auf der Liste löschen, es umbenennt alle anderen richtig, aber Wenn ich einen in der Mitte oder am unteren Rand lösche, dann wird einer, der nicht der erste ist, den gleichen Namen erhalten.

Was vermisse ich, was ist los?

+0

Sind Sie mehr als ein Element zum Zeitpunkt löschen oder nur ein Element ausgewählt ist? IE Die MultiSelect-Eigenschaft ist auf Wahr oder Falsch gesetzt? – Steve

Antwort

0

Das erste, was ich in Ihrem Code zu sehen ist, dass in der for Schleife, Sie i zweimal sind Inkrementieren, zunächst an dem beggining der Schleife und die zweiten, im zweiten Block, wenn Sie es mit dem newPrefix und diesem zuweisen könnte ein Problem sein:

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

was verwendet werden soll, nicht unerwünschtes Verhalten einzufügen ist, wenn man i newPrefix zuweisen will, ist i+1 statt i++ verwenden.

Und die zweite Sache, die mich denken lässt, ist, wie Sie Ihre listViewConnectionStrings.Items verwenden, weil Sie nie den Index Ihres Artikels ändern. Es wird nur Item [0] verwendet. Sie können mit beiden Modifikationen versuchen Sie es erneut wie folgt:

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

Ich habe versucht und es gibt keinen Unterschied, plus i ++ wäre der richtige Weg, es zu tun, weil es i + 1 zurückgibt, aber ich mit dem gleichen Wert wie es war – LikeIfYouCaredAboutMyName

+1

@LikeIfYouCaredAboutMyName, beachten Sie bitte, dass wenn Sie i ++, es wird immer den Wert von i ändern, aber nach dem Ende der Zuweisung in Ihrem Fall. Bitte versuche es noch einmal, ich habe meine Antwort aktualisiert. Prost! – meJustAndrew

+0

ok, das hat funktioniert, danke. Es benennt die Items korrekt um, gibt aber eine Ausnahme, die besagt, dass der Index nicht gültig ist. Daher denke ich, dass ich das Item inkrementieren muss, aber es mit dem Wert beibehalten soll, den er hatte. ist das möglich? – LikeIfYouCaredAboutMyName