Como Manejar un DataGrid
Publicado por Adel Castillo (5 intervenciones) el 04/06/2005 19:56:02
Hola:
Tengo una duda que solucionar, ojala alguien me ayude. Tengo una BD en Access. Realizo una coneccion a ella mediante un objeto AdoDB.Connection denominado cnn y tambien Mediante un Objeto AdoDataConnection con una consulta que es la siguiente:
With cnn
.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\Datos\ProyCot.mdb;" & _
"Mode=ReadWrite;Persist Security Info=False"
.Open
MDI.Show
End With
AdoClientes.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\Datos\ProyCot.mdb;" & _
"Mode=ReadWrite;Persist Security Info=False"
AdoClientes.RecordSurce="SELECT Clientes.IdCliente, Clientes.IdCiudad, Clientes.Nombres, Clientes.Direccion, Clientes.Telefonos, Ciudades.Ciudad " & _
"FROM Ciudades INNER JOIN Clientes ON Ciudades.IdCiudad = Clientes.IdCiudad &_ "ORDER BY Clientes.Nombres;", cnn,adOpenStatic,adLockOptimistic,adCmdText
Bueno este AdodataConnection vinculo a un DataGrid llamado "grdClientes", el cual mediante el siguiente codigo hago invisibles todos los Id que tiene esta consulta para el usuario y dimensiono el tamaño inicial de columnas:
With grdClientes
Set .DataSource = AdoClientes
For N = 0 To 1
.Columns(N).Visible = False
Next
.Columns(2).Width = 6000
.Columns(3).Width = 3000
.Columns(4).Width = 3000
.Columns(5).Width = 1500
End With
Cada que el usuario cambia de celda dentro del DataGrid ubico al recordset del AdoDataConnection en el registro escogido de la siguiente manera:
Private Sub grdEdiciones_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Dim Col As Integer
With AdoClientes.Recordset
Col = grdClientes.Col
grdClientes.Col = 0
.MoveFirst
.Find "IdCliente=" & grdClientes.Text
grdClientes.Col = Col
End With
End Sub
Tengo un DataList a un costado del Datagrid llamado "lstCiudades", en el cual registro todas las ciudades vigentes en mi BD, usando un Recordset vinculado a este Objeto mediante el siguiente codigo:
RsDatos.Open "SELECT Ciudades.IdCiudad, Ciudades.Ciudad " & _
"From Ciudades " & _
"ORDER BY Ciudades.Ciudad;", cnn, adOpenStatic, adLockReadOnly, adCmdText
With lstCiudades
Set .DataSource = RsDatos
Set .RowSource = RsDatos
.DataField = "IdCiudad"
.BoundColumn = "IdCiudad"
.ListField = "Ciudad"
End With
Ahora quiero que el usuario escoja una ciudad dentro del dataList y automaticamente se actualice esta en el Cliente enfocado en el DataGrid.
Trato de realizarlo usando el evento Click del Datalist de la siguiente manera y me sale un error que nose como solucionar:
Private Sub lstCiudades_Click()
With AdoClientes.Recordset
If grdClientes <> lstDatos Then
.Fields("IdCiudad") = lstDatos.BoundText
.Update
grdClientes.Text = lstDatos.Text
End If
End With
End Sub
Al cambiar de celda en el DataGrid, despues de escoger una ciudad se presenta el siguiente error: "INFORMACIÓN DE COLUMNA CLAVE INSUFICIENTE PARA REALIZAR LA OPERACIÓN UPDATE O REFRESH"
Si alguien me dice que hago mal le agradecería un montón, Gracias
Tengo una duda que solucionar, ojala alguien me ayude. Tengo una BD en Access. Realizo una coneccion a ella mediante un objeto AdoDB.Connection denominado cnn y tambien Mediante un Objeto AdoDataConnection con una consulta que es la siguiente:
With cnn
.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\Datos\ProyCot.mdb;" & _
"Mode=ReadWrite;Persist Security Info=False"
.Open
MDI.Show
End With
AdoClientes.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & App.Path & "\Datos\ProyCot.mdb;" & _
"Mode=ReadWrite;Persist Security Info=False"
AdoClientes.RecordSurce="SELECT Clientes.IdCliente, Clientes.IdCiudad, Clientes.Nombres, Clientes.Direccion, Clientes.Telefonos, Ciudades.Ciudad " & _
"FROM Ciudades INNER JOIN Clientes ON Ciudades.IdCiudad = Clientes.IdCiudad &_ "ORDER BY Clientes.Nombres;", cnn,adOpenStatic,adLockOptimistic,adCmdText
Bueno este AdodataConnection vinculo a un DataGrid llamado "grdClientes", el cual mediante el siguiente codigo hago invisibles todos los Id que tiene esta consulta para el usuario y dimensiono el tamaño inicial de columnas:
With grdClientes
Set .DataSource = AdoClientes
For N = 0 To 1
.Columns(N).Visible = False
Next
.Columns(2).Width = 6000
.Columns(3).Width = 3000
.Columns(4).Width = 3000
.Columns(5).Width = 1500
End With
Cada que el usuario cambia de celda dentro del DataGrid ubico al recordset del AdoDataConnection en el registro escogido de la siguiente manera:
Private Sub grdEdiciones_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Dim Col As Integer
With AdoClientes.Recordset
Col = grdClientes.Col
grdClientes.Col = 0
.MoveFirst
.Find "IdCliente=" & grdClientes.Text
grdClientes.Col = Col
End With
End Sub
Tengo un DataList a un costado del Datagrid llamado "lstCiudades", en el cual registro todas las ciudades vigentes en mi BD, usando un Recordset vinculado a este Objeto mediante el siguiente codigo:
RsDatos.Open "SELECT Ciudades.IdCiudad, Ciudades.Ciudad " & _
"From Ciudades " & _
"ORDER BY Ciudades.Ciudad;", cnn, adOpenStatic, adLockReadOnly, adCmdText
With lstCiudades
Set .DataSource = RsDatos
Set .RowSource = RsDatos
.DataField = "IdCiudad"
.BoundColumn = "IdCiudad"
.ListField = "Ciudad"
End With
Ahora quiero que el usuario escoja una ciudad dentro del dataList y automaticamente se actualice esta en el Cliente enfocado en el DataGrid.
Trato de realizarlo usando el evento Click del Datalist de la siguiente manera y me sale un error que nose como solucionar:
Private Sub lstCiudades_Click()
With AdoClientes.Recordset
If grdClientes <> lstDatos Then
.Fields("IdCiudad") = lstDatos.BoundText
.Update
grdClientes.Text = lstDatos.Text
End If
End With
End Sub
Al cambiar de celda en el DataGrid, despues de escoger una ciudad se presenta el siguiente error: "INFORMACIÓN DE COLUMNA CLAVE INSUFICIENTE PARA REALIZAR LA OPERACIÓN UPDATE O REFRESH"
Si alguien me dice que hago mal le agradecería un montón, Gracias
Valora esta pregunta


0