AlfredLopez
AlfredLopez

Reputation: 29

How can I loop through the selected listview item

When I double click on my selected listview item I can easily get each value and set them in a textbox by using the following code.

        ListViewItem item = listView1.SelectedItems[0];

        entry_txtBox.Text = item.Text;
        name_txtBox.Text = item.SubItems[1].Text;

But I'd rather loop through the selected item and compare each column name to each textbox tag. If they match set the column value to the textbox.

This is what I have so far.

        foreach (Control c in this.Controls)
        {
            foreach (Control childc in c.Controls)
            {
                foreach (ColumnHeader header in listView1.Columns) // This should be the selected item.
                {
                    if (childc is TextBox && header == childc.Tag)
                    {
                        // Fill Textboxes
                    }
                }
            }
        }

Again my question is how can I loop through each column header and compare them to a textbox tag.

Upvotes: 0

Views: 933

Answers (1)

garryp
garryp

Reputation: 5766

First you can use good old recursion to build a flat list of all your controls up by traversing the control tree:

var controls = GetControls(parent);

public IEnumerable<Control> GetControls(Control parent)
{
    foreach(var control in parent.Controls)
    {
        yield return control;
        var childControls = GetControls(control);
        foreach(var child in childControls)
        {
            yield return child;
        }
    }
}

Then just do a LINQ to filter:

var textBoxControls = controls.Select(c => c is TextBox && header == TextBox.ID); //Or whatever condition you want to use.

Upvotes: 1

Related Questions