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ó:

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



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.
Respuesta Responder a este mensaje
#2 Alberto Poblacion
26/12/2008 - 17:57 | Informe spam
"Gilbert" wrote in message
news:
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?



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.
Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
#4 SoftJaén
27/12/2008 - 16:46 | Informe spam
"Gilbert" preguntó:

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); ?



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.


2) Con solo hacer DataView myDV=myDT.DefaultView sin ningun filtro ni sort
ya me hizo una seleccion de todos los registros?



Así es.

no es mas lento pues ?



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.

o la seleccion ocurre solo cuando se va a usar el dataview?



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.

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



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.

Mi inquietud es orientada al rendimiento.



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.
Respuesta Responder a este mensaje
#5 Gilbert
29/12/2008 - 15:49 | Informe spam
Oye muy buena tu explicacion, muchas gracias!


"SoftJaén" escribió en el mensaje
news:
"Gilbert" preguntó:

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); ?



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.


2) Con solo hacer DataView myDV=myDT.DefaultView sin ningun filtro ni
sort ya me hizo una seleccion de todos los registros?



Así es.

no es mas lento pues ?



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.

o la seleccion ocurre solo cuando se va a usar el dataview?



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.

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



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.

Mi inquietud es orientada al rendimiento.



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.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida