在子网格视图中分页不起作用

时间:2012-04-02 13:25:13

标签: asp.net gridview

大家好我正在做一个嵌套gridview的程序我的设计如下

<asp:Panel CssClass="grid" ID="pnlCust" runat="server">
    <asp:UpdatePanel ID="pnlUpdate" runat="server">
        <ContentTemplate>
            <asp:GridView AllowPaging="True" ID="gvCustomers" AutoGenerateColumns="False" DataKeyNames="EmpID"
                runat="server" ShowHeader="true" BackColor="White" BorderColor="#DEDFDE" BorderStyle="None"
                BorderWidth="1px" CellPadding="4" ForeColor="Black" GridLines="Vertical" >
                <AlternatingRowStyle BackColor="White" />
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Panel CssClass="group" ID="pnlCustomer" runat="server">
                                <%--<asp:Image ID="imgCollapsible" CssClass="first" ImageUrl="~/Assets/img/plus.png"
                                    Style="margin-right: 5px;" runat="server" /><span class="header">
                                        <%#Eval("EmpID")%>
                                        :
                                        <%#Eval("empname")%>--%>
                                <asp:RadioButton ID="rdbtn" runat="server" onclick="RadioCheck(this);" OnCheckedChanged="radio_changed" Text='<%# Bind("EmpID") %>'
                                    AutoPostBack="true"></asp:RadioButton>
                            </asp:Panel>
                            <asp:Panel Style="margin-left: 20px; margin-right: 20px" ID="pnlOrders" runat="server">
                                <asp:GridView AutoGenerateColumns="false" CssClass="grid" ID="gvOrders" runat="server"
                                    PageSize="1" ShowHeader="true" EnableViewState="false" DataKeyNames="EmpID" AllowPaging="true"
                                    OnPageIndexChanging="gvOrders_PageIndexChanging">
                                    <RowStyle CssClass="row" />
                                    <AlternatingRowStyle CssClass="altrow" />
                                    <Columns>
                                        <asp:BoundField HeaderText="Employee Id" DataField="EmpID">
                                            <ItemStyle HorizontalAlign="Center" Width="100px" />
                                        </asp:BoundField>
                                        <asp:TemplateField ItemStyle-CssClass="rownum">
                                            <ItemTemplate>
                                                <%# Container.DataItemIndex + 1 %>
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField HeaderStyle-BackColor="#EFF1F1" ItemStyle-HorizontalAlign="Center"
                                            ItemStyle-Height="25" HeaderStyle-Width="50" ItemStyle-Width="50">
                                            <HeaderTemplate>
                                                <input id="chkBoxAll" type="checkbox" onclick="checkAllBoxes()" />
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:CheckBox ID="chkBoxChild" runat="server" />
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:BoundField DataField="PayPeriodNumber" HeaderText="PayPeriod" HeaderStyle-BackColor="#EFF1F1"
                                            ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="80" ItemStyle-Width="80">
                                        </asp:BoundField>
                                        <asp:BoundField DataField="PayRollYear" HeaderText="Payroll Year" HeaderStyle-BackColor="#EFF1F1"
                                            ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="100" ItemStyle-Width="100">
                                        </asp:BoundField>
                                        <asp:BoundField DataField="PaymentDate" HeaderText="Payment Date" HeaderStyle-BackColor="#EFF1F1"
                                            ItemStyle-HorizontalAlign="Center" HeaderStyle-Width="110" ItemStyle-Width="110">
                                        </asp:BoundField>
                                    </Columns>
                                </asp:GridView>
                            </asp:Panel>

                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <FooterStyle BackColor="#CCCC99" />
                <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
                <RowStyle BackColor="#F7F7DE" />
                <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
                <SortedAscendingCellStyle BackColor="#FBFBF2" />
                <SortedAscendingHeaderStyle BackColor="#848384" />
                <SortedDescendingCellStyle BackColor="#EAEAD3" />
                <SortedDescendingHeaderStyle BackColor="#575357" />
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Panel>

页面加载

上的图像

enter image description here

选择其中一个单选按钮后,我将显示相应的员工详细信息,如下所示

enter image description here

我已经为gridview编写了如下的分页

 if (!Page.IsPostBack)
 {
    GridViewChildPageIndex();
  }

private void GridViewChildPageIndex()
{
    DataTable dtPageIndex = new DataTable();
    dtPageIndex.Columns.Add("PageIndex", typeof(int));
    for (int i = 0; i < gvCustomers.Rows.Count; i++)
    {
        dtPageIndex.Rows.Add("0");
    }
    Session["ChildPageIndex"] = dtPageIndex;
}

子gridview的寻呼代码如下

protected void gvOrders_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView gvwChild = (GridView)sender;
    //GridViewRow gvRowParent = ((System.Web.UI.WebControls.GridView)sender).Parent as GridViewRow;
    GridViewRow gvRowParent = gvwChild.Parent as GridViewRow;
    gvwChild.PageIndex = e.NewPageIndex;
    if (Session["ChildPageIndex"] != null)
    {
        DataTable dtPageIndex = (DataTable)Session["ChildPageIndex"];
        dtPageIndex.Rows[gvRowParent.RowIndex][1] = e.NewPageIndex; // *I am getting error here as Object reference not set to an Object can any one tell where I went wrong*
    }
    BindChildGrdView(gvCustomers.DataKeys[gvRowParent.RowIndex].Value.ToString(), gvwChild);

}

Stack Trace

at _Default.gvOrders_PageIndexChanging(Object sender, GridViewPageEventArgs e) in d:\Projects\GridView-Collapsible\GridView-Collapsible\Default.aspx.cs:line 54 at System.Web.UI.WebControls.GridView.OnPageIndexChanging(GridViewPageEventArgs e) at System.Web.UI.WebControls.GridView.HandlePage(Int32 newPage) at System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) at System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) at System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

1 个答案:

答案 0 :(得分:4)

这可能会帮助你: 在gvOrders_PageIndexChanging函数中,使用

GridViewRow gvRowParent = gvwChild.Parent.Parent as GridViewRow;

在if条件

if (Session["ChildPageIndex"] != null)
{
    DataTable dtPageIndex = (DataTable)Session["ChildPageIndex"];
    dtPageIndex.Rows[gvRowParent.RowIndex][0] = e.NewPageIndex; // *I am getting error here as Object reference not set to an Object can any one tell where I went wrong*
}

还可以调试并检查gvRowParent是否是此函数第二行中的实例化对象。