简体   繁体   中英

Nested grid edit doesn't work

I'm stuck on this problem where I have grid within grid where the nested grid is editable. I can't get the edit working. What's complicates things is that the nested grid is inside a modal popup extender.

It works to the point where I click on the edit button. Then the EmptyDataText property kicks in with the message. If I click on it second time the grid opens in edit mode but the update/cancel buttons don't work. The cancel button when click displays the EmptyDataText property.

Another issue is that this nested grid doesn't use a object data source so I'm going to have to all the updating and deleting in the code file. Not sure now to do that either.

I would like some advice as to how to make this corrected. Here is the code:

<asp:GridView ID="gvForum" runat="server" DataSourceID="odsForumApproval" DataKeyNames="id" Width="200px"
RepeatColumns="1" DataKeyField="id" CssClass="gridview"
AutoGenerateColumns="False" GridLines="None" OnSelectedIndexChanged="_OnCommand">
<AlternatingRowStyle CssClass="altbgcolor"  />
<Columns>
    <asp:TemplateField >
        <ItemTemplate>
            <asp:Label runat="server" ID="lblTitle" Text='<%# Bind("Title") %>' />

            <asp:Panel id="div" runat="server" align="center" class="confirm" style="display:none"  >
                <asp:GridView runat="server" ID="gvForumDetail" AutoGenerateColumns="False" DataKeyNames="id"
                    AllowPaging='true' CssClass="gridview" 
                    AllowSorting="true" PageSize="5" CellPadding="5" OnRowEditing="gvForumDetail_OnRowEditing"
                    OnRowCancelingEdit="gvForumDetail_CancelRecord"  >
                    <AlternatingRowStyle CssClass="altbgcolor" />
                    <RowStyle VerticalAlign="Top" HorizontalAlign="Left" />
                    <HeaderStyle  CssClass="greenbar" ForeColor="White" /> <Columns>
                        <asp:BoundField DataField="id" ReadOnly="true" Visible="false" />
                        <asp:TemplateField HeaderText="Title">
                            <ItemTemplate>
                                <asp:Label runat="server" ID="lblTraining" Text='<%# Bind("title") %>' />
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:TextBox runat="server" ID="txtTraining" Text='<%# Bind("title") %>' />
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Post Message">
                            <ItemTemplate>
                                <asp:Label runat="server" ID="lblCompletionDate" Width="250"  Text='<%# Bind("description") %>' />
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:TextBox runat="server" ID="txtDescription" Text='<%# Bind("description") %>' TextMode="MultiLine" Rows="5" Width="250" />
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Posted By">
                            <ItemTemplate>
                                <asp:Label runat="server" ID="lblRecurence" Text='<%# Bind("MemberName") %>' />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Posted Date">
                            <ItemTemplate>
                                <asp:Label runat="server" ID="lblNotes" Text='<%# Eval("itemdate", "{0:d}") %>'  />
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:CheckBox runat="server" ID="cbxApproved" Text='<%# Bind("approved") %>' />
                            </EditItemTemplate>
                        </asp:TemplateField>
                        <asp:CommandField ShowCancelButton="true" ShowEditButton="true" ShowDeleteButton="true" />
                    </Columns>
                </asp:GridView>
                <br />
                <Club:RolloverLink ID="btnClose" runat="server" Text="Close" />
            </asp:Panel>

            <ajaxToolKit:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
                TargetControlID="lblTitle"
                PopupControlID="div"
                CancelControlID="btnClose"
                BackgroundCssClass="modalBackground" />

        </ItemTemplate>
    </asp:TemplateField>
    <asp:CommandField ShowSelectButton="True"  />
</Columns>

Code behind:

public void _OnCommand(object sender, EventArgs e)
{
    ObjectDataSource ods = new ObjectDataSource();
    ods.ID = "ods_ForumDetail";
    ods.EnableViewState = true;
    ods.TypeName = "ForumApproval";
    ods.SelectMethod = "GetForumById";

    string id = "";
    int rowIndex = gvForum.SelectedIndex;
    id = gvForum.DataKeys[rowIndex].Value.ToString();
    ods.SelectParameters.Add("id", System.TypeCode.Int32, id);

    var ModalPopupExtender1 = (ModalPopupExtender)(gvForum.SelectedRow.FindControl("ModalPopupExtender1"));
    ModalPopupExtender1.Show();

    var gvForumDetail = (GridView)(gvForum.SelectedRow.FindControl("gvForumDetail"));
    gvForumDetail.DataSource = ods;
    gvForumDetail.DataBind();
}

protected void gvForumDetail_OnRowEditing(Object sender, GridViewEditEventArgs e)
{
    var ModalPopupExtender1 = (ModalPopupExtender)(gvForum.SelectedRow.FindControl("ModalPopupExtender1"));
    ModalPopupExtender1.Show();

    var gvForumDetail = (GridView)(gvForum.SelectedRow.FindControl("gvForumDetail"));

    gvForumDetail.EditIndex = e.NewEditIndex;
    gvForumDetail.DataBind();
}

protected void gvForumDetail_CancelRecord(object sender, GridViewCancelEditEventArgs e)
{
    var ModalPopupExtender1 = (ModalPopupExtender)(gvForum.SelectedRow.FindControl("ModalPopupExtender1"));
    ModalPopupExtender1.Show();

    var gvForumDetail = (GridView)(gvForum.SelectedRow.FindControl("gvForumDetail"));
    gvForumDetail.EditIndex = -1;
    gvForumDetail.DataBind();
}

I will try to answer part of your question, updating and deleting the code. you need to take advantage of the "onrowcommand" for the inner gridview ( OnRowCommand ).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM