通过ObjectDataSource进行Gridview分页:为什么maximumRows被设置为-1?

oct*_*ist 7 c# asp.net gridview objectdatasource

所以在我尝试通过ObjectDataSource进行自定义gridview分页之前...我想我已经阅读了人类已知的每个教程,以确保我得到它.它看起来不像火箭科学.

我在gridview上设置了AllowPaging = True.

我在gridview上指定了PageSize ="10".

我在ObjectDataSource上设置了EnablePaging ="True".

我已经将2个分页参数(maximumRows&startRowIndex)添加到我的业务对象的select方法中.

我创建了一个类似的"count"方法,其签名与select方法相同.

我似乎遇到的唯一问题是在执行期间... ObjectDataSource正在为我的业务对象提供最大值-1,我不能为我的生活找出原因.我已经搜索到网络的末尾,其他人遇到这个问题,显然我是唯一一个.该StartRowIndex参数似乎是工作得很好.

有任何想法吗?

小智 6

如果SelectCountMethod未指定,则为PageSize-1.


小智 0

你并不孤单。我也有同样的问题。我的设置有点不同。就我而言,我使用 ListView 而不是 GridView 控件。我有 2 个页面,一个使用 ListView 和 DataPager,另一个使用 ListView 和自定义导航控件(这本质上与 DataPager 相同,只是标记输出不同)。两个页面都使用相同的 BLL 方法,并以相同的方式设置 maximumRow 和 startRow。基本上是复制粘贴代码。

ListView-DataPager 设置工作正常,BLL 方法中的参数设置正确。没有 DataPager 的页面失败。但 DataPager 不可能是原因。两者(DataPager 和我的自定义控件)都会生成相同的预期值,这些值将传递到 ObjectDataSource 参数集合。

最令人困惑的是,在 SelectMethod 之后调用的 SelectCountMethod 在两个版本中都获取了正确的参数!

我可以通过在 ObjectDataSource 的 OnSelecting 事件中设置参数值来解决此问题:

protected void ObjectDataSource_MyListing_OnSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
            e.Arguments.StartRowIndex = m_startRowIndex;
            e.Arguments.MaximumRows = m_PageSize;
}
Run Code Online (Sandbox Code Playgroud)

我在某处读到,MaximumRows 的 -1 值仅表示“所有剩余记录”。所以这不会是一个错误,而是一个默认值。

这是我在这里发表的第一篇文章,希望我没有做错任何事情,因为这并不是真正的解决方案。另外,我不想劫持,但我希望有任何其他信息......这个问题困扰着我。