c# - Gridview 被调用两次

标签 c# asp.net gridview

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

后端代码(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 被调用的次数与下一个网格中的数据一样多。它应该在接下来的两个网格中的全部数据被绑定(bind)后立即终止,但它会再次调用它并再次重复整个过程。

最佳答案

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

关于c# - Gridview 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19396191/

相关文章:

c# - 关于 TreeView 中 BFS 或 DFS 递归的混淆

asp.net - MVC 3 搜索路径

asp.net - .Net 中的后台处理 - 需要建议

asp.net - 固定宽度网站中的网格列过多

android - 带有 ExpandableHeightGridView 的 ScrollView 不滚动

c# - 如何将指针从 C# 传递到 DLL 中的 native 函数?

c# - 如何在从 Soap 客户端调用 ASP.Net Web 服务时保留 session

c# - 当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'userlogins' 中为标识列插入显式值?

android - ActionBar 覆盖 GridView 填充或自定义 GridView 以显示整个第一张图片?

c# - 如何在 C# 中使用 RANSAC 过滤 OpenSURF 无效匹配