c# - 当数据源中只有 1 项时,FormView 不显示 PagerTemplate

标签 c# asp.net datasource formview pagertemplate

我有一个 FormView 控件,其中带有自定义 PagerTemplate 和我自己的分页 LinkBut​​ton。一切都很好,直到我加载的数据集仅包含一个记录/项目并完全隐藏 PagerTemplate。我在网上搜索并找到了几个答案,只需添加:

protected void fvAppHMDA_PreRender(object sender, EventArgs e)
    {
        if (fvAppHMDA.TopPagerRow != null)
            fvAppHMDA.TopPagerRow.Visible = true;
    }

但是,这并没有带来任何影响。看来当数据集中只有一条记录时,FormView.TopPagerRow 始终为空。似乎需要有一种方法来拦截它,但我已经尝试在 OnPreRender 和 OnDataBound 事件中执行此操作,但仍然没有骰子。

下面是我的代码示例(如果有帮助的话):

ASPX

<asp:FormView ID="fvAppHMDA" runat="server" AllowPaging="True" DefaultMode="Edit" DataSourceID="dsLoanApplication" Width="100%" onpageindexchanging="fvAppHMDA_PageIndexChanging" OnDataBound="fvAppHMDA_DataBound" OnPageIndexChanged="fvAppHMDA_PageIndexChanged" OnItemCreated="fvAppHMDA_ItemCreated" DataKeyNames="ApplicationID" OnPreRender="fvAppHMDA_PreRender">
<PagerTemplate>
    <div class="tab_toolbar">
        <asp:LinkButton ID="lnkMoveFirst" runat="server" 
            ToolTip="Move to the First Application" CommandName="Page" 
            CommandArgument="First"><img src="images/icons/Icon_ArrowBackEnd.png" width="16" height="16" class="grid2" alt="Move to the First Application" /></asp:LinkButton>
        <asp:LinkButton ID="lnkMovePrevPage" runat="server" 
            ToolTip="Move to the Previous Page" CommandName="Page" 
            onclick="lnkMovePrevPage_Click" Enabled="False"><img src="images/icons/Icon_ArrowBackSkip.png" width="16" height="16" class="grid2" alt="Move to the Previous Page" /></asp:LinkButton>
        <asp:LinkButton ID="lnkMovePrevApp" runat="server" 
            ToolTip="Move to the Previous Application" CommandName="Page" 
            CommandArgument="Prev"><img src="images/icons/Icon_ArrowBack.png" width="16" height="16" class="grid2" alt="Move to the Previous Application" /></asp:LinkButton>
        <div class="grid2_container"><asp:TextBox ID="txtMoveNumber" runat="server" Text="0" Columns="5"></asp:TextBox> of <asp:Label ID="lblMoveTotal" runat="server" Text="0"></asp:Label></div>
        <asp:LinkButton ID="lnkMoveNextApp" runat="server" 
            ToolTip="Move to the Next Application" CommandName="Page" 
            CommandArgument="Next"><img src="images/icons/Icon_ArrowForward.png" width="16" height="16" class="grid2" alt="Move to the Next Application" /></asp:LinkButton>
        <asp:LinkButton ID="lnkMoveNextPage" runat="server" 
            ToolTip="Move to the Next Page" CommandName="Page" 
            onclick="lnkMoveNextPage_Click" Enabled="False"><img src="images/icons/Icon_ArrowForwardSkip.png" width="16" height="16" class="grid2" alt="Move to the Next Page" /></asp:LinkButton>
        <asp:LinkButton ID="lnkMoveLast" runat="server" 
            ToolTip="Move to the Last Application" CommandName="Page" 
            CommandArgument="Last"><img src="images/icons/Icon_ArrowForwardEnd.png" width="16" height="16" class="grid2" alt="Move to the Last Application" /></asp:LinkButton>
    </div>
</PagerTemplate>
<PagerSettings Mode="NextPreviousFirstLast" Position="Top" />
<EditItemTemplate>
    <!-- FORM CONTROLS HERE -->
</EditItemTemplate>

代码隐藏

protected void fvAppHMDA_PreRender(object sender, EventArgs e)
{
if (fvAppHMDA.TopPagerRow != null)
    fvAppHMDA.TopPagerRow.Visible = true;
}

protected void fvAppHMDA_DataBound(object sender, EventArgs e)
{
if (fvAppHMDA.DataItemCount != 0)
{
    // Update Current and Total Page
    ((Label)fvAppHMDA.TopPagerRow.FindControl("lblMoveTotal")).Text = fvAppHMDA.PageCount.ToString();
    ((TextBox)fvAppHMDA.TopPagerRow.FindControl("txtMoveNumber")).Text = (fvAppHMDA.PageIndex + 1).ToString();

    // Enable/Disable Page buttons based on Current Page
    if (fvAppHMDA.PageIndex + 1 == fvAppHMDA.PageCount)
    {
        ((LinkButton)fvAppHMDA.TopPagerRow.FindControl("lnkMoveLast")).Enabled = false;
        ((LinkButton)fvAppHMDA.TopPagerRow.FindControl("lnkMoveNextApp")).Enabled = false;
    }
    else if (fvAppHMDA.PageIndex == 0)
    {
        ((LinkButton)fvAppHMDA.TopPagerRow.FindControl("lnkMoveFirst")).Enabled = false;
        ((LinkButton)fvAppHMDA.TopPagerRow.FindControl("lnkMovePrevApp")).Enabled = false;
    }

    if (fvAppHMDA.PageIndex + 10 <= fvAppHMDA.PageCount - 1)
    {
        ((LinkButton)fvAppHMDA.TopPagerRow.FindControl("lnkMoveNextPage")).Enabled = true;
    }
    if (fvAppHMDA.PageIndex - 10 > -1)
    {
        ((LinkButton)fvAppHMDA.TopPagerRow.FindControl("lnkMovePrevPage")).Enabled = true;
    }

    fvAppHMDA.TopPagerRow.Cells[0].Visible = true;
}

if (fvAppHMDA.TopPagerRow != null)
    fvAppHMDA.TopPagerRow.Visible = true;
}

谢谢!

最佳答案

尝试过这个http://forums.asp.net/t/1016811.aspx/1这对我来说效果很好。如果您想要顶部寻呼机行,我想 HeaderTemplate 也可以。

“在我设置的 FormView 标记中:

AllowPaging="true"

PagerSettings-Visible="false"

然后我将所有用于分页的控件放在 FormView 的 FooterTemplate 中。通过这种方式,我仍然能够处理所有分页事件,并且即使数据源中只返回一条记录,“分页行”也始终可见。”

关于c# - 当数据源中只有 1 项时,FormView 不显示 PagerTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409173/

相关文章:

c# - 在 C# 中,如何检查 File.Delete() 是否会在不尝试的情况下成功?

c# - JavaScript 和 C# 兼容的密码哈希

c# - 具有延迟更新的 Visual Studio 绘图装饰

c# - 关于SQL函数GETDATE()的问题

c# - 我在哪里可以找到同时遵守 OOP 原则和 SOLID 原则的代码示例?

php - 使用无扩展名 URL 的优点是什么?

ios - 在 Swift 中将数据源分离到另一个类,然后处理数据更改

c# - 使用 CodeDom 分析代码结构?

java - 如何改进 ListGrid 服务器连接/数据源的 SmartGWT LGPL 实现?

database - 在 IntelliJ IDEA 中通过两个 ssh 隧道连接数据库