DefaultView versus New DataView()

26/12/2008 - 00:46 por Gilbert | Informe spam
Tengo una datatable la cual voy a estar haciendo filtros en una pantalla de
consulta.

Es lo mismo usar la propiedad DefaultView que crear un DataView separado
para filtrar los registros del datatable?
Cual es la diferencia?

Preguntas similare

Leer las respuestas

#1 SoftJaén
26/12/2008 - 07:47 | Informe spam
"Gilbert" preguntó:
Mostrar la cita
Hola, Gilbert:

No hay ninguna diferencia, porque en ambos casos tendrás disponible un
objeto DataView.

La propiedad DefaultView de un objeto DataTable te devuelve un objeto
DataView con los datos existentes en el objeto DataTable. Pero si tu creas
un nuevo objeto DataView, en el constructor del objeto puedes especificar un
objeto DataTable, o si lo prefieres, posteriormente puedes especificar su
propiedad Table para asignarle expresamente un objeto DataTable.

En definitiva, si tú ya tienes creado y relleno un objeto DataTable, puedes
utilizar su propiedad DataView para obtener una vista personalizada de los
datos:

DataView dv = objetoDataTable.DefaultView;

Lo anterior equivale a lo siguiente:

// Creamos un nuevo objeto DataView

DataView dv = new DataView(objetoDataTable);

O si lo prefieres:

// Creamos un nuevo objeto DataView

DataView dv = new DataView();

// Y le asignamos un objeto DataTable

dv.Table = objetoDataTable;

Como podrás observar, tienes donde elegir. :-)

Un saludo y ¡Feliz Año Nuevo!

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
#2 Alberto Poblacion
26/12/2008 - 17:57 | Informe spam
"Gilbert" wrote in message
news:
Mostrar la cita
La diferencia es que DefaultView siempre te devuelve el mismo DataView,
mientras que "new DataView(...)" te devuelve un DataView distinto cada vez
que lo llamas. Puede tener su importancia si deseas, por ejemplo, presentar
a la vez dos vistas de un DataTable ordenadas por distinta columna. Con "new
DataView" podrías hacerlo, mientras que si llamases a DefaultView dos veces,
al cambiarle el "Sort" a la segunda vista se cambiaría también el "Sort" de
la primera.
#3 Gilbert
26/12/2008 - 20:03 | Informe spam
gracias a ambos por la explicacion, :

dudas finales:

1)Al yo hacer lo siguiente:
DataView myDV=myDT.DefaultView;
myDV.RowFilter="tal condicion";
myDV.Sort="columnas a sortear";

Equivale en rendimiento a haber hecho:

DataView myDV = new DataView(myDT, "tal condicion", "columnas a sortear",
DataViewRowState.CurrentRows); ?

2) Con solo hacer DataView myDV=myDT.DefaultView sin ningun filtro ni sort
ya me hizo una seleccion de todos los registros? no es mas lento pues ?
o la seleccion ocurre solo cuando se va a usar el dataview?

3) en ninguno de los dos casos del punto 1, estoy duplicando los datos,
cierto ?

Mi inquietud es orientada al rendimiento.

Me perdonan la insistencia pero es que la ayuda de msdn es muy limitada
cuando uno tiene ese tipo de dudas

gracias
#4 SoftJaén
27/12/2008 - 16:46 | Informe spam
"Gilbert" preguntó:
Mostrar la cita
Si te refieres a rendimiento, yo entiendo que las dos maneras son
equivalentes, siempre y cuando las dos tomen los mismos datos. Por las
pruebas que he realizado, no observo diferencia alguna. De todas maneras,
mide los tiempos y saca tu mismo la conclusión.


Mostrar la cita
Así es.

Mostrar la cita
Dependerá de los registros que tenga el objeto DataTable. Si la vista no
está filtrada, ocupará todos los registros existentes en el objeto
DataTable, por tanto, diremos que asignar el objeto DataView mediante la
propiedad «DefaultView», es más "lenta" (entre comillas) que si lo creas
mediante su constructor pasándole un criterio de filtro.

Si el objeto DataTable tiene 10.000 registros y llamas a su propiedad
«DefaultView», la vista tendrá 10.000 registros. Pero si construyes el
objeto DataView con una condición de filtro, en lugar de tener 10.000
registros, lo mismo tiene 5.000 registros, por tanto, al haberse eliminado
la mitad de los registros, el proceso de creación del objeto DataView
finaliza antes.

Mostrar la cita
La selección ocurre cuando al objeto DataView le especificas el objeto
DataTable, bien en el constructor del objeto DataView, o cuando le asignas
el valor de la propiedad «DefaultView» del objeto DataTable. Una vez creado
el objeto DataView y asignados los datos que procedan, puedes obtener el
número de registros existentes consultando la propiedad «Count» del objeto
DataView.

Mostrar la cita
En principio no están duplicados, y si lo están, es porque se encuentran
duplicados en el objeto DataTable, no en el objeto DataView, porque éste
objeto tendrá una vista personalizada de los datos existentes en el objeto
DataTable utilizado.

Mostrar la cita
Como te he comentado anteriormente, mide tiempos y saca tu mismo las
conclusiones.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
#5 Gilbert
29/12/2008 - 15:49 | Informe spam
Oye muy buena tu explicacion, muchas gracias!


"SoftJaén" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida