附加信息:InvalidArgument =' 0'的值不适用于' index'

时间:2016-12-06 04:55:22

标签: c# listview selecteditem

我意识到这可能看起来像一个重复的问题(我已经看到许多其他问题询问此错误),但是我找不到解释我遇到的问题的答案。通过调用

激发错误
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());
        }
    }

调用第一个方法时会调用错误,但调用第二个方法时不会调用错误。这种不一致是我混淆的原因。是否有某种原因只会在第一种方法中出现此错误?

1 个答案:

答案 0 :(得分: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;