2

グリッドビューの各行に子gridViewがあるネストされたGridViewを使用しています。親GridViewのRowDataBoundイベントを使用して、子GridViewをバインドしています。私の問題は、親のgridViewsRowDataBoundイベントで子GridViewのButtonfindcontrol値を取得する方法です。

これは私の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 を使用してその中のボタンを取得します。

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 に答える