2010-09-30 19 views
5

J'ai un DataTable avec 10 lignes disons l'une des colonnes numérotés de 1 à 10 au hasard. Je veux les trier. Habituellement, je fais ceci:Sélectionnez le début N lignes APRÈS le tri à partir de Dataview dans C#

DataView Dv = new DataView(dtPost, "", "views desc", DataViewRowState.Unchanged); 
repeater.DataSource = Dv; 
repeater.DataBind(); 

Maintenant, je veux juste lier les 5 premières lignes dans cette Dataview. Si j'essaie ceci:

DvPopBlogs.Table.Rows.Cast<System.Data.DataRow>().Take(5); 

OR 

DvPopBlogs.Table.AsEnumerable().Take(5); //this usually works if sorting wasnt necessary 

Il fonctionne, mais le Dataview oublie complètement sur le tri et sélectionne seulement 5 lignes de haut.

Je l'ai essayé avec tous les DataViewRowStates aussi. Comment sélectionner les 5 premières lignes après le tri?

Je semble à court d'idées! aidez s'il vous plaît!

Répondre

4

Vous accédez à DataView, mais en demandant Table il est lié à - la table elle-même n'est pas triée, le DataView fournit une "vue" triée de la table.

Donc, essayez (avertissement drycode!)

DvPopBlogs.DataViewRows.Take(5) 

Pour obtenir les 5 premiers (dans l'ordre de tri) DataViewRows. Si vous voulez que le DataRows:

DvPopBlogs.DataViewRows.Take(5).Select(dvr => dvr.Row) 

Il est tout à fait possible le recenseur de DataView est la collection DataViewRows, de sorte que vous pourrez peut-être simplement utiliser DvPopBlogs.Take(5).... si vous le souhaitez.

+0

oui, j'ai trouvé quand je tentais de débogage, dataview semblait avoir ordre de tri, mais dès que j'ajouté le tableau, l'ordre de tri a été perdu, je comprends maintenant le tableau est les données originales. Merci. Mais, DvPopBlogs est un DataView et il n'a pas de méthodes .Take() ou .DataViewRows()! – iamserious

+0

Essayez soit dvPopBlogs.AsEnumerable(). Prenez, ou dans le pire des cas dvPopBlogs.ToTable() Ce dernier va créer un nouveau DataTable à partir du contenu de la vue. –

+0

Salut, désolé, si j'utilise le répéteur de méthode .ToTable() se plaint (sur lier) que certaines colonnes n'existe pas. Débogage montre qu'il existe, peut-être que je fais quelque chose de mal et je suis sûr que vous ne pouvez pas savoir sans le code complet. Que suggérez-vous que je fais maintenant? Merci, et désolé de poser trop de questions! – iamserious

1

Puisque vous avez déjà lancé une liste générique, pourquoi ne pas lancer l'affichage de données au lieu de la datatable?

IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row); 
+0

Salut, c'est toujours en lançant la même erreur, que l'une des colonnes n'existe pas! J'ai essayé de le déboguer et je peux clairement voir la colonne, cependant, sur databind il jette cette erreur! – iamserious