Nathiel Paulino
Nathiel Paulino

Reputation: 564

How to reset the item select on ListView winform

I have a small project where I get some values from a txt and put inside of a ListView. I need to get the selected value when I click in some item, the first item that I ever select, works fine, but if I try to select again, I get an exception.

This is what I did..

Json = new StreamReader(openDialog.FileName).ReadToEnd();
                var ParsedValue = JsonValue.Parse(Json);
                Parsed = JsonConvert.DeserializeObject<List<Model>>(ParsedValue.ToString());
                foreach (var item in Parsed)
                {
                    var rows = new string[] { item.car, Convert.ToString(item.age )};
                    var items = new ListViewItem(rows)
                    {
                        Tag = item
                    };

                    ListViewCars.Items.Add(items);
                }

The List view is Filled.

And to get the Item selected from the list :

   private void cartsList_SelectedIndexChanged(object sender, EventArgs e)
    {
        ItemSelected = (Model)ListViewCars.SelectedItems[0].Tag;
    }

I can only get the value that I select first when the program runs.

The exception :

System.ArgumentOutOfRangeException: 'InvalidArgument=Value of '0' is not valid for 'index'. Parameter name: index'

Upvotes: 0

Views: 249

Answers (1)

Joshua Robinson
Joshua Robinson

Reputation: 3549

Check out the documentation on ListView.SelectedIndexChanged. Specifically, look at the Remarks section, which reads:

The SelectedIndices collection changes whenever the Selected property of a ListViewItem changes. The property change can occur programmatically or when the user selects an item or clears the selection of an item. When the user selects an item without pressing CTRL to perform a multiple selection, the control first clears the previous selection. In this case, this event occurs one time for each item that was previously selected and one time for the newly selected item.

I added the emphasis. This means that when you select the second item, the currently selected item is unselected and SelectedIndexChanged is triggered before the new item is selected. So when you try to get the first selected item with ListViewCars.SelectedItems[0].Tag you get that ArgumentOutOfRangeException because there are no selected items.

You need to add a check to the top of your event handler to make sure that there is at least one selected item before accessing SelectedItems[0].

Upvotes: 1

Related Questions