none
Agregar un registro a un gridview RRS feed

  • Pregunta

  • Junto con saludarlos me surgio la siguiente problematica resulta que estoy trabajando con C# y necesito agregar registros a una gridview previamente cargada con registros.

    Muestro imagens

    si se fijan la gridview ya vienen con registros pero lo q necesito es cuando pulsen el boton agregar inserte los nuevos registros sin tocar los otros trabajo en webapplication con c#

    Saludos

    LatinWater!

    martes, 7 de julio de 2015 13:10

Respuestas

  • >>pero me surgieron algunas dudas con respecto como envio mi datasource  a una session siendo que cargo la gridview de esta forma?

    usarias

    var list = CargaGrid.LlenaGrProductosNSol(NSol);

    Session["dato"] = list;

    grProductos.DataSource = list; grProductos.DataBind();

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta LatinWater martes, 7 de julio de 2015 19:54
    martes, 7 de julio de 2015 18:33
  • Lo puede Resolver gracias por la ayuda brindada en este foro.

    Dejo la soluccion por si alguien la necesita

    Grilla principal:

      protected void MasterGridView_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
            {
                GridViewRow row = MasterGridView.Rows[e.NewSelectedIndex];
                DivDatosReplicar.Visible = true;
                //Cargo datos para q sean replicados en la nueva solicitud
                //1° Llamar a la gridview para que llene los productos de la anterior solicitud
                int NSol = Convert.ToInt32(MasterGridView.DataKeys[e.NewSelectedIndex].Value);
                //Cargo la gridSecundaria de productos para ser visualizada
                //grProductos.DataSource = CargaGrid.LlenaGrProductosNSol(NSol);
                //grProductos.DataBind();
                var list = CargaGrid.LlenaGrProductosNSol(NSol);
    
                Session["datos"] = list;
    
                grProductos.DataSource = list;
                grProductos.DataBind();
    
            }

    aca esto llamando a los registros para q se cargue la grid de productos.-

    Button Agregar

    if (Session["datos"] == null) { } else { var list = (List<InsReplicaProd>)Session["datos"]; InsReplicaProd item = new InsReplicaProd(); item.CodProd = "56"; item.NomProd = "Sobres CD"; item.CanSol = "2"; list.Add(item);

    grProductos.DataSource = list; grProductos.DataBind(); }


    Saludos



    • Marcado como respuesta LatinWater martes, 7 de julio de 2015 19:52
    martes, 7 de julio de 2015 19:52

Todas las respuestas

  • hola

    para agregar registros lo realizas en una lista en memoria, en realidad en la Session

     ¿Como agregar renglon a gridview desde un boton?

    como veras al cargar el grid mantienes en Session el datatable o lista, entonces al agregar un nueva row lo haces a esa lista en session y vinculas nuevamente con el grid

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 7 de julio de 2015 13:50
  • Gracias por responder leandro el enlace que enviaste no funciona para revisarlo camarada

    Saludos

    martes, 7 de julio de 2015 14:00
  • ya arregle el link

    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de julio de 2015 15:00
  • Lei la informacion desarrolle lo siguiente pero me qde frenado en este pto me borra los registros del gridview y me inserta el ultimo

     protected void MasterGridView_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
            {
                GridViewRow row = MasterGridView.Rows[e.NewSelectedIndex];
                DivDatosReplicar.Visible = true;
                //Cargo datos para q sean replicados en la nueva solicitud
                //1° Llamar a la gridview para que llene los productos de la anterior solicitud
                int NSol = Convert.ToInt32(MasterGridView.DataKeys[e.NewSelectedIndex].Value);
                //Cargo la gridSecundaria de productos para ser visualizada
    
                //Creamos el dataTable
                DataTable DT = new DataTable();
                DT.Columns.Add("CodProd", Type.GetType("System.String"));
                DT.Columns.Add("NomProd", Type.GetType("System.String"));
                DT.Columns.Add("CanSol", Type.GetType("System.String"));
    
                //Guardamos la información en una variable de sesión
                Session["DT"] = DT;
    
                //Asignamos el DT al gridview (en este momento el DT esta vacio
                grProductos.DataSource = DT;
                grProductos.DataBind();
    
            }

    Desarrolle de esta manera per no me carga los registros

    anteriormente tenia de esta forma

           //Aca Cargo lo que esta en Gridview para que me muestre todos los productos
    
                //grProductos.DataSource = CargaGrid.LlenaGrProductosNSol(NSol);
                //grProductos.DataBind();
                

    aca pienso q esta mi problema como envio a la session la consulta?

    Button agregar el registro a la gridview

     protected void BtnAgregar_Click(object sender, EventArgs e)
            {
    
                //Leemos el datatable
                DataTable DT = new DataTable();
                DT = (DataTable)Session["DT"];
    
                //Insertamos el registro
                DT.Rows.Add("56", "Sobres CD", "2");
    
                //Asignamos del DT al gridview
                grProductos.DataSource = DT;
                grProductos.DataBind();
    
                //Actualizamos el DT de la variable de sessión
                Session["DT"] = DT;
    
    
            }

    Saludos

    LatinWater





    • Editado LatinWater martes, 7 de julio de 2015 15:25
    martes, 7 de julio de 2015 15:25
  • hola

    por el codigo entiendo tienes dos gridview, no ? seleccionas una y vas agregando en otra

    si seleccionas de la primera vas a perder los datos del segundo grid ya que usas un

    DataTable DT = new DataTable();

    y creas una nueva instancia

    -----

    ademas podrias usar

    DataTable DT = (DataTable)Session["DT"];

    puedes definir he instanciar en la misma linea

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de julio de 2015 15:54
  • Gracias leandro por la ayuda al parecer no me detalle muy bien en la problematica.

    resulta que tengo un gridview

    esta es la primera gridview donde busco solicitudes de pedidos anteriores al momento de pinchar replicar me carga la segunda grilla con los productos que estan en dicho n° de solicitud

    que seria esta gridview aca el usuario tendra la opcion de agregar mas productos para elevar una nueva solicitud o quitar Esta seria la GrProductos.

    Saludos

    LatinWater!

    martes, 7 de julio de 2015 16:02
  • Aqui te dejo exactamente lo que  necesitas, primero debes guadar tu source en una sesion que te ayude a mantener lo que ya tiene tu gridview y despues aqui te detallo como agregar row por row animo mi estimado, omite el codigo que no sea necesario, yo lo use para algunas validaciones, pero lo que ocupas esta aqui:

       public void consultar_nombre_paciente()
            {
                try
                {
                    DataSet ds = new DataSet();
                    DataSet ds_p = new DataSet();
                    DataRow row1;

                    int validar = 0;
                    string id_tipo = rbl_tipo_atencion.SelectedValue;
                    string tipo = "";

                    if (Session["pacientes"] == null)
                    {//agregar las columnas a tu source
                        ds_p.Tables.Add("Table1");
                        ds_p.Tables[0].Columns.Add("id");
                        ds_p.Tables[0].Columns.Add("nombre");
                        ds_p.Tables[0].Columns.Add("tipo");
                        ds_p.Tables[0].Columns.Add("id_tipo");
                        ds_p.Tables[0].Columns.Add("id_mun");
                    }
                    else
                    {//ya trae algo tu source
                        ds_p = (DataSet)Session["pacientes"];
                    }

                    if (ds_p.Tables[0].Rows.Count > 0)
                    {
                        for (int i = 0; i < ds_p.Tables[0].Rows.Count; i++)
                        {
                            if (ds_p.Tables[0].Rows[i][0].ToString() == hf_paciente_id.Value)
                            {
                                validar = 1;
                            }
                        }
                    }

                    if (validar == 0)
                    {

                        if (id_tipo == "2")
                        {
                            tipo = "Pareja";
                        }
                        else if (id_tipo == "3")
                        {
                            tipo = "Familiar";
                        }

                        ds = cr.Consultar_nombre_paciente(int.Parse(hf_paciente_id.Value));

                        row1 = ds_p.Tables[0].NewRow();

                        row1[0] = ds.Tables[0].Rows[0][0].ToString();
                        row1[1] = ds.Tables[0].Rows[0][1].ToString();
                        row1[2] = tipo;
                        row1[3] = id_tipo;
                        row1[4] = ds.Tables[0].Rows[0][2].ToString();
                        ds_p.Tables[0].Rows.Add(row1);

                        gv_pacientes.DataSource = ds_p;
                        gv_pacientes.DataBind();
                        Session["pacientes"] = ds_p;
                        //ddl_mun.SelectedValue = ds_p.Tables[0].Rows[0][4].ToString();
                        hf_paciente_mun.Value = ds_p.Tables[0].Rows[0][4].ToString();
                    }
                }
                catch (Exception ex)
                {
                    string error = cr.error_aplicacion();
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "alerta", "alert('" + error + " --- " + ex.Message + "');", true);
                }
            }


    Si mi respuesta fue útil ayudame marcándola como correcta.


    martes, 7 de julio de 2015 18:10
  • hola

    >>esta es la primera gridview donde busco solicitudes de pedidos anteriores al momento de pinchar replicar me carga la segunda grilla con los productos que estan en dicho n° de solicitud

    pero estas grids donde estan ubicadas ? estan ambas en la misma pagina ?

    porque si seleccionas del primer grid (usando el SelectedIndexChanged) y creas el datatable (usando el new) si tenias algo previamente cargado en la session lo pierdes

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 7 de julio de 2015 18:27
  • gracias por la ayuda brindada pero me surgieron algunas dudas con respecto como envio mi datasource  a una session siendo que cargo la gridview de esta forma?

      grProductos.DataSource = CargaGrid.LlenaGrProductosNSol(NSol);
      grProductos.DataBind();

    aca cargo mi gridview desde un procedimiento almacenado?

    Saludos

    martes, 7 de julio de 2015 18:31
  • >>pero me surgieron algunas dudas con respecto como envio mi datasource  a una session siendo que cargo la gridview de esta forma?

    usarias

    var list = CargaGrid.LlenaGrProductosNSol(NSol);

    Session["dato"] = list;

    grProductos.DataSource = list; grProductos.DataBind();

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta LatinWater martes, 7 de julio de 2015 19:54
    martes, 7 de julio de 2015 18:33
  • gracias por responder agrega lineas de codigo q me habian recomendado

       var list = CargaGrid.LlenaGrProductosNSol(NSol);
    
                Session["datos"] = list;
    
                grProductos.DataSource = list;
                grProductos.DataBind();
    respondiendo a tu consulta leandro efectivamente las dos gridview estan en la misma pagina cuando se pulsa el boton en la primera grilla carga la segunda gridview de los productos ambas ubicadas en la misma pagina

    cuando pincho el button agregar

    me sale el siguiente error

    Aca qde frenando no se me ocurre como pasar los items para que sean cargados en la gridview de productos?

    Saludos

    LatinWater!

    martes, 7 de julio de 2015 19:03
  • Lo puede Resolver gracias por la ayuda brindada en este foro.

    Dejo la soluccion por si alguien la necesita

    Grilla principal:

      protected void MasterGridView_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
            {
                GridViewRow row = MasterGridView.Rows[e.NewSelectedIndex];
                DivDatosReplicar.Visible = true;
                //Cargo datos para q sean replicados en la nueva solicitud
                //1° Llamar a la gridview para que llene los productos de la anterior solicitud
                int NSol = Convert.ToInt32(MasterGridView.DataKeys[e.NewSelectedIndex].Value);
                //Cargo la gridSecundaria de productos para ser visualizada
                //grProductos.DataSource = CargaGrid.LlenaGrProductosNSol(NSol);
                //grProductos.DataBind();
                var list = CargaGrid.LlenaGrProductosNSol(NSol);
    
                Session["datos"] = list;
    
                grProductos.DataSource = list;
                grProductos.DataBind();
    
            }

    aca esto llamando a los registros para q se cargue la grid de productos.-

    Button Agregar

    if (Session["datos"] == null) { } else { var list = (List<InsReplicaProd>)Session["datos"]; InsReplicaProd item = new InsReplicaProd(); item.CodProd = "56"; item.NomProd = "Sobres CD"; item.CanSol = "2"; list.Add(item);

    grProductos.DataSource = list; grProductos.DataBind(); }


    Saludos



    • Marcado como respuesta LatinWater martes, 7 de julio de 2015 19:52
    martes, 7 de julio de 2015 19:52