Foros del Web » Programación para mayores de 30 ;) » .NET »

Actualizar BD al Modificar Celda de un DataGrid

Estas en el tema de Actualizar BD al Modificar Celda de un DataGrid en el foro de .NET en Foros del Web. Hola a todos, en un DataGrid, modifico una celda y quiero que al momento de darle enter me Actualice la Base de Datos, como le ...
  #1 (permalink)  
Antiguo 18/01/2006, 04:53
 
Fecha de Ingreso: marzo-2005
Mensajes: 33
Antigüedad: 19 años, 1 mes
Puntos: 0
Actualizar BD al Modificar Celda de un DataGrid

Hola a todos, en un DataGrid, modifico una celda y quiero que al momento de darle enter me Actualice la Base de Datos, como le hago?, ya intente con el CurrentCellChange y con keypress y con estos eventos no lo consigo.
Alguien sabe alguna formade hacerlo?

Gracias.
  #2 (permalink)  
Antiguo 18/01/2006, 08:56
 
Fecha de Ingreso: marzo-2005
Mensajes: 26
Antigüedad: 19 años, 1 mes
Puntos: 0
Hola, mira lo que puedes hacer es trabajar con el DataGridTableStyle y hacer lo siguiente

Código:
DataGridTableStyle objGridTableStyle=new DataGridTableStyle();
objGridTableStyle.MappingName="NombreTabla";
//Agregar las Columnas a la Grilla
//Columna1
DataGridTextBoxColumn col = new DataGridTextBoxColumn();
//Evento en el que enviaras a actualizar en tu base
col.TextBox.KeyPress+=new KeyPressEventHandler(TextBox_KeyPress);

objGridTableStyle.GridColumnStyles.Add(col);
objGridTableStyle.GridColumnStyles[0].MappingName = "ColumnaDeTuTabla";
objGridTableStyle.GridColumnStyles[0].HeaderText = "NombreAMostrar"

this.dgrGrilla.DataSource = dtTabla;
this.dgrGrilla.TableStyles.Add(objGridTableStyle);
Eso te puede servir porque a la columna le estás añadiendo un TextBox en el cual puedes manejar todos los eventos que necesites

Espero te pueda servir, si necesitas que te aclare algo no dudes en preguntar

Saludos,
  #3 (permalink)  
Antiguo 18/01/2006, 10:03
 
Fecha de Ingreso: marzo-2005
Mensajes: 33
Antigüedad: 19 años, 1 mes
Puntos: 0
Gracias Hunter_Net,he podido hacer mas o menos lo que queria escribiendo el siguiente codigo en el evento CurrentCellChange:

Código:
If DataGridAlarmas.Item(ifrmFila, ifrmColumna) <> ifrmValorCelda Then
Dim sSql As String sSql = "SELECT * FROM " & constTablaLimitesCaudales & " WHERE LEFT$(CONTADOR, 1) = '1'" & " ORDER BY CONTADOR " ' Actualizar una tabla para .NET Conectar(constDireccionBaseDatos, sSql) subCalcularCaudalesMaxYMinFlex(ifrmFila + 1) End If
ifrmFila = DataGridAlarmas.CurrentRowIndex ifrmColumna = DataGridAlarmas.CurrentCell.ColumnNumber ifrmValorCelda = DataGridAlarmas.Item(ifrmFila, ifrmColumna)
la funcion subCalcularCaudalesMaxYMinFlex calcula valores que quiero modificar en otras columnas del datagrid.

Las variables ifrmFila, iFrmColumna y ifrmValorCelda son el valor de la fila , la columna y el valor de la celda en un momento dado. De este modo si se ha producido un cambio en una celda hago que se modifiquen las columnas que quiero cambiar y actualizo la base de datos(todo esto esta dentro de la funcion subCalcularCaudalesMaxYMinFlex)

este codigo me da un problema y es que cuando modifico el valor de una celda me realiza los calculos pero no me cambia de celda al darle a intro o hacer click sobre otra celda sino k se keda en la misma.

Echale un vistazo si te parece buena idea si puedes y gracias por responderme.
  #4 (permalink)  
Antiguo 18/01/2006, 13:43
 
Fecha de Ingreso: marzo-2005
Mensajes: 26
Antigüedad: 19 años, 1 mes
Puntos: 0
mmmm pues la verdad a simple vista no veo donde puede estar el problema a no ser que en tu finción subCalcularCaudalesMaxYMinFlex modifiques la propiead CurrentCell y por eso se te quede siempre ahí, porque me imagino que cuando no modificas el valor de alguna celda si te permite moverte por las demás celdas??? o tampoco?? xq si ahí si t funciona debe ser porque de alguna manera estás modificando la celda actual en tu método.

Quisas si pudieras poner el método para ver si por ahi está el problema

Saludos,
  #5 (permalink)  
Antiguo 19/01/2006, 03:49
 
Fecha de Ingreso: marzo-2005
Mensajes: 33
Antigüedad: 19 años, 1 mes
Puntos: 0
Este es el codigo del metodo subCalcularCaudalesMaxYMinFlex:

Código:
    Private Sub subCalcularCaudalesMaxYMinFlex(ByVal fila As Integer)
        Dim dIncremento As Double
        Dim dCaudalMax As Double
        Dim dCaudalMin As Double
        Dim dbDataRow As DataRow

        dIncremento = System.Math.Round(DataGridAlarmas.Item(fila - 1, 5) * DataGridAlarmas.Item(fila - 1, 6) / 100, 2)
        dCaudalMax = System.Math.Round(DataGridAlarmas.Item(fila - 1, 5) + dIncremento, 2)
        dCaudalMin = System.Math.Round(DataGridAlarmas.Item(fila - 1, 5) - dIncremento, 2)

        'PRUEBAS

        DataGridAlarmas.Item(fila - 1, 3) = dCaudalMax
        DataGridAlarmas.Item(fila - 1, 4) = dCaudalMin

        'refrescamos el datagrid para que muestre los nuevos valores
        DataGridAlarmas.Refresh()

        dbDataSet.Tables(NombreTabla).Rows(fila - 1).Item("CAUDAL_NOMINAL") = DataGridAlarmas.Item(fila - 1, 5)
        dbDataSet.Tables(NombreTabla).Rows(fila - 1).Item("FC_MAX") = dCaudalMax
        dbDataSet.Tables(NombreTabla).Rows(fila - 1).Item("FC_MIN") = dCaudalMin

        dbDataAdapter.Update(dbDataSet, NombreTabla)

    End Sub
Cuando no modifico la celda si me permite moverme, solo se queda en la misma celda cuando la modifico.
  #6 (permalink)  
Antiguo 19/01/2006, 11:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 33
Antigüedad: 19 años, 1 mes
Puntos: 0
Me pasa una cosa mas que tampoco veo la forma de solucionar y es que cuando intento voy hacia abajo en la ultima fila me peta el programa, es normal ya que no hay mas registros pero si no funciona el evento KeyPress ni el KeyDown del Datagrid, como puedo solucionarlo?
Sabes alguna forma paa olvidarme del ultimo registro?

Gracias
  #7 (permalink)  
Antiguo 20/01/2006, 09:07
 
Fecha de Ingreso: marzo-2005
Mensajes: 26
Antigüedad: 19 años, 1 mes
Puntos: 0
mmmm pues la verdad no se porque se te queda en la misma celda, quisas es por el refresh que estas haciendo pero si es por eso lo que podrías hacer es darle por código la siguiente celda a seleccionar por el momento no veo otra manera pero si encuentro por que te está pasando eso y la solución la pondré aqui y en cuanto a tu última pregunta no entiendo muy bien a q t refieres

Saludos
  #8 (permalink)  
Antiguo 20/01/2006, 09:54
 
Fecha de Ingreso: marzo-2005
Mensajes: 33
Antigüedad: 19 años, 1 mes
Puntos: 0
Bueno, mas o menos ya lo tengo como queria, aunque hay algunas cosas que no me gusta demasiado como quedan, como al actulizar la celda que se quede seleccionada ella misma,pero no esta mal.

Lo ultimo que te decia es porque al contruir el datagrid con el data set me daba problemas en la ultima fila, al final lo he solucionado construyendo el datagrid desde un dataview creado a partir del dataset y poniendo la propiedad AllowNew = false para que no me deje añadir mas columnas
y la propiedad AllowEdit = true para modificar las celdas.

Bueno, si te interesa sabbe algo mas del codigo me lo haces saber y te lo enviaré por correo , yo creo que ya funciona bastante bien, aunque se puede mejorar muchisimo.

Muchas gracias por tu ayuda Hunter Net.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:07.