datagrid vs listview

26/06/2005 - 12:08 por Sonia | Informe spam
hola!
en mi aplicacion uso muchos datagrids de gran tamaño(la bd tiene muchos
registros) y me han aconsejado q seria mas eficiente si usara listview en
vez de tanto datagrid. nunca he usado listview y antes de cambiar la
aplciacion me gustaria preguntar si sabeis la diferencia entre ambos, q me
aconsejais y donde puedo ver ejemplos de listview. uno de los priencipales
problemas del datagrid es q en algunos formularios q tengo 3 o 4 me tarda
demasiado en cargar los datos. no se si esto mejorara usando listview.
conoceis alguna forma mas eficiente de hacerlo?

Preguntas similare

Leer las respuestas

#11 Tristan
27/06/2005 - 21:46 | Informe spam
Sonia, antes de que cambies tu código, creo que deberías pensar una cosa.
Veo que utilizas un dataview en el método Carga. ¿Para qué?. Lo digo por que
no me queda claro si llenas el dataset con muchas filas y luego seleccionas
a través del dataview, o por el contrario el "WHERE id_col ..." se encarga
de seleccionar solo las filas que quieres. ¿Ese where produce solo diez
filas?

Por otro lado, ¿estás segura de que tarda muy poco en el Fill de carga?.
¿Entonces en qué tarda, en la asignación del datasource al datagrid? ¿Los
cuatro datagrid muestran las mismas filas?

Es que no se, me resulta muy extraño que te tarde mucho menos en el equipo
que tiene la BD, que en el que no la tiene. Si es así, no veo como puede ser
que el tiempo se pierda en generar el datagrid. Ha de ser forzosamente en la
carga de los datos. Yo creo que o bien el número de filas que cargas en el
dataset es muy grande, o bien necesites utilizar índices, o bien incluso
utilizar un gestor de bases de datos en red. Realmente para el caso que
describes, tablas de muchas filas accedidas en red, las bases de datos del
tipo de access son muy poco eficientes.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#12 Sonia
28/06/2005 - 09:22 | Informe spam
la verdad es q la seleccion la restriccion de las filas la hago simplemente
con el where de la consulta. el where no siempre produce el mismo numero de
filas, depende del codigo q le ponga en un textbox pero normalmente estan
entre ninguna y 10-15 como max.

crees entonces q puedo kitar lo del dataview y q no merece la pena pasarlo a
listview?
la verdad es q he cambiado una cosa de leer los datos con un registro y
ponerlos en una serie de textbox y parece q va mas rapido , pero aun asi en
formulario q tengo lo mismo , sale la informacion inmediata en mi pc, y en
este q tengo los 4 datagrids tarda unos segundos. 3 o 4 q como siempre se
agrandaran al ejecutar la aplicacion en el pc q no tenga la bd. esto es lo q
keria emjorar.
keria probar la diferencia usando listview con datareader pero keria hacerlo
con una funcion publica tipo la de carga del datagrid, pero todas las q
encuentro usan el dataset y no el datareader.



"Tristan" escribió en el mensaje
news:
Sonia, antes de que cambies tu código, creo que deberías pensar una cosa.
Veo que utilizas un dataview en el método Carga. ¿Para qué?. Lo digo por


que
no me queda claro si llenas el dataset con muchas filas y luego


seleccionas
a través del dataview, o por el contrario el "WHERE id_col ..." se encarga
de seleccionar solo las filas que quieres. ¿Ese where produce solo diez
filas?

Por otro lado, ¿estás segura de que tarda muy poco en el Fill de carga?.
¿Entonces en qué tarda, en la asignación del datasource al datagrid? ¿Los
cuatro datagrid muestran las mismas filas?

Es que no se, me resulta muy extraño que te tarde mucho menos en el equipo
que tiene la BD, que en el que no la tiene. Si es así, no veo como puede


ser
que el tiempo se pierda en generar el datagrid. Ha de ser forzosamente en


la
carga de los datos. Yo creo que o bien el número de filas que cargas en el
dataset es muy grande, o bien necesites utilizar índices, o bien incluso
utilizar un gestor de bases de datos en red. Realmente para el caso que
describes, tablas de muchas filas accedidas en red, las bases de datos del
tipo de access son muy poco eficientes.

Juan Carlos Badiola
MVP - C#



Respuesta Responder a este mensaje
#13 Bernardo Campos
28/06/2005 - 20:36 | Informe spam
Sonia, en realidad solo es un simple ejemplo que te puse para cargar datos,
tu verás cómo lo puedes implementar mejorderrepente se me ocurre algo
asi, no lo he probado...:

private sub CargarListView (list as listView, strTabla as string)
dim item as new listViewItem
sql = "select * from " & strTabla
'cargas tu datareader
while dataReader.read
for i to datareader.FieldCount
item = list.Items.Add(dataReader.item(dataReader.GetName(i)))
item.SubItems.Add(dataReader.item(dataReader.GetName(i+1)))
i = i + 2
next
i = 1
end while
end sub

Sta Cruz, Bolivia

"Sonia" wrote in message
news:OUeQ$
gracias x la funcion. ahora la pruebo. supongo q tendre en vez de ir col por
col tendre q crearme una variable para q funcione sea el num de col q sea.
ahora lo pronare, ya q lo q kiero es q se rellenen varios listview de
diferentes tamaños y diferentes tablas al abrir el form.
por cierto, q parametros le paso para llamarla??
gracias!
"Bernardo Campos" escribió en el mensaje
news:
Te respondo entre lineasSaludos,



Sta Cruz, Bolivia

"Sonia" wrote in message
news:
hola!

en lo de editar los datos simpelmente lo q kiero es seleccionar una fila


(y
coger el dato de la ultima columna q sera un codigo). entonces tengo


varios
botones. 'modificar' 'borrar' el de mofificar te lleva a otro formulario
donde llevo los datos seleccionados en esa fila y modifico. al volver al
form anterior, actualizo el datagrid. en borrar siemplemente lo borro y


en
insertar me voy a otro form , inserto los datos en textbox y actualizo.

esto es lo q estaba haciendo con los datagrids. es esto a lo q te


refieres q
nos puede con los listview?


-
No, me refiero a que los cambios lo hagas directo en el listview sin
llamar a otro formulario, eso no se puede hacer.
Pero como dices que tu llamas a otro form. que carga los datos con el dato
de la ultima columna que tienes en el listView,
(que es tu clave), eso sí se puede.
-

respecto a lo de lso procedimientos almacenados no se si te refieres a


poner
las fucniones y procedimientos de cardar datagrid etc como publicas en


un
modulo y en cada form q los kiera hacer llamadas a ellas. si es así es


como
lo hago.


Ok, me queda claro, pensé que no utilizabas proc. almac.
___________________________________

lo q keria ahora es probar la diferencia haciendolo con listview, pero


kiero
hacerlo usando datareader y si puede ser tb con una funcion o


procedimiento
aparte para simplemente hacer llamadas a ella para cargar el listview.


pero
el codigo q encuentro sobre esto rellena los listview con dataset y


kiero
hacerlo con datareader. sabes donde puedo encontrar algo al respecto?


Acá te pongo un pequeño ejemplo para cargar un listView

Dim item As New ListViewItem
lstProductos.FullRowSelect = True
lstProductos.View = view.details

'Registro 1
item = lstProductos.Items.Add(dataReader.item("col1"))
item.SubItems.Add(dataReader.item("col2"))
item.SubItems.Add(dataReader.item("col3"))

'Registro 2
item = lstProductos.Items.Add(dataReader.item("col1"))
item.SubItems.Add(dataReader.item("col2"))

-


"Bernardo Campos" escribió en el mensaje
news:#
> Sonia, dos cosas quería comentar:
>
> 1. Quizas si pones tu consultas con proced. almacenados podria
mejorar.
> 2. Con el listView si muestras varias columnas, no puedes editar


los
> datos directamente en todas las columnas, solo podrás hacerlo en la
primera
> columna, en cambio sí lo puedes hacer con un grid. Claro esto si


quieres
> editar los datos, pero si es solo para mostrar
>
>
>
>
>
>
> Sta Cruz, Bolivia
>
> "Sonia" wrote in message
> news:
> > hola
> > gracias por la alcaracion.
> > voy a intentar hacerlo con datareader usando listview, pero solo veo
> > ejemplos de llenar_listview usando datasets. sabes donde puedo ver


el
> > ejemplo de llenar el listview usando datareader?
> > gracias
> >
> > "Juan Pedro Gonzalez" escribió en el mensaje
> > news:#
> > > Hola Sonia,
> > >
> > > La mejora de rendimiento entre un DataGrid y un ListView radica en


la
> > forma
> > > de acceder a los datos. Normalmente el DataGrid se carga a traves


de
un
> > > DataSet mientras que el ListView lo cargas mediante un DataReader.
> > >
> > > El DataReader es mas rápido que el DataSet. Esto se hace eviente


ya
que
> el
> > > DataSet se carga (de forma interna) a traves de un DataReader y
> > > posteriormente este DataSet se asocia al DataGrid... Al emplear
> > directamente
> > > el DataReader ganamos algo de "velocidad". Tambien debemos


recordar
que
> el
> > > DataSet almacena todas las filas en memoria mientras que el


DataReader
> > solo
> > > almacena la fila a la cual esta apuntando en ese momento. Esto


implica
> que
> > > empleamos menos recursos del sistema y por lo tanto tenemos mas
recursos
> > > disponibles a medida que introducimos los datos en el ListView. La
> contra
> > > partida es que el DataReader no es "navegable" (No podemos


movernos
por
> > sus
> > > registros libremente, y simplemente podemos avanzar)... Bueno


habria
mas
> > > detalles como que el DataSet lo podemos pasar en funciones pero


los
> > > resultados de un DataReader no, y que para el DataReader debemos


tener
> > > conexion si deseamos mostrarlos, mientras que en el DataSet al
> > almacenarlos
> > > en memoria los podriamos volver a mostrar sin necesidad de


volvernos a
> > > conectar a la base de datos... etc...
> > >
> > > Si empleas el DataReader para cargar un ListView no te olvides del
> > > "listView1.BeginUpdate" antes de realizar el bucle que carga los


datos
y
> > el
> > > "EndUpdate" despues... Esto evita que el listview se redibuje cada


vez
> que
> > > incluimos un elemento nuevo y por lo tanto nos proporciona un poco


mas
> de
> > > velocidad.
> > >
> > > Espero haberte aclarado un poco tu duda, sino busca en google las
> > > diferencias entre DataSets y DataReaders y te lo aclarara un poco


mas.
> > >
> > > Saludos,
> > >
> > > Juan Pedro González
> > >
> > >
> > > P.D. Personalmente, por defecto suelo emplear DataReaders a no ser


de
> que
> > un
> > > DataSet me presente una clara ventaja.
> > >
> > >
> > > "Sonia" escribió en el mensaje
> > > news:
> > > > hola!
> > > > en mi aplicacion uso muchos datagrids de gran tamaño(la bd tiene
> muchos
> > > > registros) y me han aconsejado q seria mas eficiente si usara
listview
> > en
> > > > vez de tanto datagrid. nunca he usado listview y antes de


cambiar la
> > > > aplciacion me gustaria preguntar si sabeis la diferencia entre
ambos,
> q
> > me
> > > > aconsejais y donde puedo ver ejemplos de listview. uno de los
> > priencipales
> > > > problemas del datagrid es q en algunos formularios q tengo 3 o 4


me
> > tarda
> > > > demasiado en cargar los datos. no se si esto mejorara usando
listview.
> > > > conoceis alguna forma mas eficiente de hacerlo?
> > > >
> > > >
> > > >
> > >
> > >
> > >
> >
> >
> >
>
>
>



Respuesta Responder a este mensaje
#14 Juan Pedro Gonzalez
29/06/2005 - 22:29 | Informe spam
Hola Bernardo,

Aunque no he probado dicha funcion no sería mas bien:

private sub CargarListView (list as listView, strTabla as string)
dim item as new listViewItem
Dim i As Integer

sql = "select * from " & strTabla
'cargas tu datareader
while dataReader.read
item = list.Items.Add(dataReader.item(CStr(dataReader.Item(0))))
i = 1
for i to datareader.FieldCount
If (Not dataReader.IsDBNULL(i)) Then
item.SubItems.Add(dataReader.item(dataReader.Item(i)))
Else
item.SubItems.Add("")
End If
i = i + 1
next
i = 1
end while
end sub

Donde lo mas importante sería sacar el list.Item.Add fuera del bucle for
para permitir que se inserten todos los sub elementos. Personalemente no uso
una función asi porque en muchos casos me gusta guardar la clave primaria en
el Tag (Ya sea un unico campo de la base de datos o varios campos), por lo
que suelo hacerlo de una forma mas manual llendo Item por Item).

Saludos,

Juan Pedro González



"Bernardo Campos" escribió en el mensaje
news:emIPi#
Sonia, en realidad solo es un simple ejemplo que te puse para cargar


datos,
tu verás cómo lo puedes implementar mejorderrepente se me ocurre algo
asi, no lo he probado...:

private sub CargarListView (list as listView, strTabla as string)
dim item as new listViewItem
sql = "select * from " & strTabla
'cargas tu datareader
while dataReader.read
for i to datareader.FieldCount
item list.Items.Add(dataReader.item(dataReader.GetName(i)))
item.SubItems.Add(dataReader.item(dataReader.GetName(i+1)))
i = i + 2
next
i = 1
end while
end sub

Sta Cruz, Bolivia

"Sonia" wrote in message
news:OUeQ$
gracias x la funcion. ahora la pruebo. supongo q tendre en vez de ir col


por
col tendre q crearme una variable para q funcione sea el num de col q sea.
ahora lo pronare, ya q lo q kiero es q se rellenen varios listview de
diferentes tamaños y diferentes tablas al abrir el form.
por cierto, q parametros le paso para llamarla??
gracias!
"Bernardo Campos" escribió en el mensaje
news:
Te respondo entre lineasSaludos,



Sta Cruz, Bolivia

"Sonia" wrote in message
news:
> hola!
>
> en lo de editar los datos simpelmente lo q kiero es seleccionar una


fila
(y
> coger el dato de la ultima columna q sera un codigo). entonces tengo
varios
> botones. 'modificar' 'borrar' el de mofificar te lleva a otro


formulario
> donde llevo los datos seleccionados en esa fila y modifico. al volver


al
> form anterior, actualizo el datagrid. en borrar siemplemente lo borro


y
en
> insertar me voy a otro form , inserto los datos en textbox y


actualizo.
>
> esto es lo q estaba haciendo con los datagrids. es esto a lo q te
refieres q
> nos puede con los listview?
-
No, me refiero a que los cambios lo hagas directo en el listview sin
llamar a otro formulario, eso no se puede hacer.
Pero como dices que tu llamas a otro form. que carga los datos con el


dato
de la ultima columna que tienes en el listView,
(que es tu clave), eso sí se puede.
-
>
> respecto a lo de lso procedimientos almacenados no se si te refieres a
poner
> las fucniones y procedimientos de cardar datagrid etc como publicas en
un
> modulo y en cada form q los kiera hacer llamadas a ellas. si es así es
como
> lo hago.
Ok, me queda claro, pensé que no utilizabas proc. almac.
___________________________________

> lo q keria ahora es probar la diferencia haciendolo con listview, pero
kiero
> hacerlo usando datareader y si puede ser tb con una funcion o
procedimiento
> aparte para simplemente hacer llamadas a ella para cargar el listview.
pero
> el codigo q encuentro sobre esto rellena los listview con dataset y
kiero
> hacerlo con datareader. sabes donde puedo encontrar algo al respecto?
Acá te pongo un pequeño ejemplo para cargar un listView

Dim item As New ListViewItem
lstProductos.FullRowSelect = True
lstProductos.View = view.details

'Registro 1
item = lstProductos.Items.Add(dataReader.item("col1"))
item.SubItems.Add(dataReader.item("col2"))
item.SubItems.Add(dataReader.item("col3"))

'Registro 2
item = lstProductos.Items.Add(dataReader.item("col1"))
item.SubItems.Add(dataReader.item("col2"))

-


> "Bernardo Campos" escribió en el mensaje
> news:#
> > Sonia, dos cosas quería comentar:
> >
> > 1. Quizas si pones tu consultas con proced. almacenados podria
> mejorar.
> > 2. Con el listView si muestras varias columnas, no puedes editar
los
> > datos directamente en todas las columnas, solo podrás hacerlo en la
> primera
> > columna, en cambio sí lo puedes hacer con un grid. Claro esto si
quieres
> > editar los datos, pero si es solo para mostrar
> >
> >
> >
> >
> >
> >
> > Sta Cruz, Bolivia
> >
> > "Sonia" wrote in message
> > news:
> > > hola
> > > gracias por la alcaracion.
> > > voy a intentar hacerlo con datareader usando listview, pero solo


veo
> > > ejemplos de llenar_listview usando datasets. sabes donde puedo ver
el
> > > ejemplo de llenar el listview usando datareader?
> > > gracias
> > >
> > > "Juan Pedro Gonzalez" escribió en el mensaje
> > > news:#
> > > > Hola Sonia,
> > > >
> > > > La mejora de rendimiento entre un DataGrid y un ListView radica


en
la
> > > forma
> > > > de acceder a los datos. Normalmente el DataGrid se carga a


traves
de
> un
> > > > DataSet mientras que el ListView lo cargas mediante un


DataReader.
> > > >
> > > > El DataReader es mas rápido que el DataSet. Esto se hace eviente
ya
> que
> > el
> > > > DataSet se carga (de forma interna) a traves de un DataReader y
> > > > posteriormente este DataSet se asocia al DataGrid... Al emplear
> > > directamente
> > > > el DataReader ganamos algo de "velocidad". Tambien debemos
recordar
> que
> > el
> > > > DataSet almacena todas las filas en memoria mientras que el
DataReader
> > > solo
> > > > almacena la fila a la cual esta apuntando en ese momento. Esto
implica
> > que
> > > > empleamos menos recursos del sistema y por lo tanto tenemos mas
> recursos
> > > > disponibles a medida que introducimos los datos en el ListView.


La
> > contra
> > > > partida es que el DataReader no es "navegable" (No podemos
movernos
> por
> > > sus
> > > > registros libremente, y simplemente podemos avanzar)... Bueno
habria
> mas
> > > > detalles como que el DataSet lo podemos pasar en funciones pero
los
> > > > resultados de un DataReader no, y que para el DataReader debemos
tener
> > > > conexion si deseamos mostrarlos, mientras que en el DataSet al
> > > almacenarlos
> > > > en memoria los podriamos volver a mostrar sin necesidad de
volvernos a
> > > > conectar a la base de datos... etc...
> > > >
> > > > Si empleas el DataReader para cargar un ListView no te olvides


del
> > > > "listView1.BeginUpdate" antes de realizar el bucle que carga los
datos
> y
> > > el
> > > > "EndUpdate" despues... Esto evita que el listview se redibuje


cada
vez
> > que
> > > > incluimos un elemento nuevo y por lo tanto nos proporciona un


poco
mas
> > de
> > > > velocidad.
> > > >
> > > > Espero haberte aclarado un poco tu duda, sino busca en google


las
> > > > diferencias entre DataSets y DataReaders y te lo aclarara un


poco
mas.
> > > >
> > > > Saludos,
> > > >
> > > > Juan Pedro González
> > > >
> > > >
> > > > P.D. Personalmente, por defecto suelo emplear DataReaders a no


ser
de
> > que
> > > un
> > > > DataSet me presente una clara ventaja.
> > > >
> > > >
> > > > "Sonia" escribió en el mensaje
> > > > news:
> > > > > hola!
> > > > > en mi aplicacion uso muchos datagrids de gran tamaño(la bd


tiene
> > muchos
> > > > > registros) y me han aconsejado q seria mas eficiente si usara
> listview
> > > en
> > > > > vez de tanto datagrid. nunca he usado listview y antes de
cambiar la
> > > > > aplciacion me gustaria preguntar si sabeis la diferencia entre
> ambos,
> > q
> > > me
> > > > > aconsejais y donde puedo ver ejemplos de listview. uno de los
> > > priencipales
> > > > > problemas del datagrid es q en algunos formularios q tengo 3 o


4
me
> > > tarda
> > > > > demasiado en cargar los datos. no se si esto mejorara usando
> listview.
> > > > > conoceis alguna forma mas eficiente de hacerlo?
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > >
> > >
> > >
> >
> >
> >
>
>
>


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