Ayuda Novato

02/03/2006 - 15:39 por Mauro | Informe spam
Ayer instale el VS 2005 profesional, agregre un datagrid a una aplicacion
windows con las opciones de insercion borrado edicion etc, cuando hago un
DEBUG de la aplicacion, el mismo dme devuelve los datos de la bd
pero cuando edito o borro o agrego datos al grid, no se reflejan en la bd.
Por que?

Preguntas similare

Leer las respuestas

#6 Mauro
10/03/2006 - 13:20 | Informe spam
Luis
buenisimo lo voy a probar gracias!!!!

"Luis Miguel Blanco" wrote in
message news:
Hola Mauro

En primer lugar discúlpame por el retraso en mi respuesta, pero he tenido
una acumulación de trabajo importante en estos dos últimos días que me han
impedido entrar en los foros con la regularidad necesaria.

Después de leer el escenario que planteas, he simulado el modelo de datos
que me proporcionaste, creando una base de datos en SQL Server con estas


dos
tablas MAQUINA y DEPOSITO.

A continuación, en un formulario, he agregado un DataGridView, y lo he
cargado con los datos de la tabla MAQUINA. Ahora entramos en el punto
importante de esta cuestión: conseguir que el último campo en el
DataGridView, en lugar de mostrar el campo DEP_ID, se conecte con la tabla
DEPOSITO, y muestre de dicha tabla, el valor del campo DEP_DESCRIPCION, y
para rizar el rizo 8-) que además, cuando el usuario se sitúe en una de
dichas celdas, que pueda abrir un ComboBox, que le muestre todos los


valores
del campo DEP_DESCRIPCION de la tabla DEPOSITO.

Para conseguir esto, en primer lugar debemos eliminar del diseño actual


del
DataGrid, la columna correspondiente al campo DEP_ID de la tabla MAQUINA.


A
continuación, crearemos un objeto de la clase DataGridViewComboBoxColumn,


que
como podemos adivinar por su nombre, consiste en una columna para usar en


un
control DataGrid, que nos visualizará las celdas en formato ComboBox.

Como siguiente paso, configuraremos el objeto DataGridViewComboBoxColumn
para que se conecte con la tabla DEPOSITO, y que rellene la lista con los
valores del campo DEP_DESCRIPCION, pero devolviendo internamente como


valor
seleccionado, el campo DEP_ID. Agregaremos este objeto a la colección de
columnas del DataGridView, y a partir de ese momento, dicha columna del


Grid
nos devolverá el identificador del depósito.

Bien, pues creo que estos serían los principales pasos a dar, te adjunto


un
bloque de código con un ejemplo para que lo pruebes, y hagas las


adaptaciones
que necesites para tu caso.

'//////////////////////////////////////////////////////////////////
Imports System.Data.SqlClient

Public Class Form3
Private Sub Form3_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Dim sCadConex As String
sCadConex = "Integrated Security=SSPI;Persist Security


Info=False;"
& _
"Initial Catalog=MAQUINARIA;Data Source=localhost"

Dim oConexion As New SqlConnection(sCadConex)

Dim oComando As New SqlCommand("SELECT * FROM MAQUINA", oConexion)
Dim oAdapter As New SqlDataAdapter()
oAdapter.SelectCommand = oComando
Dim oTable1 As New DataTable()
oTable1.Locale = System.Globalization.CultureInfo.InvariantCulture
oConexion.Open()
oAdapter.Fill(oTable1)
oConexion.Close()

Me.DataGridView1.DataSource = oTable1
Me.DataGridView1.Columns.Remove("DEP_ID")


Dim oConexion2 As New SqlConnection(sCadConex)
Dim oComando2 As New SqlCommand("SELECT * FROM DEPOSITO",


oConexion)
Dim oAdapter2 As New SqlDataAdapter()
oAdapter2.SelectCommand = oComando2
Dim oTable2 As New DataTable()
oTable2.Locale = System.Globalization.CultureInfo.InvariantCulture
oConexion2.Open()
oAdapter2.Fill(oTable2)
oConexion2.Close()


Dim oComboboxCol As New DataGridViewComboBoxColumn()
oComboboxCol.Name = "colDeposito"
oComboboxCol.HeaderText = "Deposito"
oComboboxCol.DataSource = oTable2
oComboboxCol.DataPropertyName = "DEP_DESCRIPCION"
oComboboxCol.ValueMember = "DEP_ID"
oComboboxCol.DisplayMember = "DEP_DESCRIPCION"

Me.DataGridView1.Columns.Add(oComboboxCol)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim aFilas As DataGridViewRowCollection
aFilas = Me.DataGridView1.Rows

For Each oFila As DataGridViewRow In aFilas
For Each celda As DataGridViewCell In oFila.Cells
If celda.ColumnIndex = 2 Then
Dim scelda As Object
scelda = celda.Value
MessageBox.Show(scelda)
End If
Next
Next
End Sub
End Class
'//////////////////////////////////////////////////////////////////

Espero que sea lo que necesitabas.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Mauro" wrote:

> bien, supongamos que tengo 2 tablas, una llamada DEPOSITO con los campos
> DEP_ID y DEP_DESCRIPCION
> y una segunda tabla que la referencia llamada MAQUINA con los campos


MAQ_ID,
> MAQ_NOMBRE y DEP_ID
> siendo en DEP_ID una clave foranea que referencia a la tabla DEPOSITO.
>
> Con ese escenario lo que quiero lograr es tener una grilla con los datos


de
> las MAQUINAS pero que en lugar de mostrarme el id del deposito, me


muetre la
> descripcion del mismo, y que ademas al agregar un registro o


modificarlo,
> que en la columna se despliegue un combobox con las descripciones de los
> depositos
>
> pero obviamente guardando el ID.
>
> he logrado hacerlo con el formulario de tipo detalles(arrastrando desde


el
> data source la tabla primaria al combobox), pero no con la grilla y me
> interesa mucho por que suelo mostrar la grilla y los detalles en el


mismo
> formulario, asi lo hacia en VB6, veo que estas cosas estan muy
> simplificadas en el 2005, pero aun no le
> encuentro la vuelta de tuerca necesaria para este tipo de formulario.
>
> saludos y gracias adelantadas.
> Mauro
>
> "Luis Miguel Blanco" wrote


in
> message news:
> > Hola Mauro
> >
> > No hay de qué, celebro que te funcionara 8-)
> >
> > Respecto a tu duda acerca de las lookuptables, no llego a comprender


del
> > todo el escenario que me planteas, por lo que te agradecería que me
> > detallaras un poco más lo que quieres hacer, en lo referente a qué
> controles
> > quieres usar en tu formulario, qué información debería almacenar cada
> > control, y el resultado al interaccionar con dichos controles.
> >
> > Si utilizas SQL Server, puedes usar la base de datos de ejemplo


Northwind
> > para los ejemplos con las tablas que me envíes.
> >
> > Un saludo
> > Luis Miguel Blanco
> > http://www.dotnetmania.com
> >
> >
> > "Mauro" wrote:
> >
> > > Muchas gracias Luis!!! ya lo hice funcionar, ahora tengo otra duda,


como
> > > hago para hacer formularios de datos con tablas
> relacionadas(lookuptables en
> > > los BOLs)
> > > Vi un ejemplo en la ayuda pero solo sirve para formularios de tipo
> detalles,
> > > si agrego una grilla al formulario, la misma me muestra la info
> > > correspondiente
> > > al valor seleccionado en el combo de los detalles(como un WHERE),


ademas
> no
> > > puedo hacer que la grilla me muestre el valor relacionado , tal como


el
> > > combo en los detalles. sino que me muestra la columna ID de la clave
> > > foranea.
> > >
> > > espero que se entienda
> > > Mauro
> > >
> > >
> > >
> > > "Luis Miguel Blanco"


wrote
> in
> > > message news:
> > > > Hola Mauro
> > > >
> > > > Supongo que has agregado el datagrid a tu formulario utilizando el
> > > asistente
> > > > para configurar la conexión de datos al grid, lo cual tiene la


ventaja
> de
> > > que
> > > > te facilita el proceso de creación del control, pero oculta


algunos
> > > aspectos
> > > > que en algunos casos es necesario conocer.
> > > >
> > > > Con toda seguridad, este asistente del datagrid, habrá añadido en


la
> parte
> > > > inferior del diseñador del formulario un objeto DataSet y un
> TableAdapter,
> > > > los cuales necesita el DataGrid a la hora de obtener/actualizar la
> > > > información desde/hacia la base de datos.
> > > >
> > > > Más concretamente, el objeto TableAdapter, es el encargado de


tomar la
> > > > conexión contra la base de datos, establecer dicha conexión, y
> rellenar el
> > > > DataSet con los datos de una tabla que será la que muestre el
> DataGrid.
> > > > Fíjate en el evento Load() de tu formulario, y seguramente tendrás


una
> > > línea
> > > > en la que el objeto TableAdapter rellena el DataSet de forma


parecida
> a la
> > > > siguiente:
> > > >
> > > > '//////////////////////////
> > > >


Me.NombreBBDDTablaTableAdapter.Fill(Me.NombreBBDDDataSet.NombreTabla)
> > > > '//////////////////////////
> > > >
> > > > Es por ello, que al ejecutar tu aplicación, el asistente del


DataGrid
> se
> > > ha
> > > > ocupado de rellenar este control con los datos para que navegues


por
> la
> > > > tabla, edites, añadas registros, etc.
> > > >
> > > > El único detalle que en este caso falta, y que debemos hacer


nosotros
> > > > manualmente, sería indicar al DataSet asociado al DataGrid, y que


es
> quien
> > > > realmente tiene los datos, que cuando hayamos terminado de


editarlos,
> > > > actualice de nuevo la tabla física de la base de datos con la que
> tenemos
> > > en
> > > > el DataSet, ya que en caso contrario, la información del DataSet,


al
> > > tratarse
> > > > de datos desconectados de la base de datos, se perdería.
> > > >
> > > > Esto lo puedes hacer en el evento de descarga el formulario, con


un
> > > control
> > > > Button, etc. Por ejemplo, si lo haces en el Click de un botón,


sería
> de
> > > forma
> > > > similar a la siguiente:
> > > >
> > > > '//////////////////////////
> > > > Private Sub btnActualizarBD_Click(ByVal sender As System.Object,


ByVal
> e
> > > As
> > > > System.EventArgs) Handles btnActualizarBD.Click
> > > >
> > > >
> Me.NombreBBDDTablaTableAdapter.Update(Me.NombreBBDDDataSet.NombreTabla)
> > > >
> > > > End Sub
> > > > '//////////////////////////
> > > >
> > > > Prueba añadiendo este código a tu proyecto y creo que ya te


funcionará
> la
> > > > actualización.
> > > > Un saludo
> > > > Luis Miguel Blanco
> > > > http://www.dotnetmania.com
> > > >
> > > >
> > > > "Mauro" wrote:
> > > >
> > > > > Ayer instale el VS 2005 profesional, agregre un datagrid a una
> > > aplicacion
> > > > > windows con las opciones de insercion borrado edicion etc,


cuando
> hago
> > > un
> > > > > DEBUG de la aplicacion, el mismo dme devuelve los datos de la bd
> > > > > pero cuando edito o borro o agrego datos al grid, no se reflejan


en
> la
> > > bd.
> > > > > Por que?
> > > > >
> > > > >
> > > > >
> > >
> > >
> > >
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida