How to Edit data in nested Listview

Posted by miti737 on Stack Overflow See other posts from Stack Overflow or by miti737
Published on 2009-06-15T07:56:15Z Indexed on 2010/04/12 0:03 UTC
Read the original article Hit count: 1021

Filed under:
|
|
|
|

I am using listview to display a list of items and a nested listview to show list of features to each item. Both parent and child listview need to able Insert,Edit and delete operation. It works fine for parent listview. But when I try to edit an child item, The edit button does not take it into Edit mode. Can you please suggest me what I am missing in my code?

<asp:ListView ID="lvParent" runat="server"                 
                OnItemDataBound="lvParent_ItemDataBound" 
                onitemcanceling="lvParent_ItemCanceling" onitemcommand="lvParent_ItemCommand" 
                DataKeyNames="ItemID" onitemdeleting="lvParent_ItemDeleting" 
                oniteminserting="lvParent_ItemInserting"  >
                <LayoutTemplate>                                        
                    <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
                    <div align="right">
                        <asp:Button ID="btnInsert" runat="server" Text="ADD Item" onclick="btnInsert_Click"/>
                    </div>
                </LayoutTemplate>
                <ItemTemplate>
                    <table runat="server" cellpadding="0" cellspacing="0" border="0"  width="100%">
    	                <tr>
    	                    <td>
    	                        <div id="dvDetail">
                                    <span >Description</span>

                                    <asp:TextBox ID="txtDescription" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Description") %>' TextMode="MultiLine" ></asp:TextBox>

                                </div>                                
                                <div id="dvFeature" >
                                    <span>Feature List</span>                                                                  
                                    <asp:ListView ID="lvChild" runat="server"  
                                        InsertItemPosition="LastItem" 
                                        DataKeyNames="FeatureID" OnItemCommand="lvChild_ItemCommand"
                                         OnItemCanceling="lvChild_ItemCanceling" OnItemDeleting="lvChild_ItemDeleting" 
                                         OnItemEditing="lvChild_ItemEditing" OnItemInserting="lvChild_ItemInserting" OnItemUpdating="lvChild_ItemUpdating"
                                        DataSource='<%# DataBinder.Eval(Container.DataItem, "FeatureList") %>' >
                                        <LayoutTemplate>
                                            <ul >
                                                <asp:PlaceHolder runat="server" ID="itemPlaceHolder" ></asp:PlaceHolder>                                                                                                                               
                                            </ul>   
                                        </LayoutTemplate>
                                        <ItemTemplate>
                                            <li>
                                                <span class="dvList"><%# DataBinder.Eval(Container.DataItem, "FeatureTitle")%></span>                                                

                                                <div class="dvButton" >
                                                    <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="/Images/edit_16x16.gif" AlternateText= "Edit" CommandName="Edit" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "FeatureID") %>' Width="12" Height="12" />
                                                    <asp:ImageButton ID="btnDelete" runat="server" ImageUrl="/Images/delete_16x16.gif" AlternateText= "Delete" CommandName="Delete" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "FeatureID") %>' Width="12" Height="12" />

                                                </div>

                                            </li>

                                        </ItemTemplate>
                                        <EditItemTemplate>
                                            <li>
                                                <asp:TextBox ID="txtFeature"  Text='<%# DataBinder.Eval(Container.DataItem, "FeatureTitle")%>' runat="server"></asp:TextBox>

                                                <div class="dvButton">
                                                    <asp:ImageButton ID="btnUpdate" runat="server" ImageUrl="/Images/ok_16x16.gif" AlternateText= "Update" CommandName="Update" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "FeatureID") %>' Width="12" Height="12" />
                                                    <asp:ImageButton ID="btnCancel" runat="server" ImageUrl="/Images/delete_16x16.gif" AlternateText= "Cancel" CommandName="Cancel" Width="12" Height="12" CausesValidation="false" />

                                                </div>

                                            </li>
                                        </EditItemTemplate>
                                        <InsertItemTemplate>                                            
                                                <asp:TextBox ID="txtFeature" runat="server"></asp:TextBox>

                                                <div class="dvButton">
                                                    <asp:ImageButton ID="btnInsert" runat="server" ImageUrl="/Images/ok_16x16.gif" AlternateText= "Insert" CommandName="Insert" Width="12" Height="12" />
                                                    <asp:ImageButton ID="btnCancel" runat="server" ImageUrl="/Images/delete_16x16.gif" AlternateText= "Cancel" CommandName="Cancel" Width="12" Height="12" CausesValidation="false" />

                                                </div>

                                        </InsertItemTemplate>
                                    </asp:ListView>
                                </div>                                
    	                    </td>

    	                </tr>
    	                <tr>
    	                    <td align="right">
    	                        <div id="dvButton" >
                                    <asp:Button ID="btnSave" runat="server"  Text="Save" 
                                        CommandName="Save"  
                                        CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ItemID")  %>' />
                                    <asp:Button ID="btnDelete" runat="server" Text="Delete"  CssClass="Cancel" 
                                        CommandName="Delete" 
                                        CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ItemID")  %>' />
                                </div>
    	                    </td>

    	                </tr>                 
                    </table>                   
                </ItemTemplate>                   

            </asp:ListView>

Code Behind:

protected void Page_Load(object sender, EventArgs e)
        {    
            if (Page.IsPostBack == false)
            {                  
                BindData();
            }           

        }

 private void BindData()
        {
            MyDataContext data = new MyDataContext();
            var result = from itm in data.ItemLists
                         where itm.ItemID == iItemID

                         select new
                         {
                             itm.ItemID,
                             itm.Description,                            
                             FeatureList =  itm.Features
                         };

            lvParent.DataSource = result;
            lvParent.DataBind();

        }

 protected void lvChild_ItemEditing(object sender, ListViewEditEventArgs e)
        {
            ListView lvChild = sender as ListView;            

            lvChild.EditIndex = e.NewEditIndex;

            lvChild.DataBind();

        }

Edit:

protected void lvChild_ItemEditing(object sender, ListViewEditEventArgs e)
            {
                ListView lvChild = sender as ListView;            

                lvChild.EditIndex = e.NewEditIndex;

                lvChild.DataBind();

            }

If I use "lvChild.DataBind()" in 'ItemEditing' event, the total list of child items goes away if I click 'edit'

protected void lvChild_ItemEditing(object sender, ListViewEditEventArgs e)
            {
                ListView lvChild = sender as ListView;            

                lvChild.EditIndex = e.NewEditIndex;              


            }

if I get rid of 'lvChild.Databind' in ItemEditing event, it goes to Edit mode after clicking the 'edit' button twice . And though it shows textbox control of EditItemTemplate, it appears as a blank textbox (does not bind existing value to edit).

© Stack Overflow or respective owner

Related posts about ASP.NET

Related posts about .NET