如何使用GridView和ObjectDataSource进行排序?
我有一个带有 ObjectDataSource
的 GridView,我希望能够对其进行排序。
分页工作正常,但是排序给了我一个例外:
GridView
gridView
触发了未处理的事件排序。
如何在服务器端启用排序?
(即 gridView.EnableSortingAndPagingCallbacks 必须保持 false)
I have a GridView with an ObjectDataSource
and I want to be able to sort it.
Paging works correctly, however Sorting gives me an exception:
The GridView
gridView
fired event Sorting which wasn't handled.
How do I enable sorting on the server side?
(i.e. gridView.EnableSortingAndPagingCallbacks
must remains false)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
将 gridView.AllowSorting 属性设置为 true。 从这里开始,如果您使用实现 IBindingList 的对象,网格应该允许您在回发时自动对数据进行排序。 但是,由于情况很可能并非如此,因此您应该采纳上面 TheTXI 的建议并自行处理排序事件。 在代码隐藏中连接 GridView.Sorting 事件,如下所示:
在 gridView_Sorting 方法内处理排序,该方法应如下所示:
另外,您可以使用附加到控件的 OnSort="gridView_Sorting" 在页面本身上连接事件。
请记住,由于您将 gridView.EnableSortingAndPagingCallbacks 设置为 false,因此当用户尝试排序时不会立即触发此操作,而是会等待回发到服务器。
我希望这有帮助!
编辑:
由于 ObjectDataSource 似乎是选择的中间人,因此这里也简要说明了用于排序的接线。 在页面中使用以下内容(完整示例可以在 此处 在 MSDN 上,靠近底部):
您将跳转到 ObjectDataSource 来处理排序,而不是实际使用 gridView.Sorting 事件。 一旦触发排序,它应该调用后面代码中 SelectMethod 中找到的方法。 然后,在 SelectMethod 内,您将处理 GridView 对象的重建,如下所示:
Set the gridView.AllowSorting property to true. From here the grid should allow you to sort data automatically on postback if you are using an object that implements IBindingList. However, since that is most likely not the case, you should take TheTXI's advice above and handle the sorting event yourself. Either wire the GridView.Sorting event in the codebehind, like so:
Handle the sorting inside the gridView_Sorting method, which should look like this:
Also, you can wire the event on the page itself using OnSort="gridView_Sorting" attached to the control.
Remember, since you are setting gridView.EnableSortingAndPagingCallbacks to false, this will not be immediately fired when the user tries to sort, it instead will wait for the postback to the server.
I hope this helps!
EDIT:
Since ObjectDataSource seems to be the middleman of choice, here is a brief explanation of wiring that for sorting as well. Use the following in your page (The full example can be found here on the MSDN, near the bottom):
Instead of actually using the gridView.Sorting event, you'll be jumping over to the ObjectDataSource to take care of the sorting. Once the sort is triggered it should call the method found in SelectMethod in your code behind. Then, inside SelectMethod, you would handle the rebuilding of your GridView object, which would look like:
我正在使用 Linq2Sql 和 ObjectDataSource,它可以很好地进行分页和排序。
我实现了一个类用作 ObjectDataSource。 它有一个 Select 和一个 Count 方法,调用我的业务层,该业务层使用 Linq2SQL 查询从数据库检索数据。 select 方法自动获取第一项索引、页面大小和排序表达式作为参数。
在 ASPX 中,数据源的配置如下:
Select 和 Count 方法使用 Linq 查询从 DB 检索数据。 我使用 Skip()、Take() 和 Orderby() 方法。 为了让 OrderBy 接受字符串排序表达式,我使用 DynamicLinq 无需编写太多代码,数据绑定、分页和排序都会自动工作。
I am using Linq2Sql and a ObjectDataSource and it does Paging and Sorting very well.
I implemented a Class to be used as the ObjectDataSource. It has a Select and a Count method calling my business layer which uses Linq2SQL queries to retrieve data from the DB. The select methods gets the first item index, page size and the sort expression as parameters automatically.
In the ASPX, the DataSource is configured like this:
The Select and the Count method use Linq queries to retrieve the data from the DB. I use the Skip(), Take() and Orderby() methods. For the OrderBy to accept a string sort expression I use DynamicLinq There is not much to code, Databinding, paging and Sorting are automatically working.
在调用
StoredProcedure
的数据访问层方法中传递SortExpression
并编写下面的 SP 方式来处理 SQL 上的排序。 这样您就可以提高排序的性能。
数据库SP:
Pass
SortExpression
in method of Data Access Layer that callsStoredProcedure
and write below way SP to handle sorting on SQL. This way you can improve the performance of your sorting.
Database SP:
为此,您可以使用 LINQ,只需在所选列上使用
OrderBy
即可:这是在对象数据源的
Select
方法中完成的。在 GridView 中添加排序键。 并在对象数据源中添加
SelectParameter
一个 `orderBy'它对我有用,而无需更改 DAL 层和存储过程。
You can use LINQ for this just use
OrderBy
on the selected column, do this:This is done in the
Select
method of the object data source.In the GridView add sort keys in it. And add
SelectParameter
in the object data source a `orderBy'It worked for me without changing the DAL layer and stored procedures.