2009-03-25 7 views
0

J'utilise GridView pour lier à l'aide d'ObjectDataSource à l'aide de la propriété DataSource. Maintenant, le problème est que j'ai un champ entier qui est montré comme ci-dessous:Le tri GridView ne fonctionne pas avec ObjectDataSource

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

Je capture également l'événement RowCommand pour mon but de logique métier et le feu la méthode Trier() de GridView là-dedans. Dans le cas, si j'exécute la méthode Sort() du gestionnaire d'événements de tri, j'obtiens une exception de dépassement de pile dont je ne sais pas pourquoi cela se produit?

Enfin, même après avoir fait les bonnes choses que je pense ne se produisent pas ici, le tri ne fonctionne tout simplement pas dans mon GridView avec IntegerField. Qu'est-ce que je fais mal? :(

Répondre

0

Ma première pensée est que vous utilisez la propriété DataSource lorsque vous devriez probablement utiliser la propriété DataSourceID

Edit:.

D'accord, j'était trop rapide pour répondre, et trop lent sur la lecture.;) Pourriez-vous partager votre implémentation de MyGrdView_Sorting avec nous?

Deuxième édition et répondre à un commentaire:

"Je fais juste ((GridView) expéditeur) .Sort (" IntegerField "SortDirection.Ascending), dans le gestionnaire de MyGrdView_Sorting." Appeler GridView.Sort déclenchera l'événement Sorting, qui dans votre cas appellera Sort, qui déclenchera l'événement Sort, qui appellera Sort, ... voyez-vous le motif ici? ;)

Vous devrez effectuer le tri à un autre endroit dans votre logique métier, comme vous l'avez mentionné. Vous pouvez définir votre ObjectDataSource.CanSort = true, spécifier un SortParameterName et laisser votre SelectMethod effectuer le tri réel.

+0

Je viens de faire (expéditeur (GridView)) .Sort ("IntegerField", SortDirection.Ascending); dans le gestionnaire MyGrdView_Sorting. Cependant, en faisant cela, je reçois une exception Stack Overflow, donc, je fais la même chose dans ma logique métier maintenant. –

+0

Bonjour, Il n'existe aucune propriété nommée ObjectDataSource.CanSort. Premièrement, CanSort est une propriété de ObjectDataSourceView et deuxièmement, il s'agit d'une propriété en lecture seule qui ne peut pas être définie. Cependant, je comprends pourquoi j'obtiens une exception de dépassement de pile avec le motif expliqué. Merci! –

+0

@Anonymous: Vrai, j'étais trop rapide dans la lecture de l'implémentation d'ExecuteSelect. La propriété ObjectDataSourceView.CanSort est codée en dur pour renvoyer true, donc spécifier SortParameterName devrait être suffisant. – sisve

1

Lorsque vous déclenchez Sort() sur l'événement Sorting, l'événement Sort est à nouveau déclenché, ce qui provoque le débordement de la pile.

Questions connexes