5

我有一个调用两个子网格的父网格。但由于某种未知的原因,他们被解雇了两次。我似乎无法弄清楚这段代码的问题。谁能指导我?

后端代码(C#):

protected void grdGrpPrntRpt_RowDataBound(object sender,
                                      GridViewRowEventArgs e)
{
    try
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            TextBox litGrp = (TextBox)e.Row.FindControl("litGrp");
            litGrp.Text =
              DataBinder.Eval(e.Row.DataItem, "GroupName").ToString();
            ViewState["GroupName"] = litGrp.Text;
            DataSet ds = (DataSet)ViewState["ds"];
            DataView dv = ds.Tables[3].DefaultView;
            dv.RowFilter = "GroupName='" + litGrp.Text + "'";
            DataTable dt = dv.ToTable();
            GridView gvinner = (GridView)e.Row.FindControl("grdInnerMain");
            gvinner.DataSource = dt;
            gvinner.DataBind();
        }
    }
    catch (Exception Ex)
    {
        //report error
    }
}


protected void grdInnerMain_RowDataBound(object sender,
                                      GridViewRowEventArgs e)
{
    try
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            TextBox litUsr = (TextBox)e.Row.FindControl("litUsr");
            litUsr.Text = 
                DataBinder.Eval(e.Row.DataItem, "FirstName").ToString();
            // string username=
            DataSet ds = (DataSet)ViewState["ds"];
            DataView dv = ds.Tables[3].DefaultView;
            dv.RowFilter = "userName='" +
           DataBinder.Eval(e.Row.DataItem, "UserName").ToString().Replace("'",
               "''") + "' and GroupName='" + ViewState["GroupName"].ToString()
             + "'";
            DataTable dt = dv.ToTable();
            totalPages = 0;
            totalCost = 0;
            GridView gvinner2 = (GridView)e.Row.FindControl("innerGrid");
            gvinner2.DataSource = dt;
            gvinner2.DataBind();
        }
    }

    catch (Exception Ex)
    {
        //report error
    }

}
protected void innerGrid_RowDataBound(object sender,
                              GridViewRowEventArgs e)
{
    try
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataView dv = 
                ((DataSet)ViewState["dspaper"]).Tables[0].DefaultView;
            dv.RowFilter = "paperid=" +
               Convert.ToInt32(DataBinder.Eval(e.Row.DataItem,
                                         "paperid").ToString());
            DataTable dt = dv.ToTable();
            e.Row.Cells[0].Text = dt.Rows[0]["PaperName"].ToString();
            //  e.Row.Cells[2].Text = DataBinder.Eval(e.Row.DataItem, 
     "TotalPagesPrinted").ToString() == "0" ? DataBinder.Eval(e.Row.DataItem, 
       "TotalPagesSent").ToString() : DataBinder.Eval(e.Row.DataItem, 
       "TotalPagesPrinted").ToString();
            e.Row.Cells[2].Text = DataBinder.Eval(e.Row.DataItem, 
       "TotalPage").ToString() == "0" ? DataBinder.Eval(e.Row.DataItem, 
       "Pages_Sent").ToString() : DataBinder.Eval(e.Row.DataItem,
               "TotalPage").ToString();
            // e.Row.Cells[3].Text = 
        Convert.ToDouble(e.Row.Cells[3].Text.ToString()).ToString("0.00");
            totalPages += Convert.ToInt32(e.Row.Cells[2].Text.ToString());
            totalCost += Convert.ToDouble(e.Row.Cells[3].Text.ToString());
            e.Row.Cells[1].Text = DataBinder.Eval(e.Row.DataItem,
                   "Color").ToString() == "0" ? "B & W" : "Color";
        }
        if (e.Row.RowType == DataControlRowType.Footer)
        {
            e.Row.Cells[2].Text = totalPages.ToString();
            e.Row.Cells[3].Text = totalCost.ToString("0.00");
        }
        if (e.Row.RowType == DataControlRowType.Header)
        {
            e.Row.Cells[0].Text = 
                  CResourcesManager.GetString("grdHeaderMediaReport");
            e.Row.Cells[1].Text =
                  CResourcesManager.GetString("grdHeaderColorReport");
            e.Row.Cells[2].Text =
                  CResourcesManager.GetString("grdHeaderPagesReport"); ;
            e.Row.Cells[3].Text = 
                CResourcesManager.GetString("grdHeaderTotalCostReport");
        }
    }
    catch
    { }
}

前端代码:

<asp:GridView Width="100%" ID="grdGrpPrntRpt" runat="server" 
               AutoGenerateColumns="False"
                    CellPadding="0" CellSpacing="2" BorderWidth="0px" 
             ShowHeader="false" RowStyle-HorizontalAlign="Left"
                    OnRowDataBound="grdGrpPrntRpt_RowDataBound">

                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <table id="tblInnerHeader" runat="server"
                                 width="100%" cellspacing="0" cellpadding="0">
                                    <tr bgcolor="gray" valign="top">
                                        <td width="20%" height="30px">
                                            &nbsp;
                                            <asp:TextBox ID="litGrp"
                           ForeColor="White" BackColor="Gray" CssClass="LabelText2"
                                                runat="server" BorderStyle="None" 
                                                   BorderWidth="0"></asp:TextBox>
                                        </td>
                                        <td width="2%">
                                        </td>
                                        <td width="78%" align="left">
                                            <asp:ImageButton ID="imgMainShowHide" 
                                    runat="server" ImageUrl="~/Images/plus.jpg"
                                                OnClick="imgMainShowHide_Click" />
                                        </td>
                                    </tr>
                                </table>
                                <table id="tblFirstInnerGrid" runat="server" 
                             visible="false" width="100%" cellspacing="2"
                                    cellpadding="0">
                                    <tr>
                                        <td align="center">
                                            <asp:GridView Width="100%" 
               ID="grdInnerMain" runat="server" AutoGenerateColumns="False"
                                                CellPadding="0" CellSpacing="2" 
              BorderWidth="0px" ShowHeader="false" RowStyle-HorizontalAlign="Left"

                        OnRowDataBound="grdInnerMain_RowDataBound">
                                                <Columns>
                                                    <asp:TemplateField>
                                                        <ItemTemplate>
                                                            <table id="tblHeader"
                  runat="server" width="100%" cellspacing="0" cellpadding="0">
                                                                <tr bgcolor="Wheat" 
                                                               valign="top">
                                                                    <td width="20%" 
                                                              height="25px">
                                                                        &nbsp;
                                                                        <asp:TextBox 
              ID="litUsr" ForeColor="Blue" BackColor="Wheat" CssClass="LabelText2"

              runat="server" BorderStyle="None" BorderWidth="0"></asp:TextBox>
                                                                    </td>
                                                                    <td width="2%">
                                                                    </td>
                                                                    <td width="78%" 
                                                                      align="left">
                                                                        <asp:ImageButton ID="imgShowHide" runat="server" ImageUrl="~/Images/plus.jpg"
                                               OnClick="imgShowHide_Click" />
                                                                    </td>
                                                                </tr>
                                                            </table>
                                                            <table id="tblInnerGrid" 
                          runat="server" visible="false" width="100%" cellspacing="2"
                                                                cellpadding="0">
                                                                <tr>
                                                                   <td align="center">
                                                                        <asp:GridView 
           ID="innerGrid" runat="server" AutoGenerateColumns="False" CellPadding="0"

       CellSpacing="2" HeaderStyle-CssClass="GridHeaderNoSorting" BorderWidth="0px"

          ShowFooter="true" RowStyle-HorizontalAlign="Left" Width="98%" 
                    OnRowDataBound="innerGrid_RowDataBound">
                                                                            <Columns>
                                                                                <asp:TemplateField>
                                                                                    <ItemTemplate>
                                                                                        <%-- <asp:Label ID="lblMedia" runat="server"></asp:Label>--%>
                                                                                    </ItemTemplate>
                                                                                </asp:TemplateField>
                                                                                <%--<asp:BoundField DataField="Color" HeaderText="Color/ B & W" /> --%>
                                                                                <asp:TemplateField HeaderText="Color/ B & W">
                                                                                    <ItemTemplate>
                                                                                        <%--   <asp:Label ID="lblColor" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"Color").ToString()=="0" ? "B & W" :"Color" %>'></asp:Label>--%>
                                                                                    </ItemTemplate>
                                                                                </asp:TemplateField>
                                                                                <%--<asp:BoundField DataField="TotalPagesPrinted" ItemStyle-HorizontalAlign="Center" />--%>
                                                                                <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center"
                                                                                    FooterStyle-HorizontalAlign="Center">
                                                                                    <ItemTemplate>
                                                                                        <%--<asp:Label ID="lblPagesPrinted" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"Color").ToString()=="0" ? "B & W" :"Color" %>'></asp:Label>--%>
                                                                                    </ItemTemplate>
                                                                                </asp:TemplateField>
                                                                                <asp:BoundField DataField="Total_Cost" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center"
                                                                                    FooterStyle-HorizontalAlign="Center" />
                                                                            </Columns>
                                                                            <HeaderStyle CssClass="GridHeaderNoSorting" />
                                                                            <AlternatingRowStyle CssClass="GridAlternateRowStyle" />
                                                                            <RowStyle CssClass="GridRowStyle" />
                                                                            <FooterStyle CssClass="GridFooter" HorizontalAlign="Left" />
                                                                        </asp:GridView>
                                                                    </td>
                                                                </tr>
                                                            </table>
                                                        </ItemTemplate>
                                                    </asp:TemplateField>
                                                </Columns>
                                                <AlternatingRowStyle CssClass="GridAlternateRowStyle" />
                                                <RowStyle CssClass="GridRowStyle" />
                                            </asp:GridView>
                                        </td>
                                    </tr>
                                </table>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <AlternatingRowStyle CssClass="GridAlternateRowStyle" />
                    <RowStyle CssClass="GridRowStyle" />
                </asp:GridView>

额外的信息

由于某种原因,该事件grdGrpPrntRpt_RowDataBound被调用的次数与下一个网格中的数据一样多。它应该在接下来的两个网格中的全部数据被绑定后立即终止,但它会再次调用它并再次重复整个过程。

4

7 回答 7

3

这可能是由于AutoEventWireUp,在您的代码中可能是正确的。如果是,请将其设为假。谢谢

于 2013-10-25T04:39:51.533 回答
1

检查您是否将 GridView 绑定到其他事件,可能是 Page_Load 或...如果您将 GridView 绑定到 Page_Load,请按以下方式进行:

if (!Page.IsPostBack)
{

//bind your GridView
}
于 2013-10-16T06:05:48.253 回答
1

问题应该只是意味着您以某种方式调用 grdGrpPrntRpt.DataBind() 两次,

您对嵌套 gridview 数据绑定的实现似乎是正确的,所以问题

可能发生在对您的主网格进行数据绑定的事件上。

尝试注释主网格 DataBind 的每一行并将其放在 Page_Load 一次

事件,您可能会遇到另一个问题,但您会更接近解决方案。

于 2013-10-19T03:16:52.223 回答
0

网格的 RowDataBound 触发的次数是网格中存在的行数。

所以请确保您的父网格是否有多个记录..

于 2013-10-25T05:35:22.283 回答
0

我看不出给定的后端代码和前端代码有什么问题。您可以查看此链接以供参考。

于 2013-10-24T21:28:13.380 回答
0

始终检查所有绑定网格或调用网格绑定函数的位置。喜欢:-

您可能已经在 Page_Load 上调用它以第一次绑定,然后您将在 imgMainShowHide_Click 事件中调用它以将其绑定到新值。因此绑定网格两次,因此请确保仅在 Page_Load 上的 !Ispostback 时绑定,并启用 gridview 视图状态以在回发期间保留其状态。

于 2013-10-24T06:51:10.563 回答
-1

请确保您的 html 代码 gridview

 OnRowCreated="gv_RowCreated"

如果您使用的是 vb.net,则将其删除。面临同样的问题。

于 2017-08-18T09:19:56.577 回答