[英]ASP.NET Formview with paging in nested updatePanels - formview disappears when moving to next page
我有一个页面,用户可以从下拉菜单中选择一个中心,然后在updatePanel中显示中心详细信息。 每个中心可以定义一个或多个时间表,因此现在我想添加一个带有页面调度的Formview控件,该控件将允许用户浏览时间表。 时间表将在自定义表中呈现,因此诸如gridview,repeater等控件不是选项。 我在下面显示的Formview代码基于我发现的示例,并且只是为了使基础知识起作用(这不是所需的最终结果)。
选择一个中心,一切都很好。 将显示中心详细信息,以及时间表Formview和页面选择器。 问题是,当我单击分页选择器移至另一个计划时,计划Formview消失了。 如果我从下拉菜单中选择另一个中心,则会显示新的中心详细信息以及时间表Formview,该表单现在显示我在消失之前选择的记录(我应该注意,现在我只是在使用一些虚拟数据时间表对于所有中心都相同;最终,时间表数据将特定于所选中心)。
<div class="form-group row">
<label for="drpCenters" class="col-sm-2 col-form-label font-weight-bold">Select Center:</label>
<div class="col-sm-10">
<asp:DropDownList ID="drpCenters" CssClass="form-control input-sm" runat="server" AutoPostBack="true" OnSelectedIndexChanged="drpCenters_SelectedIndexChanged"></asp:DropDownList>
</div>
</div>
<asp:UpdatePanel ID="pnlCenter" runat="server" updatemode="Conditional">
<ContentTemplate>
<div id="divCenter" style="display:none;">
<table class="table table-bordered table-sm" style="width:auto;">
<tr>
<th style="text-align:right;">Center Name: </th>
<td><asp:Label ID="lblCtrName" runat="server" Text=""></asp:Label></td>
</tr>
<tr>
<th style="text-align:right;">Center Phone: </th>
<td><asp:Label ID="lblCtrPhone" runat="server" Text=""></asp:Label></td>
</tr>
<tr>
<th style="text-align:right;">Center Email: </th>
<td><asp:Label ID="lblCtrEmail" runat="server" Text=""></asp:Label></td>
</tr>
<tr>
<th style="text-align:right;">Center Director: </th>
<td><asp:Label ID="lblDirector" runat="server" Text=""></asp:Label></td>
</tr>
</table>
</div>
<asp:UpdatePanel ID="pnlSchedules" runat="server" updatemode="Conditional">
<ContentTemplate>
*** this disappears when a record is selected from the paging selector
<asp:FormView ID="fvSchedules" runat="server" AllowPaging="true" datakeynames="ctrID" OnPageIndexChanging="fvSchedules_PageIndexChanging">
<HeaderTemplate>
Schedule
</HeaderTemplate>
<HeaderStyle
BackColor="DarkBlue"
ForeColor="AliceBlue"
BorderColor="DarkOrange"
BorderStyle="None"
BorderWidth="2"
Font-Size="Medium"
Font-Italic="false"
Font-Bold="true"
Height="35"
HorizontalAlign="Center"
/>
<ItemTemplate>
<b>ID:</b> <i><%# Eval("ctrID") %></i>
<br />
<b>Center:</b> <i><%# Eval("ctrName") %></i>
</ItemTemplate>
<RowStyle
BackColor="DodgerBlue"
ForeColor="AliceBlue"
/>
<PagerSettings Mode="NumericFirstLast" FirstPageText="First" LastPageText="Last" />
<PagerStyle BackColor="DarkBlue" ForeColor="AliceBlue" />
</asp:FormView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="fvSchedules" EventName="PageIndexChanged" />
</Triggers>
</asp:UpdatePanel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="drpCenters" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>
Formview分页的代码如下:
protected void fvSchedules_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
fvSchedules.PageIndex = e.NewPageIndex;
fvSchedules.DataBind();
}
有关如何解决此问题的任何想法?
问题似乎是,前进到下一个记录时没有数据绑定,从而导致控件消失。 我发现
protected void fvSchedules_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
Debug.WriteLine("e.NewPageIndex: " + e.NewPageIndex);
fvSchedules.PageIndex = e.NewPageIndex;
// fvSchedules.DataBind();
}
会向我显示返回的索引并注释掉数据绑定,使控件保留在原处(但当然并没有做任何事情)。 因此,对“ Formview分页不前进”的谷歌搜索将我带到了这里: 移动分页时,Formview中的字段没有改变,这使我走上了正确的轨道。 现在我的代码如下:
protected void fvSchedules_PageIndexChanging(object sender, FormViewPageEventArgs e)
{
fvSchedules.PageIndex = e.NewPageIndex;
GetSchedules(CtrID);
}
GetSchedules在哪里获取数据并绑定到Formview控件。 到目前为止似乎工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.