bjay tiamsic Ответов: 0

Расширяемый/складной gridview - другие элементы управления rowindex не публикуются обратно


Привет.

Я меня возникли странные проблемы здесь. У меня есть расширяемый gridview. При нажатии на знак плюс строка расширяется и показывает div с ASP.Net элементы управления (некоторые из этих элементов управления имеют обратную передачу) Все работает нормально на индексе строки 0, однако элементы управления других строк не запускают обратную передачу.

Может кто-нибудь помочь?

Вот gridview, я просто положил сюда itemtemplate

<asp:TemplateField HeaderText="Feedback Provided?">
<ItemTemplate>
	
	<span id="feedBackInt"  runat="server" class="d-none"><%# Eval("Feedback_Submitted") %></span>
	<%# StudentNewRow(Eval("TX_NRIC")) %>
	<form action="">
		<asp:UpdatePanel ID="upInnerClaim" runat="server" UpdateMode="Conditional">
			<Triggers>
				<asp:AsyncPostBackTrigger ControlID="txtPeriodFrom" EventName="TextChanged" />
				<asp:AsyncPostBackTrigger ControlID="txtPeriodTo" EventName="TextChanged" />
				<asp:AsyncPostBackTrigger ControlID="drpPeriodChange" EventName="SelectedIndexChanged" />
			</Triggers>
			<ContentTemplate>
				<div class="container-fluid">
					<div class="row">
						<div class="col-4" style="background-color: lightgray">
							<div class="divForm">
								<label class="col-form-label-sm mb-0">Approved Internship Period:</label>
								<p class="text-primary">Only claims within this period will be approved</p>
								<div class="form-group form-inline">
									<asp:Label ID="lblQPeriodFrom" runat="server" Text='<%# Eval("TX_DT_START") %>'></asp:Label>
									<span style="margin: 0px 20px">to</span>
									<asp:Label ID="lblQPeriodTo" runat="server" Text='<%# Eval("TX_DT_END") %>'></asp:Label>
								</div>
							</div>
						</div>
						<div class="col-3">
							<div class="divForm">
								<label class="col-form-label-sm">Is there a change in internship period?</label>
								<div class="form-group">
									<asp:DropDownList ID="drpPeriodChange" runat="server" AutoPostBack="true" CssClass="form-control form-control-sm" OnSelectedIndexChanged="rdoPeriodChange_SelectedIndexChanged">
										<asp:ListItem Selected="True" Text="No" Value="0"></asp:ListItem>
										<asp:ListItem Text="Yes" Value="1"></asp:ListItem>
									</asp:DropDownList>
								</div>
							</div>
						</div>
						<div class="col">
							<div class="d-none" id="divPeriod" runat="server">
								<label for="txtPeriodFrom" class="col-form-label-sm">Internship Period:</label>
								<div class="form-group form-inline" style="margin-bottom:0px">
									
									<asp:TextBox ID="txtPeriodFrom" runat="server" Text='<%# Eval("DT_INTERNSHIP_START") %>' class="form-control form-control-sm" AutoPostBack="true" OnTextChanged="txtInternshipPeriod_TextChanged"></asp:TextBox>
									<ajax:CalendarExtender ID="calexDateFrom" runat="server" TargetControlID="txtPeriodFrom" Format="dd/MM/yyyy" />

									
									<span style="margin: 0px 20px">to</span>
									<asp:TextBox ID="txtPeriodTo" runat="server" Text='<%# Eval("DT_INTERNSHIP_END") %>' class="form-control form-control-sm" AutoPostBack="true" OnTextChanged="txtInternshipPeriod_TextChanged"></asp:TextBox>
									<ajax:CalendarExtender ID="calexDateTo" runat="server" TargetControlID="txtPeriodTo" Format="dd/MM/yyyy" />

								</div>
							   
								
							</div>
						</div>

					</div>



Вот мой SelectedIndexChange из выпадающего списка

protected void rdoPeriodChange_SelectedIndexChanged(object sender, EventArgs e)
        {
            var rdoSender = (DropDownList)sender;
            GridViewRow gvRowContainer = (GridViewRow)rdoSender.Parent.Parent.Parent.Parent;

            HtmlGenericControl divPeriod = (HtmlGenericControl)gvRowContainer.FindControl("divPeriod");

            var classes = divPeriod.Attributes["class"].Split(' ');

            if (rdoSender.SelectedValue=="0")
            {
                var updated = classes.Where(x => x != "d-block").ToArray();
                divPeriod.Attributes["class"] = string.Join(" ", updated);
            }
            else
            {
                var updated = classes.Where(x => x != "d-none").ToArray();
                divPeriod.Attributes["class"] = string.Join(" ", updated);
                
            }
        }


Что я уже пробовал:

Вот это изображение
Изображение GridView

Я действительно пытался поставить трассировку стека, точки останова работают на индексе строки 0, но это не делает на другом индексе строки

Gerry Schmitz

Вы должны смотреть на то, что происходит на странице (исходное представление), а не на то, что вы думаете, что отправляете.

0 Ответов