在ASP中加载视图状态动态控件失败.. NET使用嵌套的GridView



在我的项目中,我正在一个屏幕上显示任务组和任务(即亲子),可以添加/编辑/删除父(任务组)记录,也可以添加/编辑/删除相关任务。为此,我使用嵌套的Grid View(亲子)。

我正在实现下面提到的示例应用程序链接到我的ASP.NET基于web的项目。

http://www.codeproject.com/Articles/20047/Editable-Nested-GridView-All-in-One

我的.ASPX看起来如下所述:

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Unicorn.Master" CodeBehind="TaskAndTaskGroup.aspx.cs" Inherits="Vipassi.Web.TaskGroup.TaskAndTaskGroup"%>
<asp:Content ID="Content1" ContentPlaceHolderID="phContent" runat="server">
<script language="javascript" type="text/javascript">
    function expandcollapse(obj, row) {
        var div = document.getElementById(obj);
        var img = document.getElementById('img' + obj);
        if (div.style.display == "none") {
            div.style.display = "block";
            if (row == 'alt') {
                img.src = "../../Resources/images/minus.gif";
            }
            else {
                img.src = "../../Resources/images/minus.gif";
            }
            img.alt = "Close to view other TaskGroups";
        }
        else {
            div.style.display = "none";
            if (row == 'alt') {
                img.src = "../../Resources/images/plus.gif";
            }
            else {
                img.src = "../../Resources/images/plus.gif";
            }
            img.alt = "Expand to show Tasks";
        }
    }
</script>

<div>
    <asp:GridView ID="GridView1" AllowPaging="True" BackColor="#f1f1f1"
        AutoGenerateColumns="false" DataSourceID="ObjectDataSource1" DataKeyNames="task_group_id"
        ShowFooter="true" Font-Size="Small"
        Font-Names="Verdana" runat="server" GridLines="None" OnRowDataBound="GridView1_RowDataBound"
        OnRowCommand="GridView1_RowCommand" OnRowUpdating="GridView1_RowUpdating"  BorderStyle=Outset 
        OnRowDeleting="GridView1_RowDeleting" OnRowDeleted="GridView1_RowDeleted"
        OnRowUpdated="GridView1_RowUpdated" AllowSorting="true">
        <RowStyle BackColor="Gainsboro" />
        <AlternatingRowStyle BackColor="White" />
        <HeaderStyle BackColor="#0083C1" ForeColor="White" />
        <FooterStyle BackColor="White" />
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <a href="javascript:expandcollapse('div<%# Eval("task_group_id") %>', 'one');">
                        <img id="imgdiv<%# Eval("task_group_id") %>" alt="Click to show/hide Tasks for TaskGroup <%# Eval("task_group_id") %>" width="9px" border="0" src="../../Resources/images/plus.gif" />
                    </a>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="TaskGroup ID" SortExpression="task_group_id">
                <ItemTemplate>
                    <asp:Label ID="lblTaskGroupID" Text='<%# Eval("task_group_id") %>' runat="server"></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:Label ID="lblTaskGroupID" Text='<%# Eval("task_group_id") %>' runat="server"></asp:Label>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="txtTaskGroupID" Text='' runat="server"></asp:TextBox>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Task Group" SortExpression="task_group">
                <ItemTemplate><%# Eval("task_group") %></ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtTaskGroup" Text='<%# Eval("task_group") %>' runat="server"></asp:TextBox>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="txtTaskGroup" Text='' runat="server"></asp:TextBox>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Fiscal Year" SortExpression="Fiscal_Year">
                <ItemTemplate><%# Eval("Fiscal_Year") %></ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtFiscalYear" Text='<%# Eval("Fiscal_Year") %>' runat="server"></asp:TextBox>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="txtFiscalYear" Text='' runat="server"></asp:TextBox>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Is Active" SortExpression="Active_Flag">
                <ItemTemplate><%# Eval("Active_Flag")%></ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtActiveFlag" Text='<%# Eval("Active_Flag") %>' runat="server"></asp:TextBox>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:TextBox ID="txtActiveFlag" Text='' runat="server"></asp:TextBox>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:CommandField HeaderText="Edit" ShowEditButton="True" />
            <asp:TemplateField HeaderText="Delete">
                <ItemTemplate>
                    <asp:LinkButton ID="linkDeleteTaskGroup" CommandName="Delete" runat="server">Delete</asp:LinkButton>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:LinkButton ID="linkAddTaskGroup" CommandName="AddTaskGroup" runat="server">Add</asp:LinkButton>
                </FooterTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <tr>
                        <td colspan="100%">
                            <div id="div<%# Eval("task_group_id") %>" style="display: none; position: relative; left: 15px; overflow: auto; width: 97%">
                                <asp:GridView ID="GridView2" AllowPaging="True" AllowSorting="true" BackColor="White" Width="100%" Font-Size="X-Small"
                                    AutoGenerateColumns="false" Font-Names="Verdana" runat="server" DataKeyNames="task_group_id" ShowFooter="true"
                                    OnPageIndexChanging="GridView2_PageIndexChanging" OnRowUpdating="GridView2_RowUpdating"
                                    OnRowCommand="GridView2_RowCommand" OnRowEditing="GridView2_RowEditing" GridLines="None"
                                    OnRowUpdated="GridView2_RowUpdated" OnRowCancelingEdit="GridView2_CancelingEdit" OnRowDataBound="GridView2_RowDataBound"
                                    OnRowDeleting="GridView2_RowDeleting" OnRowDeleted="GridView2_RowDeleted" OnSorting="GridView2_Sorting"
                                    BorderStyle="Double" BorderColor="#0083C1">
                                    <RowStyle BackColor="Gainsboro" />
                                    <AlternatingRowStyle BackColor="White" />
                                    <HeaderStyle BackColor="#0083C1" ForeColor="White" />
                                    <FooterStyle BackColor="White" />
                                    <Columns>
                                        <asp:TemplateField HeaderText="Task ID" SortExpression="task_id">
                                            <ItemTemplate>
                                                <asp:Label ID="lblTaskID" Text='<%# Eval("task_id") %>' runat="server"></asp:Label>
                                            </ItemTemplate>
                                            <EditItemTemplate>
                                                <asp:Label ID="lblTaskID" Text='<%# Eval("task_id") %>' runat="server"></asp:Label>
                                            </EditItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField HeaderText="Task" SortExpression="task_name">
                                            <ItemTemplate><%# Eval("task_name")%></ItemTemplate>
                                            <EditItemTemplate>
                                                <asp:TextBox ID="txtTask" Text='<%# Eval("task_name")%>' runat="server"></asp:TextBox>
                                            </EditItemTemplate>
                                            <FooterTemplate>
                                                <asp:TextBox ID="txtTask" Text='' runat="server"></asp:TextBox>
                                            </FooterTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField HeaderText="Fiscal Year" SortExpression="fiscal_year">
                                            <ItemTemplate><%# Eval("fiscal_year")%></ItemTemplate>
                                            <EditItemTemplate>
                                                <asp:TextBox ID="txtTaskFiscalYear" Text='<%# Eval("fiscal_year")%>' runat="server"></asp:TextBox>
                                            </EditItemTemplate>
                                            <FooterTemplate>
                                                <asp:TextBox ID="txtTaskFiscalYear" Text='' runat="server"></asp:TextBox>
                                            </FooterTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField HeaderText="Is Active" SortExpression="Active_Flag">
                                            <ItemTemplate><%# Eval("Active_Flag")%></ItemTemplate>
                                            <EditItemTemplate>
                                                <asp:TextBox ID="txtTaskActiveFlag" Text='<%# Eval("Active_Flag")%>' runat="server"></asp:TextBox>
                                            </EditItemTemplate>
                                            <FooterTemplate>
                                                <asp:TextBox ID="txtTaskActiveFlag" Text='' runat="server"></asp:TextBox>
                                            </FooterTemplate>
                                        </asp:TemplateField>
                                        <asp:CommandField HeaderText="Edit" ShowEditButton="True" />
                                        <asp:TemplateField HeaderText="Delete">
                                            <ItemTemplate>
                                                <asp:LinkButton ID="linkDeleteTaskGroup" CommandName="Delete" runat="server">Delete</asp:LinkButton>
                                            </ItemTemplate>
                                            <FooterTemplate>
                                                <asp:LinkButton ID="linkAddTask" CommandName="AddTask" runat="server">Add</asp:LinkButton>
                                            </FooterTemplate>
                                        </asp:TemplateField>
                                    </Columns>
                                </asp:GridView>
                            </div>
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:ObjectDataSource SortParameterName="sortExpression" EnablePaging="true" ID="ObjectDataSource1"
        MaximumRowsParameterName="maxRecords" TypeName="Vipassi.BLL.Classes.TaskGroup.TaskGroupBLL"
        SelectMethod="ListforTaskGroup" SelectCountMethod="ListCountforTaskGroup" StartRowIndexParameterName="startIndex"
        runat="server">
        <SelectParameters>
            <asp:SessionParameter SessionField="orgId" Name="orgId" Type="Int32" />
        </SelectParameters>
    </asp:ObjectDataSource>

</div>

选项1:

可以禁用ASPX页面的VIEWSTATE/User Control:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="~/TaskAndTaskGroup.aspx.cs" Inherits="Vipassi.Web.TaskGroup.TaskAndTaskGroup"  EnableViewState="false"%>

选项2:

您还可以更改源代码,以确保在回发期间添加的控件必须与初始请求期间添加的控件的类型和位置相匹配。

最新更新