2009-03-25 2 views
0

Я использую GridView для привязки с использованием объекта ObjectDataSource с использованием свойства DataSource. Теперь проблема в том, что я имею в поле целого числа, которое показано, как показано ниже:Сортировка GridView не работает с ObjectDataSource

<asp:GridView ... DataSource="MyObjectDataSource" OnSorting="MyGrdView_Sorting" > 
<Columns> 
<asp:BoundField DataField="IntegerField" Visible="False" SortExpression="IntegerField" /> 
</Columns> 
</asp:GridView> 

Я также захватить событие RowCommand для моей бизнес-логике цели и огнем() метод GridView там сортировки. В случае, если я запускаю метод Sort() из обработчика сортировки событий, я получаю исключение переполнения стека, о котором я не знаю, почему это происходит?

Наконец, даже после выполнения правильных вещей, которые, как я думаю, здесь не происходит, сортировка просто не работает в моем GridView с IntegerField. Что я делаю неправильно? :(

ответ

0

Моя первая мысль, что вы используете свойство DataSource, когда вы, вероятно, следует использовать свойство DataSourceID

Edit:.

Хорошо, я был слишком быстр, чтобы ответить, и слишком медленно при чтении.;) Не могли бы вы поделиться с нами своей реализацией MyGrdView_Sorting?

Второе редактирование и ответить на комментарий:

"Я просто делаю ((GridView) отправителя) .Sort (" IntegerField "SortDirection.Ascending), в обработчике MyGrdView_Sorting."

Вызов GridView.Sort вызовет событие Сортировка, которое в вашем случае вызовет Сортировку, которая вызовет событие Сортировка, которое вызовет Сортировку, ... вы видите шаблон здесь? ;)

Вам нужно будет выполнить сортировку в другом месте в вашей бизнес-логике, как вы упомянули. Вы можете установить ObjectDataSource.CanSort = true, указать SortParameterName и позволить вашему SelectMethod выполнять фактическую сортировку.

+0

Я просто делаю ((GridView) отправитель) .Sort («IntegerField», SortDirection.Ascending); в обработчике MyGrdView_Sorting. Однако, делая это, я получаю исключение Stack Overflow, поэтому теперь я делаю то же самое в своей бизнес-логике. – 2009-03-26 05:41:00

+0

Привет, Нет такого свойства с именем ObjectDataSource.CanSort. Во-первых, CanSort является свойством ObjectDataSourceView, а во-вторых, это свойство только для чтения, которое невозможно установить. Однако я понимаю, почему я получаю исключение переполнения стека с объясненным шаблоном. Благодаря! – 2009-03-26 12:34:25

+0

@Anonymous: Правда, я слишком быстро прочитал реализацию ExecuteSelect. Свойство ObjectDataSourceView.CanSort жестко запрограммировано для возврата true, поэтому достаточно указать SortParameterName. – sisve

1

Увольнение Sort() в событии сортировки приведет к повторному событию сортировки, таким образом, переполнение стека.

Смежные вопросы