John M
John M

Reputation: 14668

ASP .NET - Retrieve value from Listview based on NewEditIndex

Using ASP.NET 3.5 ListView control.

I would like to capture the value of my table id from the currently edited row of a ListView.

A ItemEditing event has been added to the ListView. The only value available in this event is e.NewItemIndex. This returns 0 if the first row of the current page of the ListView is being edited.

How do I convert this 0 into the actual table id (label control value)?

I have tried:

table_id = Convert.ToString(ListView1.Items[e.NewEditIndex].FindControl("table_idLabel1"));

Upvotes: 1

Views: 1302

Answers (3)

Chris
Chris

Reputation: 2055

Use FindControlRecursive (from Recursive Page.FindControl). The problem with FindControl is that it only search one layer deep.

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
} 

Upvotes: 0

Aaron Daniels
Aaron Daniels

Reputation: 9664

Are you sure table_idLabel1 is the correct id?

Also, you may need to look recursively as in Chris's answer. Plus, it looks like your casting the control to a string. You probably want the ID property and not the control itself.

Upvotes: 0

Matthew Jones
Matthew Jones

Reputation: 26190

Can you use the DataKeyNames property instead of a label? Set the property to the name of the database field that is the key for the table, then do something like this:

table_id = ListView1.DataKeys[e.NewEditIndex].Value.ToString();

Upvotes: 1

Related Questions