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