GridView 控件中使用 LinqDataSource 和分页的总行数
Posted
技术标签:
【中文标题】GridView 控件中使用 LinqDataSource 和分页的总行数【英文标题】:Total row count in GridView control using LinqDataSource and paging 【发布时间】:2010-09-06 20:42:14 【问题描述】:我在获取使用 Paging 并使用 LinqDataSource 作为数据源的 Gridview 中显示的项目的总行数时遇到问题。
我尝试了几种方法:
protected void GridDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e)
totalLabel.Text = e.TotalRowCount.ToString();
每次都返回 -1。
protected void LinqDataSource1_Selected(object sender, LinqDataSourceStatusEventArgs e)
System.Collections.Generic.List<country> lst = e.Result as System.Collections.Generic.List<country>;
int count = lst.Count;
只给我当前页面的计数,而不是总数。
还有其他建议吗?
【问题讨论】:
【参考方案1】:在这些事件中返回的 LinqDataSourceEventArgs 在这些情况下返回 -1:
-1 如果 LinqDataSourceStatusEventArgs 对象是在数据修改操作期间创建的; -1 如果您通过将 AutoPage 设置为 true 并将 RetrieveTotalRowCount 设置为 false 来启用自定义分页。
Check here for more information - 底部的表格显示了要设置的不同属性以恢复行数,但看起来您必须将 AutoPage 和 AllowPage 属性设置为 true 或 false。
从上面链接中的表格和您提供的示例来看,您将 Autopage 设置为 false,但 AllowPaging 设置为 true,因此它返回页面中的行数。
HTH
【讨论】:
【参考方案2】:TotalRowCount 属性仅对 AutoPage 和 AllowPaging 的某些值有效。它们都应该是真的(在你的情况下)或者都是假的。
查看以下页面了解 TotalRowCount 属性。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linqdatasourcestatuseventargs.totalrowcount.aspx
【讨论】:
【参考方案3】:好吧,我已经将 AutoPage 和 AllowPaging 设置为 true。 我已通过在调试模式下检查其值确认 RetrieveTotalRowCount 设置为 true(找不到更改其值的位置)。
它仍然返回 -1。
唯一缺少的是:
-1 如果 LinqDataSourceStatusEventArgs 对象是在数据修改操作期间创建的;
我不太确定这意味着什么。 我正在使用 LinqDataSource 的修改版本来启用一些自定义过滤,所以这可能是问题所在。另一方面,在调试模式下搞砸时,我确实设法检查了 arguments.TotalRowCount 的值,它是正确的。但是在 Selected 事件中出现的值始终是 -1。
【讨论】:
【参考方案4】:我遇到了同样的问题。我用以下代码行解决了我的问题
protected void LinqDataSourcePoints_Selected(object sender, LinqDataSourceStatusEventArgs e) totalRecords = (e.Result as List).Count;
说明: 1-将 e.Result 解析为您的数据源 2-获取计数。
为我工作完美。
【讨论】:
【参考方案5】:试试这个,我已经测试过了,它会返回所有的行。
protected void LinqDataSource1_Selecting(object sender, LinqDataSourceStatusEventArgs e)
System.Collections.Generic.List<country> lst = e.Result as System.Collections.Generic.List<country>;
int count = lst.Count;
确保您的活动是“Selecting”
【讨论】:
这是一个非常糟糕的解决方案,因为它会导致从服务器拉取所有记录。以上是关于GridView 控件中使用 LinqDataSource 和分页的总行数的主要内容,如果未能解决你的问题,请参考以下文章
C# dev控件中gridview 我要确定某一个单元格的位置
使用DevExpress 控件gridcontrol中gridview如何获取控件的列名
c#winfrom中gridview控件怎样设置让表头不可点击,还有下面点击全选中,还不是点击只显示一个单元格,求助,谢