2016-12-06 75 views
0

我意識到這可能看起來像一個重複的問題(我見過很多其他問題詢問有關此錯誤),但我找不到答案解釋我遇到的問題。該錯誤是通過調用惹來附加信息:InvalidArgument ='0'的值對'索引'無效

invList.SelectedItems[0].Text //invList is a ListView 

從我讀過,當該指令引發的錯誤指示試圖訪問一個空列表(或陣列?)在ListView選擇的項目。但是,我試圖訪問的ListView在指令執行時被項目填充。以下是我發出這個指令的方法:

方法1:deleteItem

public bool deleteItem() 
    { 
     if (invList.SelectedItems.Count == 0) //if no item selected... 
     { 
      MessageBox.Show("Error: No item selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
      return false; 
     } 
     else 
     { 
      DialogResult dialogResult = MessageBox.Show(
       "Are you sure you want to delete item: " + invList.SelectedItems[0].Text + "?", 
       "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); 
      if (dialogResult == DialogResult.Yes) 
      { 
       for (int i = 0; i < itemRecords.Count; i++) 
       { 
        if ((itemRecords[i].id.ToString() == invList.SelectedItems[0].Text) && (itemRecords[i].practice == clinicName)) 
        { 
         itemRecords.Remove(itemRecords[i]); 
         listRefresh(); 
        } 
       } 
       return true; //return true to indicate that data has been edited 
      } 
      return false; // return false to indicate that nothing has changed 
     } 
    } 

方法2:的updateItem

public bool updateItem() 
    { 
     if (invList.SelectedItems.Count == 0) //if no item selected 
     { 
      MessageBox.Show("Error: No item selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
      return false; 
     } 
     else 
     { 
      for (int i = 0; i < itemRecords.Count; i++) 
      { 
       //if id == the id of the selected item 
       if((itemRecords[i].id.ToString() == invList.SelectedItems[0].Text) && (itemRecords[i].practice == this.Text)) 
       { 
        ItemAddition itemAddition = new ItemAddition(itemRecords, itemRecords[i], this); 
        itemAddition.ShowDialog(); 
       } 
      } 
      return true; 
     } 
    } 

listRefresh:

 public void listRefresh() 
    { 
     invList.Items.Clear(); 
     loadItems(); 
    } 

loadItems:

 private void loadItems() 
    { 
     foreach (Record r in itemRecords) 
     { 
      if (r.practice == clinicName) 
       invList.Items.Add(r.ToString()); 
     } 
    } 

錯誤在第一個方法被調用時調用,但不在第二個方法被調用時調用。這種不一致是我混淆的原因。這種錯誤只會在第一種方法中出現,是否有某些原因?

+0

你可以添加listRefresh方法的代碼嗎? – Damith

+0

@Damith當然,我已經添加了它。 – AustinC

+0

嘗試修改'for(int i = 0; i

回答

0

刪除項目後移動刷新方法。如果你移動物品並重新綁定,那麼你將失去選擇。

for (int i = 0; i < itemRecords.Count; i++) 
    { 
     if ((itemRecords[i].id.ToString() == invList.SelectedItems[0].Text) && (itemRecords[i].practice == clinicName)) 
     { 
      itemRecords.Remove(itemRecords[i]); 
      //listRefresh(); 
     } 
    } 

listRefresh();     
return true; 
+0

當我看到您的答案時,我剛剛發現了一個粗略的解決方案。這正是錯誤的地方。非常感謝您的幫助。 – AustinC

相關問題