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

时间:2010-05-23 23:22:29

标签: 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 参数似乎正常工作。

有什么想法吗?

5 个答案:

答案 0 :(得分:6)

答案 1 :(得分:2)

我认为你可能会在页面和行之间感到有点困惑(我正在读这篇文章)。

ObjectDataSource(ODS)用于分页的参数是属性startRowIndexmaximumRows,但在您的函数中,您将其称为PageIndexPageSize

ODS显示在页面中,但使用行号来显示页面。例如,对GetProducts()函数的第一次调用的页面大小为10(默认值)将为startRowIndex = 0maximumRows = 10 - 从第0行开始并提供10行。< / p>

如果用户选择第2页,则使用startRowIndex = 10和maximumRows = 10调用GetProducts。对于第3页,这将是startRowIndex = 20maximumRows = 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,希望这样可以解决问题。

此致 喜悦