[英]How to Find the Inner Gridview in a nested GridView via external button click event?
[英]Find nested GridView with Button Click?
我想在單擊按鈕時找到嵌套的GridView gvR
,以便可以向其中添加一行。 我將發布GridView標記,然后發布將行添加到所選嵌套網格的代碼。
<asp:LinkButton ID="btnAdd" runat="server" Text="Add Room"
onclick="btnAdd_Click"></asp:LinkButton>
<asp:GridView ID="gvRP" runat="server" AutoGenerateColumns="false"
onrowdatabound="gvRP_RowDataBound"
onrowediting="gvRP_RowEditing">
<Columns>
<asp:TemplateField HeaderText="Room" ItemStyle-Width="100%">
<ItemTemplate>
<asp:Label runat="server" Text="Room"></asp:Label>
<asp:DropDownList ID="ddlRoom" runat="server" AutoPostBack="True" DataTextField="Name"
DataValueField="Id" AppendDataBoundItems="true" OnSelectedIndexChanged="ddlRoom_SelectedIndexChanged">
<asp:ListItem Value="-1">Select...</asp:ListItem>
</asp:DropDownList>
<asp:Label runat="server" AssociatedControlID="ddlRate" Text="Rate" ID="lblRate"></asp:Label><asp:DropDownList
ID="ddlRate" runat="server" AppendDataBoundItems="true" DataTextField="Name"
DataValueField="Id">
<asp:ListItem Value="-1">Select...</asp:ListItem>
</asp:DropDownList>
<asp:Label runat="server" Text="Adults"></asp:Label>
<asp:TextBox ID="txtAdults" Text='<%#Bind("Adults") %>' runat="server" Width="25px"></asp:TextBox>
<asp:Label runat="server" Text="Children"></asp:Label>
<asp:TextBox ID="txtChildren" Text='<%#Bind("Children") %>' runat="server" Width="25px"></asp:TextBox>
<asp:Label runat="server" Text="Check In"></asp:Label>
<asp:TextBox ID="txtCheckIn" Text='<%#Bind("CheckIn") %>' runat="server" Width="75px"></asp:TextBox>
<asp:Label runat="server" Text="Check Out"></asp:Label>
<asp:TextBox ID="txtCheckOut" Text='<%#Bind("CheckOut") %>' runat="server" Width="75px"></asp:TextBox>
<h3>Rates</h3>
<asp:GridView ID="gvR" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Name" HeaderText="Rate" />
<asp:BoundField DataField="Effective" HeaderText="Effective" />
<asp:BoundField DataField="Expire" HeaderText="Expire" />
<asp:BoundField DataField="Amount" HeaderText="Amount" />
<asp:BoundField DataField="Code" HeaderText="Currency" />
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
添加率代碼:
protected void AddRate(object sender, EventArgs e)
{
lstRateDetails = (List<RateDetail>)ViewState["Rates"];
lstRateDetails.Insert(0, new RateDetail());
//Have no idea what to do here? I have also tried gvRatePlans.TemplateControl...
GridView gvR = (GridView)gvRP.FindControl("gvR");
gvR.DataSource = lstRateDetails;
gvR.DataBind();
ViewState["Rates"] = lstRateDetails;
}
如果gvRP是父網格,而gvR是嵌套網格。 由於嵌套網格包含在容器網格的每一行中,因此我們需要在父網格的行中找到它。 您可以像這樣在第一行中包含嵌套的網格
GridView gvR = (GridView)gvRP.Rows[0].FindControl("gvR");
gvR.DataSource = lstRateDetails;
gvR.DataBind();
我最終要做的是使用LinkButton的NamingContainer
查找選定的gvR
GridView。 這是代碼:
LinkButton lnk = (LinkButton)sender;
lstRateDetails = (List<RateDetail>)ViewState["Rates"];
lstRoomDetails = (List<RoomDetail>)ViewState["Rooms"];
lstRateDetails.Insert(0, new RateDetail());
GridViewRow gvr = (GridViewRow)lnk.NamingContainer;
int selectedRow = gvr.RowIndex;
GridView gvR = (GridView)gvRP.Rows[selectedRow].FindControl("gvR");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.