Как получить доступ к выпадающему списку внутри gridview внутри управления ретранслятором
Я разрабатываю веб-приложение для выставления счетов в отелях в качестве своего последнего проекта года. Я использую repeater control, чтобы показать все таблицы в одном месте, и в этом я использую gridview, который имеет выпадающий список для выбора элемента. Теперь проблема, с которой я сталкиваюсь, заключается в том, что я могу получить только информацию о первом элементе gridview ретранслятора, а второй не даст никаких данных.
Ниже приведен код, который я использую для получения сведений об элементе в выпадающем списке selected index changed event, а также разметка aspx: некоторые скриншоты, показывающие макет:
Нажмите, чтобы просмотреть макет
Что я уже пробовал:
protected void GetItemDetails(object sender, EventArgs e) { foreach(RepeaterItem rptrItems in rptrTables.Items) { GridView gvItems = (GridView)rptrTables.Items[0].FindControl("grdOrder"); foreach (GridViewRow row in gvItems.Rows) { DropDownList ddl = sender as DropDownList; Control ctrl = row.FindControl("drpItemName") as DropDownList; if (ctrl != null) { DropDownList ddl1 = (DropDownList)ctrl; if (ddl.ClientID == ddl1.ClientID) { Label UnitPrice = row.FindControl("lblUnitPrice") as Label; Label QTTY = row.FindControl("lblQuantity") as Label; Label UPrice = row.FindControl("lblUnitPrice") as Label; Label LINETOTAL = row.FindControl("lblLineTotal") as Label; SqlConnection conn = new SqlConnection(constring); conn.Open(); if (ctrl != null) { if ((ddl1.ID == ddl.ID) && (ddl1.SelectedIndex == ddl.SelectedIndex)) { string str = "select * from ItemMaster where ItemName='" + ddl1.SelectedItem.ToString() + "'"; SqlCommand com = new SqlCommand(str, conn); SqlDataReader reader = com.ExecuteReader(); while (reader.Read()) { UnitPrice.Text = reader["UnitPrice"].ToString(); QTTY.Text = reader["Quantity"].ToString(); ; decimal totamt = Convert.ToDecimal(QTTY.Text) * Convert.ToDecimal(UnitPrice.Text); } reader.Close(); conn.Close(); } else { ScriptManager.RegisterStartupScript(this, this.GetType(), "swal", "swal('Item already selected, you can increase the quantity instead!', 'Happy Cakes, Vijayapura', 'warning');", true); } } } } } } } <pre lang="HTML"><pre><asp:Repeater ID="rptrTables" runat="server" OnItemDataBound="rptrTables_ItemDataBound"> <ItemTemplate> <div class="col-md-6"> <div class="card card-info"> <div class="card-header with-border"> <h3 class="card-title"><asp:Label ID="lblTableNumber" runat="server" Text='<%# Eval("TableName") %>'></asp:Label></h3> <div class="card-tools"> <button type="button" class="btn btn-tool" data-widget="collapse">class="fa fa-minus"></button> </div> </div> <div class="card-body"> <div class="row"> <div class="col-md-12"> <div class="form-group"> <asp:GridView ID="grdOrder" runat="server" AutoGenerateColumns="false" AllowPaging="true" CssClass="table table-bordered table-hover table-responsive" GridLines="None" PageSize="10" OnRowDataBound="gvRowDataBound"> <Columns> <asp:CommandField ShowDeleteButton="true" ControlStyle-CssClass="btn btn-danger fa fa-trash" DeleteText="" HeaderText="Remove" /> <asp:BoundField DataField="RowNumber" HeaderText="Sl. No." /> <asp:TemplateField HeaderText="Item Name"> <ItemTemplate> <asp:DropDownList ID="drpItemname" runat="server" CssClass="form-control select2" OnSelectedIndexChanged="GetItemDetails" AutoPostBack="true"></asp:DropDownList> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Price"> <ItemTemplate> <asp:Label ID="lblUnitPrice" runat="server" Text='<%# Eval("UnitPrice")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Qty"> <ItemTemplate> <asp:Label ID="lblQuantity" runat="server" Text='<%# Eval("Quantity")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Line Total"> <ItemTemplate> <asp:Label ID="lblLineTotal" runat="server" Text="0"></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Add Item" ConvertEmptyStringToNull="False"> <ItemTemplate> <asp:Button ID="ButtonAdd" runat="server" CssClass="btn btn-primary" Text="Add" OnClick="AddItem" CausesValidation="False" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </div> </div> </div> <div class="card-footer"> <div class="pull-right"> <asp:Button ID="btnSubmit" runat="server" CausesValidation="false" TabIndex="2" CssClass="btn btn-primary" Text="Print KOT" /> <asp:Button ID="Button1" runat="server" CausesValidation="false" TabIndex="2" CssClass="btn btn-primary" Text="Print Final Bill" /> <asp:Button ID="Button2" runat="server" CausesValidation="false" TabIndex="2" CssClass="btn btn-primary" Text="Complete Order" /> </div> </div> </div> </div> </ItemTemplate> </asp:Repeater>