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

#6 Sonia
27/06/2005 - 09:28 | Informe spam
hola
exactamente tienen muchas filas pero no las muestro todas. solo las q
pertenecen a un codigo q solo seran por las 10 filas. lo q si q es muy
grande es la bd. no se si tendra algo q ver.
de lo q me preguntabas, te dire q en el form q mas tarda solo relleno una
serie de textbox (registro) y 4 datagrid. el registro sale en seguida y lo q
tardan son los datagrids. te pongo el codigo de uno a ver si ves algo
ineficiente, ya q me dijiste q seria mas facil decirme lo q pasa si vieras
el codigo.

'boton buscar

Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

If Clave.Text <> "" Then

cole = Clave.Text

leer_registro(cole)

'relleno tb 2 campos de otras tablas mediante un listbox

mysql = "SELECT NIF FROM(CLIENTESSP) WHERE CC= '" & cole & "';"

Llenar_Listbox(mysql, CadenaConexion, nifs)

mysql = "SELECT distinct AUX FROM(PEDIDOS) WHERE COLEGIO= '" & cole & "';"

Llenar_Listbox(mysql, CadenaConexion, cuenta2)

'ahora van los datagrids. Pongo solo 1 pero hay 4

Dim nuevo As cargadatagrid 'nombre del modulo donde esta la funcion carga

mysql = "select NOMBRE &' '& APELLIDOS,CARGO,HORARIO,EMAIL,ID"

mysql = mysql & " FROM (Contactos) WHERE ID_COL='" & klave & "'ORDER BY
Contactos.ID DESC"

nuevo.Carga(mysql, "Contactos", DataGrid1)

DataGrid1.ReadOnly = True

End If

'las variables y llamadas q uso en lso datagrids estan declaradas en un
modulo 'cargadatagrid' de forma general. Las uso siempre:

Public Overloads Shared Sub Carga(ByVal sql As String, ByVal tabla As
String, ByVal dataG As DataGrid, Optional ByVal titulo As String = "")

Try

Dim DataAdapter As OleDbDataAdapter = New OleDbDataAdapter(sql,
CadenaConexion)

Dim MiData As DataSet = New DataSet

Dim datav As New DataView

DataAdapter.Fill(MiData, tabla)

datav.Table = MiData.Tables(tabla)

dataG.DataSource = datav

If titulo <> "" Then dataG.CaptionText = titulo

Catch Errores As Exception

MsgBox(Errores.ToString)

End Try

vermuestras.Visible = True

vercoment.Visible = True

vermuestraspedi.Visible = True

DataGrid2.Visible = False

DataGrid3.Visible = False

DataGrid4.Visible = False

End Sub



Private Sub leer_registro(ByVal colegio As String)

Dim x As Int16

Dim tb As System.Windows.Forms.Control

ReDim registro(11)

ReDim reg(0)

mysql = "SELECT NOMBR, DIREC, LOCALIDAD, PROVI, TELEF, EMAIL, NUFAX,
CLASE,DPOST,AULAS_CURSO,PREFERENTE, CONGREGACION "

mysql = mysql & " FROM(CENTROS1) WHERE KLAVE = '" & colegio & "';"

Dim myReader As OleDbDataReader

Dim myConnection As New OleDbConnection(CadenaConexion)

Dim myCommand As New OleDbCommand(mysql, myConnection)

myCommand.Connection.Open()

myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

While myReader.Read()

For x = 0 To 11

registro(x) = myReader.Item(x).ToString

Next

End While

myReader.Close() : myConnection.Close() : myCommand.Dispose()

For Each tb In Me.Controls

If TypeOf tb Is TextBox Then

If tb.TabIndex <= 11 Then

tb.Text = registro(tb.TabIndex)

End If

End If

Next


End Sub



"Tristan" escribió en el mensaje
news:
Mostrar la cita
mostrar
Mostrar la cita
Tendrás
Mostrar la cita
forma
Mostrar la cita
mejor
Mostrar la cita
#7 Juan Pedro Gonzalez
27/06/2005 - 12:17 | Informe spam
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:
Mostrar la cita
#8 Sonia
27/06/2005 - 18:47 | Informe spam
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:#
Mostrar la cita
forma
Mostrar la cita
directamente
Mostrar la cita
solo
Mostrar la cita
sus
Mostrar la cita
almacenarlos
Mostrar la cita
el
Mostrar la cita
un
Mostrar la cita
en
Mostrar la cita
me
Mostrar la cita
priencipales
Mostrar la cita
tarda
Mostrar la cita
#9 Bernardo Campos
27/06/2005 - 19:56 | Informe spam
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:
Mostrar la cita
el
Mostrar la cita
el
Mostrar la cita
que
Mostrar la cita
contra
Mostrar la cita
que
Mostrar la cita
de
Mostrar la cita
que
Mostrar la cita
muchos
Mostrar la cita
q
Mostrar la cita
#10 Sonia
27/06/2005 - 21:09 | Informe spam
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?

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.
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?


"Bernardo Campos" escribió en el mensaje
news:#
Mostrar la cita
mejorar.
Mostrar la cita
primera
Mostrar la cita
un
Mostrar la cita
que
Mostrar la cita
que
Mostrar la cita
recursos
Mostrar la cita
por
Mostrar la cita
mas
Mostrar la cita
y
Mostrar la cita
listview
Mostrar la cita
ambos,
Mostrar la cita
listview.
Mostrar la cita
Ads by Google
Search Busqueda sugerida