none
Agregar filas en tiempo de ejecucion en gridview RRS feed

  • Pregunta

  • Buen dia, como puedo agregar filas con informacion capturada en textbox a un gridview? por ejemplo:

    Tengo mi grid con columnas nombre y telefeno, y tengo mis txts, al momento de dar click en un boton me los agregue al grid y asi dinamicamente alimentarlo para despues guardar masivamente en la BD lo contenido en ese grid, lo intente con un datatable y solo bindear el grid, pero con el postback me crea de nuevo el datatable por lo que siempre se perdera los datos ya capturados.

    jueves, 8 de marzo de 2018 17:13

Respuestas

  • No conozco un tutorial, pero te pongo lo esencial:

    En el Form_Load:

    DataTable dt;
    if (!Page.IsPostBack)
    {
        dt = new DataTable();
        // Poner aquí las inicializaciones del datatable, tales como añadirle columnas
        Session["dt"] = dt;
    }
    else
    {
        dt = (DataTable)Session["dt"];
    }
    
    gridView1.DataSource = dt;
    gridView1.DataBind();

    En el click del botón que añade un registro:

    DataRow dr = dt.NewRow(); dr["Columna1"] = textBox1.Text; dr["Columna2"] = textBox2.Text; // Obviamente, poner las columnas adecuadas (que antes se inicializaron) y los textboxes pertinentes. dt.Rows.Add(dr); Session["dt"] = dt;

    gridView1.DataSource = dt;
    gridView1.DataBind();


    Y básicamente con eso ya debería funcionar.

    jueves, 8 de marzo de 2018 21:08

Todas las respuestas

  • Sí, la idea del DataTable es buena... pero tratándose de una aplicación web, tienes que tener presente que (a diferencia de una aplicación de escritorio) todas las variables de clase se pierden a cada postback. Esto implica que tienes que salvar el DataTable fuera de la clase. Lo más fácil sería salvarlo en el Session. Cuando le agregues al DataTable la fila con los datos de los textboxes, copia el DataTable a una variable en el Session. Y durante el Form_Load, lee el DataTable del Session y a continuación aplícalo al DataSource del GridView y ejecuta el DataBind(). Obviamente tendrás que preveer el caso de que la página se cargue por primera vez, en cuyo caso todavía no existirá el DataTable en el Session y tendrás que inicializarlo.
    jueves, 8 de marzo de 2018 17:19
  • ahora mismo lo intento y comento mis resultados! gracias
    jueves, 8 de marzo de 2018 17:32
  • no logro tener exito, hay algun tutorial sobre como realizarlo? 
    jueves, 8 de marzo de 2018 19:34
  • No conozco un tutorial, pero te pongo lo esencial:

    En el Form_Load:

    DataTable dt;
    if (!Page.IsPostBack)
    {
        dt = new DataTable();
        // Poner aquí las inicializaciones del datatable, tales como añadirle columnas
        Session["dt"] = dt;
    }
    else
    {
        dt = (DataTable)Session["dt"];
    }
    
    gridView1.DataSource = dt;
    gridView1.DataBind();

    En el click del botón que añade un registro:

    DataRow dr = dt.NewRow(); dr["Columna1"] = textBox1.Text; dr["Columna2"] = textBox2.Text; // Obviamente, poner las columnas adecuadas (que antes se inicializaron) y los textboxes pertinentes. dt.Rows.Add(dr); Session["dt"] = dt;

    gridView1.DataSource = dt;
    gridView1.DataBind();


    Y básicamente con eso ya debería funcionar.

    jueves, 8 de marzo de 2018 21:08
  • gracias, esa fue mi solucion!
    viernes, 9 de marzo de 2018 23:15