2

我正在使用嵌套网格视图,其中网格视图中的每一行都有子网格视图。我正在使用父 GridView 的 RowDataBound 事件来绑定子 GridView。我的问题是,如何在 Parent gridViews RowDataBound 事件中获取 Child GridView 的 Button findcontrol 值。

这是我的 Aspx 页面

         <asp:GridView ID="grdSubClaimOuter" SkinID="GridView" runat="server" Width="100%"
                    AutoGenerateColumns="false" OnRowDataBound="grdSubClaimOuter_RowDataBound" OnRowCommand="grdSubClaimOuter_RowCommand"
                    ShowFooter="false" AllowPaging="true" OnPageIndexChanging="grdSubClaimOuter_PageIndexChanging">
                    <%--<AlternatingRowStyle BackColor="ButtonFace" />--%>
                    <Columns>
                        <asp:TemplateField ItemStyle-Width="5%">
                            <ItemTemplate>
                                <asp:HiddenField ID="hdnClaimNo" runat="server" Value='<%# Eval("ClaimNo") %>' />
                                <asp:Image runat="server" ID="img1" ImageUrl="../images/Collapse_plus.png" />
                            </ItemTemplate>
                            <ItemStyle Width="5%"></ItemStyle>
                        </asp:TemplateField>
              <asp:GridView ID="grdSubClaim" runat="server" SkinID="GridView" CellPadding="4" Width="100%"
                                    AutoGenerateColumns="false" ShowFooter="false" OnRowEditing="grdSubClaim_RowEditing"
                                    OnRowCommand="grdSubClaim_RowCommand" OnRowDeleting="grdSubClaim_RowDeleted" 
                                    AllowPaging="false" >
                                    <%--SkinID="GridView"--%>
                                    <Columns>
                                        <asp:TemplateField FooterStyle-HorizontalAlign="Left" HeaderStyle-HorizontalAlign="Left">
                                            <HeaderTemplate>
                                                Sub Claim No
                                            </HeaderTemplate>
                                            <ItemTemplate>
                                                <asp:Label ID="lblSubClaimNoValue" Width="" runat="server" Text='<%#Eval("SubClaimNo")%>'></asp:Label>
                                            </ItemTemplate>
                                            <FooterStyle HorizontalAlign="Left" />
                                        </asp:TemplateField>
           <asp:Button ID="btnSubrogation" CssClass="groovybutton" runat="server" CommandName="Subrogation"
                                                    Text="Subrogation" CommandArgument='<%# Eval("ClaimNo") + "~" + Eval("SubClaimNo")%>' />
                                                <asp:Button ID="btnSalvage" CssClass="groovybutton" runat="server" CommandName="Salvage"
                                                    Text="Salvage" CommandArgument='<%# Eval("ClaimNo") + "~" + Eval("SubClaimNo")%>' />
                                            </ItemTemplate>
                                        </asp:TemplateField>
                                    </Columns>
                                    <AlternatingRowStyle CssClass="" />
                                    <RowStyle CssClass="ob_gBody" />
                                    <HeaderStyle CssClass="gridHeader" />
                                </asp:GridView>
                                <asp:Literal runat="server" ID="Literal2" Text="</td></tr>" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>

这是我的 aspx.cs 文件

 protected void grdSubClaimOuter_RowDataBound(object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (e.Row.Cells[1].Text.ToString() != "&nbsp;")
        {
            Literal ltrChild = (Literal)e.Row.FindControl("ltrChild");
            System.Web.UI.WebControls.Image img = (System.Web.UI.WebControls.Image)e.Row.Cells[0].FindControl("img1");

            ltrChild.Text = ltrChild.Text.Replace("trChildGrid", "trChildGrid" + e.Row.RowIndex.ToString());
            string strChildGrid = "trChildGrid" + e.Row.RowIndex.ToString();
            e.Row.Cells[0].Attributes.Add("OnClick", "OpenTable('" + strChildGrid + "','" + img.ClientID + "')");
            e.Row.Cells[0].RowSpan = 1;
            System.Web.UI.WebControls.GridView gvChild = (System.Web.UI.WebControls.GridView)e.Row.FindControl("grdSubClaim");
            PolicyProcessor.DAL.Claim.ClaimSubClaim objDALClaimSubClaim = new PolicyProcessor.DAL.Claim.ClaimSubClaim();
            PolicyProcessor.BOL.Claim.ClaimSubClaim objInfoClaimSubClaim = new PolicyProcessor.BOL.Claim.ClaimSubClaim();
            HiddenField hdnClaimNo = (HiddenField)e.Row.FindControl("hdnClaimNo");

            if (hdnClaimNo.Value != "")
            {
                objInfoClaimSubClaim.ClaimNo = hdnClaimNo.Value;
            }
            else
            {
                objInfoClaimSubClaim.ClaimNo = "0";
            }

            DataSet dsChild;
            dsChild = objDALClaimSubClaim.ResultSet(objInfoClaimSubClaim, "SelectInnerGrid");
            if (dsChild.Tables[0].Rows.Count > 0)
            {


                Button btn = (Button)gvChild.FindControl("btnSalvage");

           //btn is null how to get text value in btn

                btn.ForeColor = System.Drawing.Color.Red;


                gvChild.DataSource = dsChild;
                gvChild.DataBind();

            }
            else
            {
                Helper.EmptyGrid(gvChild, dsChild.Tables[0]);
            }

        }

    }
}

如果有人知道,请帮我解决这个问题。提前谢谢。

4

2 回答 2

6

首先获取对子 GridView 的引用,然后使用 FindControl 获取其中的 Button:

foreach (GridViewRow row in grdSubClaimOuter.Rows) 
{
if (row.RowType == DataControlRowType.DataRow) 
{
    GridView gvChild = (GridView) row.FindControl("grdSubClaim");
    // Then do the same method for Button control column 
    if (gvChild != null)
    {
        foreach (GridViewRow row in gvChild .Rows) 
        {
            if (row.RowType == DataControlRowType.DataRow) 
            {
                Button btn = (Button ) row.FindControl("buttonID");
                if (btn != null )
                {
                    // do your work
                }
            }
        }
    }
}
}
于 2012-08-25T07:20:51.773 回答
0

如果您想要父网格的数据绑定事件中的值,请使用任何一种方式

1)您还可以使用您的 dsChild(您的数据集)并获取您为按钮绑定的字段值。

2) 绑定子网格后从 gvChild 获取按钮的值。

无需循环进入父子网格。

于 2012-12-10T11:45:27.030 回答