C# 不使用寻呼机的asp.net水平滚动

C# 不使用寻呼机的asp.net水平滚动,c#,asp.net,C#,Asp.net,显示如何将水平滚动添加到我的网格 问题是它还会在自动生成的寻呼机上滚动。 我可以制作外置寻呼机,但肯定有更好的解决方案吗 问题是:是否有一种简单的方法可以使我的gridview水平滚动,而不使寻呼机滚动。另一种更简单的解决方案: 创建一个空表并给它一个id。在我的例子中,customPager 为您的默认GridView页面提供一个css样式您只需要一个没有css编码的名称 在您的aspx(标题部分)中包含jquery 您可以看到下面的两行脚本。。。这些将默认分页移动到您放置自定义分页器的外部

显示如何将水平滚动添加到我的网格

问题是它还会在自动生成的寻呼机上滚动。

我可以制作外置寻呼机,但肯定有更好的解决方案吗


问题是:是否有一种简单的方法可以使我的gridview水平滚动,而不使寻呼机滚动。

另一种更简单的解决方案:

  • 创建一个空表并给它一个id。在我的例子中,customPager
  • 为您的默认GridView页面提供一个css样式您只需要一个没有css编码的名称
  • 在您的aspx(标题部分)中包含jquery
  • 您可以看到下面的两行脚本。。。这些将默认分页移动到您放置自定义分页器的外部
  • 这是我能制作的最简单的。。。希望它能帮助

        <table id="customPager">
    
        </table>
        <hr />
            <div id="dvGridView" style="height: 200px;overflow:scroll;">
            <asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="5">
                <PagerSettings Position="Top" />
                <PagerStyle CssClass="pagerStyle" />
            </asp:GridView>
        </div>
        <script>
            $('#customPager').html($('.pagerStyle').html());
            $('.pagerStyle').html('');
        </script>
    
    
    
    $('#customPager').html($('.pagerStyle').html()); $('.pagerStyle').html('');
    erich007给出了一个非常有趣的答案,这可能是正确的选择,但我没有;我没有时间测试它

    以下方法对我有效:

    引述:

    扩展GridView以使用新的DataPager控件

    Dave Marini |出版日期:2008年3月19日 Technorati标记:ASP.NET、C#

    最近,我读了Scott Mitchell的一篇文章,介绍了.NET Framework 3.5版中包含的新ListView和DataPager控件。这让我对如何适应其他众所周知的数据绑定控件(如GridView)感到好奇,以便它们可以与DataPager控件一起工作。在对GridView控件进行了一些轻松的阅读和深入的思考之后,我有了一个游戏计划,准备开始了。扩展数据绑定控件以允许与DataPager控件进行通信并不太困难,但它假定您已经了解了数据是如何绑定到控件的。但是,既然GridView内置了自己的分页控件,为什么还要费心这么做呢?首先,能够将寻呼机与网格分离可以让我们做一些非常酷的事情。我能想到的一件事是将GridView放在左栏中,将分页控件放在主窗口的某个位置。此外,我们还可以有一个带有两个寻呼机的网格。无论我们使用哪个页面浏览数据,每个页面都始终跟踪当前页面。最后,与GridView本身的模板控件相比,pager的模板控件非常强大

    让我们从数据绑定控件如何与DataPager通信开始。DataPager控件可以连接到任何实现位于System.Web.Extensions程序集中的IPageableItemContainer接口的控件。下面是由.NET Reflector提供的界面外观的快速快照:

    public interface IPageableItemContainer
    {
        //Events
        event EventHandler<PageEventArgs> TotalRowCountAvailable;
        // Methods
        void SetPageProperties(int startRowIndex, int maximumRows, bool databind);
        // Properties
        int MaximumRows { get; }
        int StartRowIndex { get; }
    }
    
    首先调用基本控件的CreateChildControls方法,因为网格使用它实际执行数据绑定。如果没有任何数据要绑定,就没有理由通知寻呼机,因此我们检查以确保有数据,然后通过上述过程确定源中的行数。最后,我们使用派生数据触发事件,然后返回原始结果,以免影响可能依赖它的任何其他操作。我们现在有了一个GridView,它可以与新的DataPager控件相结合。下面是一个标记示例,我们将使用它在页面上同时使用这些控件:

    <asp:DataPager ID="DataPager1" runat="server" PageSize="2" PagedControlID="grid2">
        <Fields>
            <asp:NextPreviousPagerField />
        </Fields>
    </asp:DataPager>
    
    <custom:pageablegridview id="grid2" runat="server" autogeneratecolumns="true" allowpaging="true"
            onpageindexchanging="grid2_PageIndexChanging" />
    
    
    

    请注意,我不必指定GridView的PageSize属性,因为DataPager上的PageSize属性将控制该值。为了确保这一点,我们可以在网格上隐藏PageSize属性,但这就足够了。这就是它的全部。对于新创建的绑定到数据的服务器控件,进行这些访问以允许您的控件使用DataPager非常简单。对于现有控件,如GridView,只需知道绑定是如何发生的,然后将功能注入到您知道所需值将存在的某个地方。

    按Id或类名查找寻呼机,并使用css将其溢出属性设置为隐藏。这很困难,因为GridView呈现在表上,所以所有这些值都会一起移动,您不能在div上放置一些行。您可以做的是提取寻呼机行并将其放置在桌子外面的div中,滚动条的外面。为此,你需要使用jQuery来避免大量额外的代码。这是一些有趣的想法,但没有实用的js/jq/css知识,我有点被困在这里。你的技巧看起来很棒,但不幸的是,我会在几分钟前找到一个解决方案并实现
    //Gets row count from SqlDataSource and the like...
    private int _GetTotalRowsFromDataSourceObject(IEnumerable dataSource)
    {
        DataSourceView view = this.GetData(); if (AllowPaging && view.CanPage && view.CanRetrieveTotalRowCount)
            return base.SelectArguments.TotalRowCount;
        else
            return (PageIndex * PageSize) + _GetSourceCount(dataSource);
    }
    //Gets the row count from a manually bound source or from a source in viewstate
    private int _GetSourceCount(IEnumerable dataSource)
    {
        ICollection source = dataSource as ICollection;
        return source != null ?
             source.Count :
             (from x in dataSource.OfType<object>() select 1).Sum();
    }
    
    protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
       {
           int baseResult = base.CreateChildControls(dataSource, dataBinding);
           if (dataSource != null)
           {
               int dataSourceCount = (IsBoundUsingDataSourceID && dataBinding) ?
                   _GetTotalRowsFromDataSource(dataSource) :
                   _GetSourceCount(dataSource);
               OnTotalRowCountAvailable(new PageEventArgs(StartRowIndex, MaximumRows, dataSourceCount));
           }
           return baseResult;
       }
    
    <asp:DataPager ID="DataPager1" runat="server" PageSize="2" PagedControlID="grid2">
        <Fields>
            <asp:NextPreviousPagerField />
        </Fields>
    </asp:DataPager>
    
    <custom:pageablegridview id="grid2" runat="server" autogeneratecolumns="true" allowpaging="true"
            onpageindexchanging="grid2_PageIndexChanging" />