none
Guardar datos de DataGrid a SQL server con C# RRS feed

  • Pregunta

  • Un saludo a la comunidad

    Tengo una tabla en SQL que se compone de 4 campos: id, materia, nombre y asistencia, el campo asistencia es un bit (un Bool) y corresponde a si el alumno asistió a la materia especificada, en el DataGrid, el campo me aparece como un CheckBox y automáticamente si es verdadero aparece palomeado. Quisiera que el usuario pudiera desmarcar o marcar ese campo desde el DataGrid y que se guarde en SQL pero no se como hacerlo, a que evento del DataGrid debo apuntar, o bien, código para hacerlo mediante un botón. 

    ¡Muchas gracias!

    sábado, 27 de febrero de 2021 5:45

Respuestas

  • El DataAdapter si no mal recuerdo, se crea con Visual Studio, o al menos esa es la única forma de crearlo que yo conozco (soy un tanto novato).

    Solo hace falta Visual Studio para el DataAdapter tipado ("typed"). Un DataAdapter sin tipar ("untyped") se puede crear muy fácilmente con una sola línea de código:

    DataAdapter da = new DataAdapter("select * from laTabla", conexión);

    Un dataadapter creado de esta manera únicamente contiene el comando de lectura de datos, y no los de grabación. Pero se le pueden añadir éstos de una forma muy sencilla, con otra línea de código:

    SqlCommandBuilder scb = new SqlCommandBuilder(da);

    Después de hacer esto, este dataadapter te permite leer y grabar entre base de datos y el datatable.

    Pero eso no resuelve tu caso concreto. Si quieres mantener la estructura que tienes, pasando por el dataClass, tendrás que añadir en ésta un método que reciba el datatable y que por dentro lo examine y salve los cambios en la base de datos. La forma de hacer esto debería respetar la misma estructura que hayas usado para GetData.


    lunes, 1 de marzo de 2021 11:52
    Moderador

Todas las respuestas

  • Lo más normal es que para cargar el grid hayas definido un datatable y un dataadapter. Con el dataadapter llenaste el datatable usando el método Fill, y luego enlazaste el DataTable al DataSource del DataGrid y entonces te salieron los datos en pantalla.

    Pues bien, si lo hiciste así, ese enlace es bidireccional, es decir, cuando el usuario cambia un checkbox en el datagrid, automáticamente se cambia el valor en el DataTable. Así pues, lo único que necesitas hacer es guardar el DataTable en la base de datos. Y para ello existe un automatismo, suponiendo que el DataAdapter esté bien definido y contenga los comandos de grabación. Basta con que llames al método Update del DataAdapter (de la misma manera que antes llamaste al Fill) y eso automáticamente graba los cambios en la base de datos.

    sábado, 27 de febrero de 2021 12:52
    Moderador
  • Muchas gracias por responder, desafortunadamente no estoy utilizando Visual Studio para enlazar los datos, lo hago por clases, efectivamente cargo un DataTable para mostrar los datos en el Grid pero lo enlazo a la misma mediante un metodo declarado en una clase de la siguiente forma:

    DataTable table = dataClass.GetData();
    DataGrid.ItemsSource = table.AsDataView();

    El DataAdapter si no mal recuerdo, se crea con Visual Studio, o al menos esa es la única forma de crearlo que yo conozco (soy un tanto novato).

    Saludos

     
    lunes, 1 de marzo de 2021 2:24
  • El DataAdapter si no mal recuerdo, se crea con Visual Studio, o al menos esa es la única forma de crearlo que yo conozco (soy un tanto novato).

    Solo hace falta Visual Studio para el DataAdapter tipado ("typed"). Un DataAdapter sin tipar ("untyped") se puede crear muy fácilmente con una sola línea de código:

    DataAdapter da = new DataAdapter("select * from laTabla", conexión);

    Un dataadapter creado de esta manera únicamente contiene el comando de lectura de datos, y no los de grabación. Pero se le pueden añadir éstos de una forma muy sencilla, con otra línea de código:

    SqlCommandBuilder scb = new SqlCommandBuilder(da);

    Después de hacer esto, este dataadapter te permite leer y grabar entre base de datos y el datatable.

    Pero eso no resuelve tu caso concreto. Si quieres mantener la estructura que tienes, pasando por el dataClass, tendrás que añadir en ésta un método que reciba el datatable y que por dentro lo examine y salve los cambios en la base de datos. La forma de hacer esto debería respetar la misma estructura que hayas usado para GetData.


    lunes, 1 de marzo de 2021 11:52
    Moderador
  • Hola,

    ¿Alguna novedad sobre la consulta realizada?

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 1 de marzo de 2021 15:03
    Moderador
  • Excelente, muchas gracias
    jueves, 4 de marzo de 2021 6:30