【问题标题】:ASP.NET Formview with paging in nested updatePanels - formview disappears when moving to next pageASP.NET Formview 在嵌套的 updatePanels 中进行分页 - 移动到下一页时 formview 消失
【发布时间】:2019-08-07 12:44:38
【问题描述】:

我有一个页面,用户从下拉列表中选择一个中心,然后在更新面板中显示中心详细信息。每个中心都可以定义一个或多个时间表,所以现在我想添加一个带有分页的 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();
}

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    问题似乎是在前进到导致控件消失的下一条记录时没有数据绑定。我找到了

    protected void fvSchedules_PageIndexChanging(object sender, FormViewPageEventArgs e)
    {
        Debug.WriteLine("e.NewPageIndex: " + e.NewPageIndex);
        fvSchedules.PageIndex = e.NewPageIndex;
        // fvSchedules.DataBind();
    }
    

    会告诉我返回的索引并注释掉数据绑定使控件保持在原位(但当然并没有真正做任何事情)。所以谷歌搜索“Formview 分页不前进”把我带到了这里:Fields not changing in Formview when moving Pagination 这让我走上了正确的轨道。现在我的代码如下所示:

    protected void fvSchedules_PageIndexChanging(object sender, FormViewPageEventArgs e)
    {
        fvSchedules.PageIndex = e.NewPageIndex;
        GetSchedules(CtrID);
    }
    

    GetSchedules 获取数据并绑定到 Formview 控件的位置。到目前为止似乎工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2020-10-06
      相关资源
      最近更新 更多