通过 ObjectDataSource 的 Gridview 分页:为什么 maxRows 被设置为 -1?

发布于 2024-09-02 06:27:00 字数 612 浏览 5 评论 0原文

因此,在我尝试通过 ObjectDataSource 自定义 gridview 分页之前...我想我阅读了人类已知的所有教程,只是为了确保我明白了。它看起来并不像火箭科学。

我已经在我的 gridview 上设置了 AllowPaging = True

我已经在我的 gridview 上指定了 PageSize="10"

我已在 ObjectDataSource 上设置 EnablePaging="True"

我已添加了 2 个分页参数(maximumRows 和 startRowIndex)到我的业务对象的选择方法中。

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

我似乎遇到的唯一问题是在执行过程中...ObjectDataSource 正在为我的业务对象提供 maxRows 值 -1,但我一生都无法弄清楚原因。我已经在网络的最后搜索了其他遇到此问题的人,显然我是唯一的一个。 StartRowIndex 参数似乎工作得很好。

有什么想法吗?

So before I tried custom gridview paging via ObjectDataSource... I think I read every tutorial known to man just to be sure I got it. It didn't look like rocket science.

I've set the AllowPaging = True on my gridview.

I've specified PageSize="10" on my gridview.

I've set EnablePaging="True" on the ObjectDataSource.

I've added the 2 paging parms (maximumRows & startRowIndex) to my business object's select method.

I've created an analogous "count" method with the same signature as the select method.

The only problem I seem to have is during execution... the ObjectDataSource is supplying my business object with a maximumRows value of -1 and I can't for the life of me figure out why. I've searched to the end of the web for anyone else having this problem and apparently I'm the only one. The StartRowIndex parameter seems to be working just fine.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

冰之心 2024-09-09 06:27:00

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

If SelectCountMethod is not specified the PageSize will be -1.

野鹿林 2024-09-09 06:27:00

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

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

ODS 以页面形式显示,但使用行号来显示页面。例如,页面大小为 10(默认值)时,第一次调用 GetProducts() 函数时将具有 startRowIndex = 0maximumRows = 10 code> - 即从零行开始并提供十行。

如果用户选择第 2 页,则使用 startRowIndex=10 和 maximumRows = 10 调用 GetProducts。对于第 3 页,这将是 startRowIndex = 20maximumRows = 10

我建议您重命名参数以使用相同的名称 - 这将使编码更容易。

I think you might be a bit confused (I was reading this) between pages and rows.

The parameters used by ObjectDataSource (ODS) for paging are the properties startRowIndex and maximumRows but in your function you call them PageIndex and PageSize.

ODS displays in pages but uses row numbers for displaying the pages. For example, which a page size of ten (the default) the first call to your GetProducts() function will have startRowIndex = 0 and maximumRows = 10 - that is start at row zero and provide ten rows.

If the user selects page 2, then GetProducts is called with startRowIndex=10 and maximumRows = 10. For page 3 this would be startRowIndex = 20 and maximumRows = 10

I suggest you rename your parameters to use the same names - it will make coding easier.

音栖息无 2024-09-09 06:27:00

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

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 值仅意味着“所有剩余记录”。所以这不会是一个错误,而是一个默认值。

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

You are not alone. I have the same problem. My setup is a bit different. In my case I am using a ListView instead of a GridView Control.
I got 2 pages, one using a ListView and DataPager and the other using a ListView and a Custom Navigation Control(this is in essence the same as the DataPager just different Markup output).
Both pages use the same BLL Method and set the maximumRow & startRow in the same way. Basically copy&pasted code.

The ListView-DataPager setup works fine, parameters are set correctly in the BLL Method. The page without DataPager fails. But the DataPager can't be the reason. Both (DataPager and my Custom Control) produce the same, expected values which are passed to the ObjectDataSource parameter collection.

The most confusing thing is, that the SelectCountMethod, which is called after the SelectMethod, gets the correct parameters in both versions!

I was able to work around this problem by setting the parameter values in the OnSelecting Event of the ObjectDataSource:

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

I read somewhere that the -1 value for MaximumRows just means "all Remaining Records". So it wouldn't be an error but a default value.

This is my first post here, hope I didn't do anything wrong since this isn't really a solution. Also I don't want to hijack but I would appreciate any additional information ... this problem is bugging me.

漫漫岁月 2024-09-09 06:27:00

您需要在 ObjectDataSource 控件中设置 SelectCountMethod 属性,并在那里设置分页器大小和索引,希望这能解决问题。

问候,
喜悦

You need to set the SelectCountMethod property in the ObjectDataSource control, also set the pagersize and index there, hopefully this will resolve the issue.

Regards,
Joy

不可一世的女人 2024-09-09 06:27:00

这项解决办法正在发挥作用。

我也遇到了同样的问题。

当您使 EnablePaging = "true" 时,StartRowIndex 将设置为页面大小。

如果 EnablePaging =“false”,则 MaximumRows 设置为零。

但是,如果您设置了 那么

e.Arguments.StartRowIndex = m_startRowIndex; 
e.Arguments.MaximumRows = m_PageSize; 

它就可以正常工作,但是这是一个解决方法

This work around is working.

I was also stuck up with the same problem.

When you make EnablePaging = "true" then StartRowIndex was getting set to the page size.

If EnablePaging = "false" then MaximumRows was set to zero.

However if you set the

e.Arguments.StartRowIndex = m_startRowIndex; 
e.Arguments.MaximumRows = m_PageSize; 

Then it is working properly, However this is a workaround

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文