none
Como agrego una Columna a Table virtual que se arma en carga masdiva de GridView asp.net RRS feed

  • Pregunta

  • Hola, como les va.....les consulto que, para carga masiva de un GridView, el codigo que tengo, arma una tabla donde se guardan los valores que traia el Grid cuando se lo convoca para cuando haga la comparacion con lo nuev, actualice........El tema es que cuando hago funcionar el codigo, hay dos campos (que son los TextBoxs editables, que no me los incorpora a esta Table1)......

    ERROR: "Column 'Asistencia' does not belong to table Table1"

    Me sugieren que llame estos campos desde el SELECT, pero, asis y todo, no lo hace.....Alguien sabe como se haria para que esta Table1 me incorpore estas columnas de Asistencia y Observaciones????

    No nos olvidemos que los campos "Asistencias" y "Observaciones", son campos Template para Edicion...

    Si saben, agradeceria me lo hagan saber.....Les envio un abrazo muy grande...

    (Dejo codigos de NEGOCIO Y PRESENTACION para analisis....Y CAPTURA del Error)

    CAPA NEGOCIO

    public DataTable getAlumnosPorMat(int Curso, int Materia)
            {
                try
                {
                    string cnString = null;
                    cnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Guillermo\Desktop\Cenma215(Willy) - 2\Datos.accdb;Persist Security Info=False";
                    using (OleDbConnection con = new OleDbConnection(cnString))
                    {
                        con.Open();
    
                        string SQL = @"SELECT alum.Id_Alumno, alum.Nombre, alum.Apellido, alum.Dni, 
                                            mpal.Id, turm.Id_Turno 
                                            FROM (TurnoMateria turm INNER JOIN MateriaPorAlumno mpal ON mpal.Id_Turno = turm.Id_Turno)                                                                                 
                                            INNER JOIN Alumno alum ON alum.Id_Alumno = mpal.Id_Alumno                                                                                                                  
                                            WHERE turm.Id_Curso = @idCurso AND turm.Id_Materia = @idMateria";
                        //INNER JOIN Asistencias asist ON alum.Id_Alumno = asist.Id_Alumno
                        //, asist.Id_Asistencia, asist.Asistencia, asist.Observaciones
                        OleDbCommand cmd = new OleDbCommand(SQL, con);
                        cmd.Parameters.AddWithValue("@idCurso", Curso);
                        cmd.Parameters.AddWithValue("@idMateria", Materia);
                        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                        DataTable tabla = new DataTable();
                        da.Fill(tabla);
    
                        tabla.Columns.Add("Fecha");
    
                        DateTime fecha = DateTime.Now;
                        foreach (DataRow row in tabla.Rows)
                        {
                            row["Fecha"] = fecha.ToString("dd/MM/yyyy");
                        }
    
                        return tabla;
                    }
                }            
                catch (Exception ex)
                {

    CAPA PRESENTACION

     protected bool IsRowModified(GridViewRow r)
            {
                int currentID;
                string currentLastName;
                string currentFirstName;
    
                currentID = Convert.ToInt32(GridNuevaAsist.DataKeys[r.RowIndex].Value);
    
                currentLastName = ((TextBox)r.FindControl("TextAsist")).Text;   
                currentFirstName = ((TextBox)r.FindControl("TextAsist")).Text;
    
                currentLastName = ((TextBox)r.FindControl("TextObserv")).Text;
                currentFirstName = ((TextBox)r.FindControl("TextObserv")).Text;
    
                DataRow row =
                    originalDataTable.Select(String.Format("Id_Alumno = {0}", currentID))[0];
    
                if (!currentLastName.Equals(row["Asistencia"].ToString())) { return true; }   ///Aqui sale Error///
                if (!currentFirstName.Equals(row["Asistencia"].ToString())) { return true; }
    
                if (!currentLastName.Equals(row["Observaciones"].ToString())) { return true; }
                if (!currentFirstName.Equals(row["Observaciones"].ToString())) { return true; }
    
                return false;
            }       
        }
    }

    CAPTURA



    lunes, 24 de octubre de 2016 22:48

Todas las respuestas

  • hola

    >>No nos olvidemos que los campos "Asistencias" y "Observaciones", son campos Template para Edicion..

    pero de donde sale esa "row"?

    ademas no veo que coincida con los campos del datatable, una cosa es que no cargue los datos y otra muy distinta qye no siquiera este la columna, debes hacer el Columns.Add() si es que las creas desde codigo

    te esta faltando las lineas en el codigo

    tabla.Columns.Add("Asistencia");

    tabla.Columns.Add("Observaciones");

    o definirlo en el SELECT para que se cree la columna


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 25 de octubre de 2016 5:45
  • Hola, Leo, le agrego las columnas, e incluso desde el SELECT con INNER JOIN pero me sigue dando el mismo error....

    Si me puedes ayudar??, es una carga masiva que justo me da error en el ultimo renglon para que funcione.....y ya estaria terminando....O como debiera ser el SELECT para que se aproxime a funcionar......

    Dejo codigo de como lo estoy manejando....

    CAPA NEGOCIO

     public DataTable getAlumnosPorMat(int Curso, int Materia)
            {
                try
                {
                    string cnString = null;
                    cnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Guillermo\Desktop\Cenma215(Willy) - 2\Datos.accdb;Persist Security Info=False";
                    using (OleDbConnection con = new OleDbConnection(cnString))
                    {
                        con.Open();
    
                        string SQL = @"SELECT alum.Id_Alumno, alum.Nombre, alum.Apellido, alum.Dni, 
                                            mpal.Id, turm.Id_Turno, asist.Asistencia, asist.Observaciones
                                            FROM (TurnoMateria turm INNER JOIN MateriaPorAlumno mpal ON mpal.Id_Turno = turm.Id_Turno)
                                            INNER JOIN Alumno alum ON alum.Id_Alumno = mpal.Id_Alumno                                                                      
                                            WHERE turm.Id_Curso = @idCurso AND turm.Id_Materia = @idMateria";
                        //FROM Asistencias asist INNER JOIN
                        //INNER JOIN Asistencias asist ON alum.Id_Alumno = asist.Id_Alumno
                        //,asist.Id_Asistencia, asist.Asistencia, asist.Observaciones
                        //FROM Asistencias asist INNER JOIN
                        OleDbCommand cmd = new OleDbCommand(SQL, con);
                        cmd.Parameters.AddWithValue("@idCurso", Curso);
                        cmd.Parameters.AddWithValue("@idMateria", Materia);
                        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                        DataTable tabla = new DataTable();
                        da.Fill(tabla);
    
                        tabla.Columns.Add("Fecha");
                        tabla.Columns.Add("Asistencia");
                        tabla.Columns.Add("Observaciones");
    
                        DateTime fecha = DateTime.Now;
    
                        foreach (DataRow row in tabla.Rows)
                        {
                            row["Fecha"] = fecha.ToString("dd/MM/yyyy");
                            //row["Asistencia"] = "";
                            //row["Observaciones"] = "";
                        }
    
                        return tabla;
                    }

    martes, 25 de octubre de 2016 14:16