Programmatically select a Listview item

I can't programmatically select an item on a listview in c# 2005 beta2.  Basically, I:

1. Create a Listview called Listview1
2. Populate Listview1 with some preset items during startup of form
3. Select first item by: 
      Listview1.Items[0].Selected = true;
4. Problem is that I get zero when I execute: 
      Listview1.SelectedItems.Count

I have tried setting focus to Listview1 but I still set zero returned.  Is this a bug - or am I doing something wrong

Thanks


Answer this question

Programmatically select a Listview item

  • catlion

    This is just a wild guess, but do you run multiple threads in this program   If you do, have you made sure all the UI related calls happen on the UI thread

    It isn't a terribly good guess, I'd expect you have problems in VB.NET as well as C# if it was something like this.

    The following simple test case seems to do what one would expect so there must be some wrinkle in your program we aren't seeing

    Create a simple form program and drop a a ListView and two Buttons on the form.  Use the designer to add one column to the ListView.

    The first button's click handler fills the list view



    private void button1_Click(object sender, System.EventArgs e)
    {
       ListViewItem item1 =
    new ListViewItem("item1");
       listView1.Items.Add (item1);

       ListViewItem item2 = new ListViewItem("item2");
       listView1.Items.Add (item2);

       ListViewItem item3 = new ListViewItem("item3");
       listView1.Items.Add (item3);
    }

     



    The second button programmatically selects the first item in the list



    private void button2_Click(object sender, System.EventArgs e)
    {
       listView1.Items[0].Selected =
    true;

       
    int i = GetSelectedIndex (listView1);

       Console.WriteLine ("Select: i={0}", i);
    }

    public static int GetSelectedIndex(ListView InListView)
    {
       
    if (InListView.SelectedItems.Count == 0) 
       {
          
    return 0;
       }

       // Too lazy to dial out the index
       
    return InListView.SelectedItems.Count;
    }

     



  • rainboy

    Thanks for the suggestions.  The procedure is called during form startup and that seems to be the problem. Using debug, I can see that the item's selected value is correctly set to true but the selected.count is zero.  Once the form is up and running, the procedure works perfectly.  I presume this is a bug in beta2.

    I have got round the problem by looping through each item on the listview and check if its selected value is true.


  • adeel alvi

    Post the code to reproduce this.

  • Allan Mitchell

    Not sure if posting all the code will help because it is very long ... below are parts of it.  Program is a free song projection software which I have written in VB.NET.  I am in the process of porting it to c#:

    //Calling Procedure
    //WorshipList is the ListView which has just been populated with data from a text file

    if (WorshipList.Items.Count > 0)
    {
     WorshipList.Items[0].Selected = true;
     WorshipListIndexChanged(1);
    }

    private void WorshipListIndexChanged(int StartingSlide)
    {
     int Selecteditem;
     gf.PreviewItem.Source = gf.ItemSource.WorshipList;
     gf.TotalWorshipListItems = WorshipList.Items.Count;
     Selecteditem = gf.GetSelectedIndex(WorshipList);
     if (Selecteditem >= 0)
     {
      ...
     }

    public static int GetSelectedIndex(ListView InListView)
    {
     if (InListView.SelectedItems.Count == 0) 
     {
      ...
     }
    }

    //The above: InListView.SelectedItems.Count returns 0


  • anibaki

    Hello,

    Try this...

    lvTheList.SelectedIndex = iIndexToSelect; //e.g 0 for the first item etc

    Hope this helps,
    Gary

  • Programmatically select a Listview item