none
Actualizar Base de datos sqlite desde gridview RRS feed

  • Pregunta

  • Saludos compañeros tengo un problema con enlazar mi base de datos sqlite con el gridview.

    El problema es al actualizar la base de datos comforme edito las celdas del grid , el origen de datos lo aplico asi al grid:

    GridLista.DataSource = CommonUtilities.getData(LISTA_TABLE, "*");
    
    public static DataTable getData(String Table, String column)
            {
    
                var tData = new DataTable();
                String sql = String.Format("SELECT {0} FROM {1}", column, Table);
                try
                {
                    using (SQLiteConnection conn = new SQLiteConnection(dbconnectioStr))
                    {
                        conn.Open();
                        using (SQLiteCommand cmd = conn.CreateCommand())
                        {
                            cmd.Connection = conn;
                            cmd.CommandText = sql;
                            using (SQLiteDataReader reader = cmd.ExecuteReader())
                            {
                                tData.Load(reader);
                            }
    
                        }
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(String.Format("Sqlite error {0}", e.Message));
                }
                return tData;
            }

    Ok hasta aki todo bien , el problema es cuando al editar el grid intento a su vez actualizar la bd , me da error de obeto null en dtFilasModificados.Rows, este es el codigo que uso:

    private void GridLista_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                DataTable dt = (DataTable)GridLista.DataSource;
                DataTable dtFilasModificados = dt.GetChanges(DataRowState.Modified);
                using (SQLiteConnection conn = new SQLiteConnection(CommonUtilities.dbconnectioStr))
                {
                    conn.Open();
                    
                        using (SQLiteCommand cmd = conn.CreateCommand())
                        {
                            String sql = String.Format("UPDATE {0} set {1} = @Category, {2} = @Cantidad WHERE {3} = @Nombre", LISTA_TABLE, CATEGORIA_NOMBRE, PRODUCTO_CANTIDAD, PRODUCTO_NOMBRE);
                           
                                foreach (DataRow row in dtFilasModificados.Rows)
                                {
    
                                    cmd.Connection = conn;
                                    cmd.CommandText = sql;
                                    cmd.Parameters.Clear();
                                    cmd.Parameters.AddWithValue("@Category", Convert.ToString(row[CATEGORIA_NOMBRE]));
                                    cmd.Parameters.AddWithValue("@Cantidad", Convert.ToString(row[PRODUCTO_CANTIDAD]));
                                    cmd.Parameters.AddWithValue("@Nombre", Convert.ToString(row[PRODUCTO_NOMBRE]));
    
                                    cmd.ExecuteNonQuery();
                                }
                            
                        }
    
                    }
                
            }

    No consigo dar con la tecla , que fallo veis vosotros , gracias de antemano.

    martes, 22 de octubre de 2013 10:39

Respuestas

  • hola

    pero validaste que esta linea

    DataTable dtFilasModificados = dt.GetChanges(DataRowState.Modified)

    devuelva algun resultado ?

    porque alli tomas las modificaciones, pero y sino hya ninguna ? eso es justamente lo que no veo que valides

    digo sino hay modificaciones debes validarlo

    DataTable.GetChanges (Método)

    veras que dice:

    El método devuelve null (Nothing en Visual Basic) si no hay filas en el DataSet original con cambios pendientes.

    o sea debes usar

    DataTable dtFilasModificados = dt.GetChanges(DataRowState.Modified)
    
    if(dtFilasModificados == null){
    
       return;
    
    }


    sino hay cambios no continuas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina



    martes, 22 de octubre de 2013 10:59

Todas las respuestas

  • hola

    pero validaste que esta linea

    DataTable dtFilasModificados = dt.GetChanges(DataRowState.Modified)

    devuelva algun resultado ?

    porque alli tomas las modificaciones, pero y sino hya ninguna ? eso es justamente lo que no veo que valides

    digo sino hay modificaciones debes validarlo

    DataTable.GetChanges (Método)

    veras que dice:

    El método devuelve null (Nothing en Visual Basic) si no hay filas en el DataSet original con cambios pendientes.

    o sea debes usar

    DataTable dtFilasModificados = dt.GetChanges(DataRowState.Modified)
    
    if(dtFilasModificados == null){
    
       return;
    
    }


    sino hay cambios no continuas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina



    martes, 22 de octubre de 2013 10:59
  • Si leandro eso era , pero ahora lo que veo es que los cambios a veces se aplican, a veces no, no se si he escogido el evento correcto para esta tarea.
    martes, 22 de octubre de 2013 13:45
  • Ya lo solucione usando el evento editEnd.

    podeis cerrar tema.

    martes, 22 de octubre de 2013 18:01
  • Que bueno que encontraste la solución, Gracias a Leandro por la pronta respuesta

    <EL CONTENIDO SE PROVEE "COMO ES" SIN GARANTÍA DE NINGÚN TIPO, ASÍ SEA EXPRESA O IMPLÍCITA>
     
    Gracias
     
    MSDN/TechNet Soporte Comunidades
     
    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.

    martes, 22 de octubre de 2013 18:10