所以在我尝试通过ObjectDataSource进行自定义gridview分页之前...我想我已经阅读了人类已知的每个教程,以确保我得到它。它看起来不像火箭科学。
我在gridview上设置了 AllowPaging = True 。
我在gridview上指定了 PageSize =“10”。
我在ObjectDataSource上设置了 EnablePaging =“True”。
我将2个分页参数(maximumRows& startRowIndex)添加到我的业务对象的select方法中。
我创建了一个类似的“count”方法,其签名与select方法相同。
我似乎遇到的唯一问题是在执行期间... ObjectDataSource正在为我的业务对象提供最大值-1的而且我不能为我的生活找出原因。我已经搜索到网络的末尾,其他人遇到这个问题,显然我是唯一一个。 StartRowIndex 参数似乎正常工作。
有什么想法吗?
答案 0 :(得分:6)
答案 1 :(得分:2)
我认为你可能会在页面和行之间感到有点困惑(我正在读这篇文章)。
ObjectDataSource(ODS)用于分页的参数是属性startRowIndex
和maximumRows
,但在您的函数中,您将其称为PageIndex
和PageSize
。
ODS显示在页面中,但使用行号来显示页面。例如,对GetProducts()
函数的第一次调用的页面大小为10(默认值)将为startRowIndex = 0
和maximumRows = 10
- 从第0行开始并提供10行。< / p>
如果用户选择第2页,则使用startRowIndex = 10和maximumRows = 10
调用GetProducts。对于第3页,这将是startRowIndex = 20
和maximumRows = 10
我建议您重命名参数以使用相同的名称 - 这将使编码更容易。
答案 2 :(得分:0)
你并不孤单。我也有同样的问题。我的设置有点不同。在我的情况下,我使用ListView而不是GridView控件。 我有2页,一个使用ListView和DataPager,另一个使用ListView和自定义导航控件(这实际上与DataPager只是不同的Markup输出相同)。 两个页面都使用相同的BLL方法并设置maximumRow&amp; 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;
}
我在某处读到,MaximumRows的-1值仅表示“所有剩余记录”。所以它不是错误,而是默认值。
这是我在这里的第一篇文章,希望我没有做错任何事,因为这不是真正的解决方案。此外,我不想劫持,但我会感谢任何其他信息......这个问题困扰着我。
答案 3 :(得分:0)
这项工作正在进行中。
我也遇到了同样的问题。
当你使EnablePaging =“true”时,StartRowIndex被设置为页面大小。
如果EnablePaging =“false”,则MaximumRows设置为零。
但是如果你设置了
e.Arguments.StartRowIndex = m_startRowIndex;
e.Arguments.MaximumRows = m_PageSize;
然后它正常工作,但这是一种解决方法
答案 4 :(得分:0)
你需要在ObjectDataSource控件中设置SelectCountMethod属性,同时在那里设置pagersize和index,希望这样可以解决问题。
此致 喜悦