2010-09-30 15 views
5

Mam DataTable z 10 wierszy powiedzieć jedną z kolumn losowo od 1 do 10. Chcę je posortować. zwykle, robię to:Wybierz górne N wierszy PO sortowaniu z Dataview w C#

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

Teraz chcę tylko powiązać 5 najlepszych wierszy w tym DataView. Jeśli spróbuję tego:

Działa, ale dataView całkowicie zapomina o sortowaniu i wybiera 5 rzędów od góry.

Próbowałem go również ze wszystkimi DataViewRowStates. Jak wybrać 5 najlepszych wierszy po sortowaniu?

Wydaje mi się, że brakuje mi pomysłów! proszę pomóc!

Odpowiedz

4

Uzyskujesz dostęp do DataView, ale z prośbą o przypisanie Table - sama tabela nie jest posortowana, DataView zapewnia posortowany "widok" tabeli.

Więc spróbuj (ostrzeżenie drycode!)

DvPopBlogs.DataViewRows.Take(5) 

Aby uzyskać pierwszych 5 (w kolejności sortowania) DataViewRows. Jeśli chcesz DataRows:

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

Jest całkiem możliwe, wyliczający z DataView jest kolekcja DataViewRows, więc możesz po prostu użyć DvPopBlogs.Take(5).... jeśli chcesz.

+0

owszem, znalazłem to, kiedy starałem się debugowania, wydawało się, że DataView posortowanych ale jak tylko dodałem tabeli, kolejność sortowania została utracona, teraz rozumiem tabela jest oryginalne dane. dzięki. Ale DvPopBlogs to DataView i nie ma metod .Take() ani .DataViewRows()! – iamserious

+0

Spróbuj albo dvPopBlogs.AsEnumerable(). Weź, albo w najgorszym przypadku dvPopBlogs.ToTable() Drugi utworzy nową DataTable z zawartości widoku. –

+0

Witam, przepraszam, jeśli użyję metody .ToTable(), repeater narzeka (na bind), że pewna kolumna nie istnieje. Debugowanie pokazuje, że ono istnieje, może robię coś złego i jestem pewien, że nie możesz się dowiedzieć bez pełnego kodu. Co sugerujesz teraz? Dziękuję i przepraszam, że zadawałem zbyt wiele pytań! – iamserious

1

Skoro już przesyłasz do ogólnej listy, czemu nie rzucić danych zamiast danych?

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

Witaj, wciąż rzuca taki sam błąd, że jedna z kolumn nie istnieje! Próbowałem go debugować i wyraźnie widzę kolumnę, jednak na bazie danych to rzuca ten błąd! – iamserious

Powiązane problemy