Consulta Novato;Forma de enlazar un grid

27/12/2006 - 13:42 por David | Informe spam
Hola, estoy empezando con .Net y la verdad es que después de tantos años
con VB6, me está costando aconstumbrarme.
Mi primer programa consiste en ir capturando incidencias de una web y
guardando los datos en una BBDD de sql server 2000. Hasta allí todo bien.
A esos datos tienen que acceder los puestos clientes para ver las
incidencias que recojo de la web, por lo que se necesita que el grid que
está enlazado a la tabla "incidencias" esté en modo conectado, para que
las incidencias salgan en el grid al instante o por lo menos cuando se
haga un refresh.
¿Cual es la mejor forma de hacerlo? Me imagino que si es en modo
conectado habrá que hacerlo con un datareader. Pero ¿y si quiero
modficar los datos?

En resumen, es lo que en VB6 se haría enlazando el TdbGrid a la base de
datos a través del Datasource.


Muchas gracias


David

Preguntas similare

Leer las respuestas

#1 SoftJaén
27/12/2006 - 17:15 | Informe spam
"David" escribió:

Mi primer programa consiste en ir capturando incidencias de una web y
guardando los datos en una BBDD de sql server 2000. Hasta allí todo bien.
A esos datos tienen que acceder los puestos clientes para ver las
incidencias que recojo de la web, por lo que se necesita que el grid que
está enlazado a la tabla "incidencias" esté en modo conectado, para que
las incidencias salgan en el grid al instante o por lo menos cuando se
haga un refresh.
¿Cual es la mejor forma de hacerlo? Me imagino que si es en modo conectado
habrá que hacerlo con un datareader. Pero ¿y si quiero modficar los datos?



Hola, David:

Entiendo que estás utilizando dos aplicaciones distintas: una, la que
captura las incidencias de la web y las guarda en la base de datos, y otra,
las aplicaciones de los equipos cliente que leen las incidencias desde la
base de datos de SQL Server.

En cuanto a la primera aplicación, parece ser que va bien según nos
comentas, porque todo consiste en insertar nuevos registros conforme surgan
las incidencias. Y referente a la segunda aplicación, si los datos los
muestras en un control tipo Grid, entonces se supone que estás utilizando un
objeto DataSet, por lo que la aplicación cliente deberá de actualizar cada x
tiempo el objeto DataSet, para que los nuevos registros aparezcan en el
Grid.

Para actualizar el DataSet, lo mismo hasta te viene bien el siguiente
procedimiento:

Private Sub UpdateSqlClient(ByVal ds As DataSet, _
ByVal cnnString As String, _
ByVal sql As String, _
ByVal tableName As String)

' Creamos un objeto SqlConnection
Dim cnn As New SqlConnection(cnnString)

Try
' Abrimos la conexión
cnn.Open()

' Creamos un adaptador de datos
Dim da As New SqlDataAdapter(sql, cnn)

' Rellenamos el objeto DataSet
da.Fill(ds, tableName)

' Actualizamos el objeto DataSet
da.Update(ds, tableName)

Catch ex As Exception
MessageBox.Show(ex.Message, "Actualizar Datos")

Finally
' Cerramos la conexión
cnn.Close()
cnn = Nothing

End Try

End Sub

Por ejemplo, al procedimiento lo llamarías de la siguiente manera:

UpdateSqlClient(objetoDataSet, _
cadenaConexionSqlServer, _
"SELECT * FROM Incidencias", _
"Incidencias")

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 Anonimo
02/01/2007 - 18:19 | Informe spam
Gracias por tu respuesta, funciona perfectamente. Pero ahora el problema que
tengo es que al refrescar el datagrid de incidencias ( cada x segundos )
siempre se queda la posición de la fila en la primera fila, y me gustaría
que se quedara en la misma fila en la que estaba.
En vb6, se podría hacer moviendo el registro a la posición previamente
guardada, pero en .net ¿Cómo se haría?
Lo he intentado así, pero no funciona porque no se decirle al grid que se
mueva a la posición que quiera.

Me.text = UltraGrid1.ActiveRow.Cells("id_incidencia").Value
RefrescaGrid
dr = DsIncidencias.Incidencias.FindById_Incidencia(Me.Text)


Muchas gracias,

David

"SoftJaén" wrote in message
news:
"David" escribió:

Mi primer programa consiste en ir capturando incidencias de una web y
guardando los datos en una BBDD de sql server 2000. Hasta allí todo bien.
A esos datos tienen que acceder los puestos clientes para ver las
incidencias que recojo de la web, por lo que se necesita que el grid que
está enlazado a la tabla "incidencias" esté en modo conectado, para que
las incidencias salgan en el grid al instante o por lo menos cuando se
haga un refresh.
¿Cual es la mejor forma de hacerlo? Me imagino que si es en modo
conectado
habrá que hacerlo con un datareader. Pero ¿y si quiero modficar los
datos?



Hola, David:

Entiendo que estás utilizando dos aplicaciones distintas: una, la que
captura las incidencias de la web y las guarda en la base de datos, y
otra,
las aplicaciones de los equipos cliente que leen las incidencias desde la
base de datos de SQL Server.

En cuanto a la primera aplicación, parece ser que va bien según nos
comentas, porque todo consiste en insertar nuevos registros conforme
surgan
las incidencias. Y referente a la segunda aplicación, si los datos los
muestras en un control tipo Grid, entonces se supone que estás utilizando
un
objeto DataSet, por lo que la aplicación cliente deberá de actualizar cada
x
tiempo el objeto DataSet, para que los nuevos registros aparezcan en el
Grid.

Para actualizar el DataSet, lo mismo hasta te viene bien el siguiente
procedimiento:

Private Sub UpdateSqlClient(ByVal ds As DataSet, _
ByVal cnnString As String, _
ByVal sql As String, _
ByVal tableName As String)

' Creamos un objeto SqlConnection
Dim cnn As New SqlConnection(cnnString)

Try
' Abrimos la conexión
cnn.Open()

' Creamos un adaptador de datos
Dim da As New SqlDataAdapter(sql, cnn)

' Rellenamos el objeto DataSet
da.Fill(ds, tableName)

' Actualizamos el objeto DataSet
da.Update(ds, tableName)

Catch ex As Exception
MessageBox.Show(ex.Message, "Actualizar Datos")

Finally
' Cerramos la conexión
cnn.Close()
cnn = Nothing

End Try

End Sub

Por ejemplo, al procedimiento lo llamarías de la siguiente manera:

UpdateSqlClient(objetoDataSet, _
cadenaConexionSqlServer, _
"SELECT * FROM Incidencias", _
"Incidencias")

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
#3 SoftJaén
03/01/2007 - 15:54 | Informe spam


... no se decirle al grid que se mueva a la posición que quiera.



Si por ejemplo estás utilizando un control DataGridView, obtendrías la fila
actual de la siguiente manera:

Dim fila As Int32 = DataGridView1.CurrentRow.Index

Y si deseas posicionarte en una fila en concreto, por ejemplo en la cuarta
fila, ejecutarías lo siguiente:

DataGridView1.CurrentCell = DataGridView1.Rows(3).Cells(0)

Ten en cuenta que los índices de las filas y columnas están basados en cero.

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