我使用GridView使用DataSource属性使用ObjectDataSource进行绑定。现在,问题是我有一个整数字段,如下所示:
<asp:GridView ... DataSource="MyObjectDataSource" OnSorting="MyGrdView_Sorting" >
<Columns>
<asp:BoundField DataField="IntegerField" Visible="False" SortExpression="IntegerField" />
</Columns>
</asp:GridView>
我还为业务逻辑目的捕获RowCommand事件,并在那里触发GridView的Sort()方法。如果我从Sorting事件处理程序中激活Sort()方法,我会得到堆栈溢出异常,我不知道它为什么会发生?
最后,即使在做了我认为没有发生的正确事情之后,排序也只是在我的GridView中使用IntegerField。我做错了什么? :(
答案 0 :(得分:1)
在Sorting事件上触发Sort()会再次触发Sorting事件,从而使堆栈溢出。
答案 1 :(得分:0)
我首先想到的是,当你可能应该使用DataSourceId属性时,你正在使用DataSource属性。
编辑:
好的,我的回答太快了,阅读速度太慢了。 ;) 你能与我们分享你的MyGrdView_Sorting实现吗?
第二次编辑并回答评论:
“我只是做((GridView)发送者).Sort(”IntegerField“,SortDirection.Ascending);在MyGrdView_Sorting处理程序中。”
调用GridView.Sort将触发Sorting事件,在您的情况下将调用Sort,这将触发Sorting事件,这将调用Sort,...你看到这里的模式吗? ;)
您需要在业务逻辑中的其他位置进行排序,就像您提到的那样。您可以设置ObjectDataSource.CanSort = true,指定SortParameterName,并让SelectMethod进行实际排序。