2010-09-30 20 views
5

Tengo una DataTable con 10 filas que dicen una de las columnas numeradas del 1 al 10 al azar. Quiero ordenarlos. por lo general, hago esto:Seleccione N filas superiores DESPUÉS de ordenar desde Dataview en C#

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

Ahora, solo quiero unir las 5 filas superiores en esta Dataview. Si intento esto:

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

OR 

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

Funciona, pero el DATAVIEW se olvida por completo de la clasificación y simplemente selecciona 5 filas de arriba.

Lo he intentado con todos los DataViewRowStates también. ¿Cómo seleccionar las 5 mejores filas después de la clasificación?

Parece que me quedo sin ideas! por favor ayuda!

Respuesta

4

Usted está accediendo al DataView, pero luego pregunta por el Table al que está vinculado: la tabla en sí no está ordenada, el DataView proporciona una "vista" ordenada de la tabla.

Así que trate (drycode advertencia!)

DvPopBlogs.DataViewRows.Take(5) 

Para obtener los primeros 5 (en orden de clasificación) DataViewRows. Si desea que el DataRows:

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

Es muy posible que el empadronador de DataView es la colección DataViewRows, por lo que puede ser capaz de utilizar sólo DvPopBlogs.Take(5).... si lo desea.

+0

sí, me encontré con esto cuando yo estaba tratando de depurar, DataView parecía tener fin ordenados pero tan pronto como he añadido la tabla, el orden de clasificación se perdió, ahora entiendo tabla informa sobre los datos originales. Gracias. ¡Pero, DvPopBlogs es un DataView y ni tiene métodos .Take() ni .DataViewRows()! – iamserious

+0

Pruebe dvPopBlogs.AsEnumerable(). Take, o en el peor de los casos dvPopBlogs.ToTable() Este último creará una nueva DataTable a partir del contenido de la vista. –

+0

Hola, lo siento, si uso el método .ToTable(), el repetidor se queja (en el enlace) de que cierta columna no existe. La depuración muestra que existe, puede que esté haciendo algo mal y estoy seguro de que no puedes averiguarlo sin el código completo. ¿Qué sugieres que haga ahora? ¡Gracias y disculpa por hacer demasiadas preguntas! – iamserious

1

Dado que ya está enviando a una lista genérica, ¿por qué no lanzar la vista de datos en lugar de la tabla de datos?

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

Hola, sigue arrojando el mismo error, ¡que una de las columnas no existe! He intentado depurarlo y puedo ver claramente la columna, sin embargo, en databind arroja este error. – iamserious

Cuestiones relacionadas