2016-07-02 10 views
0

list viewには、プレフィックス用と接続文字列用の2つの列があります。ListViewの名前が正しく変更されない

例:

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

時間内に複数のアイテムを削除していますか、1つのアイテムだけを選択していますか? IE MultiSelectプロパティがtrueまたはfalseに設定されていますか? – Steve

答えて

0

あなたはnewPrefixにそれを割り当て、このとき私はあなたのコードで見る最初の事は、forループでは、2番目のブロックでは、最初のループと第二のbegginingで、i 2回増加しているということです問題がある可能性が:あなたは私が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++の代わりにi+1を使用しています。

また、私はあなたの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() + @"_"; 
      } 
+0

私は試してみましたが、違いはありませんプラスi ++はi + 1を返しますが、同じ値を保持しているので正しい方法です – LikeIfYouCaredAboutMyName

+1

@LikeIfYouCaredAboutMyName、私は++あなたのケースでは、割り当ての終了後、常に私の値を変更します。もう一度やり直してください。自分の答えを更新しました。乾杯! – meJustAndrew

+0

ありがとうございました。アイテムの名前を正しく変更しますが、インデックスが無効であるという例外があるため、私は増分する必要があると思っていますが、持っていた値で保持してください。それは可能ですか? – LikeIfYouCaredAboutMyName

関連する問題