Foros del Web » Programando para Internet » ASPX (.net) »

insertar en gridview y guardar

Estas en el tema de insertar en gridview y guardar en el foro de ASPX (.net) en Foros del Web. Buenos días compañeros, la cuestión es la siguiente: Soy principiante en este mundo del .Net y estoy haciendo algunas pruebas. Me encuentro con las intenciones ...
  #1 (permalink)  
Antiguo 20/12/2009, 16:36
 
Fecha de Ingreso: enero-2009
Mensajes: 78
Antigüedad: 15 años, 4 meses
Puntos: 0
insertar en gridview y guardar

Buenos días compañeros, la cuestión es la siguiente:

Soy principiante en este mundo del .Net y estoy haciendo algunas pruebas.

Me encuentro con las intenciones de crear un pequeño ejemplo de aplicación (empezando ya me toé con el primer problema), en donde se le vayan metiendo datos al gridview (los datos los jala de unos textbox) mediante un botón "Agregar" y una vez que se haya finalizado o ya no se deseen ingresar mas datos por el momento, guardar esa información del gridview a una tabla en la base de datos (mediante un botón "Guardar" por ejemplo). Si la aplicación se cierra y se vuelve a abrir, jala los datos de la base al gridview. El código que llevo hasta ahorita es el siguiente :

Código:
public partial class _Default : System.Web.UI.Page 
{
    System.Data.DataTable table;
    System.Data.DataRow row;
    protected void Page_Load(object sender, EventArgs e)
    {
        table = new System.Data.DataTable();
        table.Columns.Add("id_padre", typeof(System.String));
        table.Columns.Add("nombre_p", typeof(System.String));
        table.Columns.Add("edad_p", typeof(System.String));
        table.Columns.Add("ocupacion", typeof(System.String));
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        row = table.NewRow();
        row["id_padre"] = TextBox1.Text;
        row["nombre_p"] = TextBox2.Text;
        row["edad_p"] = TextBox3.Text;
        row["ocupacion"] = TextBox4.Text;
        table.Rows.Add(row);
        GridView1.DataSource = table;
        GridView1.DataBind();
    }
    
}
Como ven, el botón agregar mete la fila al gridview, pero me topé con el problema de que solo agregar una fila... es decir cada vez que se oprime el botón agregar éste hace un postback y me reinicia el datatable, con lo cual siempre voy a estar agregando una única fila al gridview. Cómo podría hacer, para ir llenando un gridview con el datatable sin que se haga un postaback? Por cierto trabajo con visual studio 2005 y sql server 2005.
Muchas gracias por su atención.
  #2 (permalink)  
Antiguo 21/12/2009, 05:24
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: insertar en gridview y guardar

public partial class _Default : System.Web.UI.Page
{
System.Data.DataTable table;
System.Data.DataRow row;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack) {

table = new System.Data.DataTable();
table.Columns.Add("id_padre", typeof(System.String));
table.Columns.Add("nombre_p", typeof(System.String));
table.Columns.Add("edad_p", typeof(System.String));
table.Columns.Add("ocupacion", typeof(System.String));
}
}
protected void Button1_Click(object sender, EventArgs e)
{
row = table.NewRow();
row["id_padre"] = TextBox1.Text;
row["nombre_p"] = TextBox2.Text;
row["edad_p"] = TextBox3.Text;
row["ocupacion"] = TextBox4.Text;
table.Rows.Add(row);
GridView1.DataSource = table;
GridView1.DataBind();
}

}

Esto lo que haces es que se ejecute solo una vez y la primera vez lo que esta dentro del if ok. Averigua mas sobre la propiedad postback si queres.

Saludos.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #3 (permalink)  
Antiguo 21/12/2009, 09:23
 
Fecha de Ingreso: enero-2009
Mensajes: 78
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Muchas gracias mdavila, lo checaré.
  #4 (permalink)  
Antiguo 21/12/2009, 10:23
 
Fecha de Ingreso: enero-2009
Mensajes: 78
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Acabo de checar el código, pero en esta linea genera error de NullReferenceException :

row = table.NewRow();

Seguré tratando de indagar, muchas gracias, cualquier ayuda es bienvenida.
  #5 (permalink)  
Antiguo 21/12/2009, 11:02
 
Fecha de Ingreso: septiembre-2009
Mensajes: 111
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: insertar en gridview y guardar

Cita:
Iniciado por a_moreno Ver Mensaje
Acabo de checar el código, pero en esta linea genera error de NullReferenceException :

row = table.NewRow();

Seguré tratando de indagar, muchas gracias, cualquier ayuda es bienvenida.
Debes crear primero la tabla con el Formato para poder copiar ese formato al crear el DataRow..

Ejemplo

Código C++:
Ver original
  1. private void CreaTabla()
  2. {
  3.    System.Data.DataTable table;
  4.    table = new System.Data.DataTable();
  5.    table.Columns.Add("id_padre", typeof(System.String));
  6.    table.Columns.Add("nombre_p", typeof(System.String));
  7.    table.Columns.Add("edad_p", typeof(System.String));
  8.    table.Columns.Add("ocupacion", typeof(System.String));
  9. }
  10.  
  11. private void Cargar_Valores()
  12. {
  13.     CreaTabla();
  14.     System.Data.DataRow row;
  15.     //...tu Codigo.
  16.  
  17. }
__________________
Si caminas por la Senda del Conocimiento... y una Luz en la Oscuridad Ilumina tu Camino... No seas cu#$r@ y compártela.
  #6 (permalink)  
Antiguo 21/12/2009, 11:22
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: insertar en gridview y guardar

public partial class _Default : System.Web.UI.Page
{
System.Data.DataTable table;
System.Data.DataRow row;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{

table = new System.Data.DataTable();
table.Columns.Add("id_padre", typeof(System.String));
table.Columns.Add("nombre_p", typeof(System.String));
table.Columns.Add("edad_p", typeof(System.String));
table.Columns.Add("ocupacion", typeof(System.String));
Session.Add("Tabla", table);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
table = (System.Data.DataTable)(Session["Tabla"]);
row = table.NewRow();
row["id_padre"] = TextBox1.Text;
row["nombre_p"] = TextBox2.Text;
row["edad_p"] = TextBox3.Text;
row["ocupacion"] = TextBox4.Text;
table.Rows.Add(row);
GridView1.DataSource = table;
GridView1.DataBind();
Session.Add("Tabla", table);
}

}

Fijate que guardo en la sesion la tabla ya que ibas a tener problemas con esto ok.
Intenta asi.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #7 (permalink)  
Antiguo 21/12/2009, 11:24
 
Fecha de Ingreso: enero-2009
Mensajes: 78
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Gracias por la atención mad249, en el código la tabla se crea una vez que se inicia la página, pero cuando se presiona el boton para agregar una fila, se borra la tabla y como esta dentro del isPostback, pues no jala el código y sale el error de referencia nula (digo por que no encuentro otra explicación de por que sale el error nulo) . Sin embargo si quito la linea de validación de postback, el gridview únicamente me muestra una fila por que sobreescribe la última y así se la lleva.

Gracias por la atención.
  #8 (permalink)  
Antiguo 21/12/2009, 11:26
 
Fecha de Ingreso: enero-2009
Mensajes: 78
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Ok muchas gracias probaré eso de las variables de session.
  #9 (permalink)  
Antiguo 21/12/2009, 11:35
 
Fecha de Ingreso: enero-2009
Mensajes: 78
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Funcionó bastante bien, gracias por la ayuda XDDDD.

Seguiré trabajando en los demás puntos.
  #10 (permalink)  
Antiguo 22/12/2009, 04:22
 
Fecha de Ingreso: noviembre-2009
Mensajes: 44
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Hola, yo ando metido en una aplicación de carrito, y uso más o menos lo mismo para crear el gridview. Para insertar los articulos en el carro utilizo un GridView con una columna de tipo image button, que me agrega los artículos. Tengo dos problemas:

1 - Cuando clicko el botón para agregar un artículo, éste se me agrega dos veces al GV. He leido que es problema del src de la imagen botón, pero no encuentro más que una src, y apunta correctamente a la imagen... mi código:

Código vb:
Ver original
  1. Código .aspx
  2.  
  3. <asp:GridView ID="GVBebidas" runat="server" AllowPaging="True" AllowSorting="True"
  4.                                   BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
  5.                                   CellPadding="4" DataSourceID="BebidasBD" AutoGenerateColumns="False" PageSize="5">
  6.                                   <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
  7.                                   <Columns>
  8.                                       <asp:ImageField DataImageUrlField="RutaImagen" DataImageUrlFormatString="~/Images/Catalogo/thumbnail/{0}" HeaderText="Imagen">
  9.                                           <ItemStyle Height="100px" Width="100px" />
  10.                                       </asp:ImageField>
  11.                                       <asp:BoundField DataField="Nombre" HeaderText="Nombre" SortExpression="Nombre" />
  12.                                       <asp:BoundField DataField="Descripcion" HeaderText="Descripcion" SortExpression="Descripcion" />
  13.                                       <asp:BoundField DataField="Precio" HeaderText="Precio" SortExpression="Precio" />
  14.                                       <asp:BoundField DataField="RutaImagen" HeaderText="RutaImagen" SortExpression="RutaImagen"
  15.                                           Visible="False" />
  16.                                       <asp:ButtonField ButtonType="Image" CommandName="Añadir" ImageUrl="images/CarroRojo.jpg"
  17.                                           Text="Añadir" />
  18.                                   </Columns>
  19.                                   <RowStyle BackColor="Silver" ForeColor="#330099" />
  20.                                   <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
  21.                                   <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
  22.                                   <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
  23.                                   <AlternatingRowStyle BackColor="Gainsboro" />
  24.                               </asp:GridView>
  25.  
  26. Código del .vb
  27.  
  28.     '    Sub Añadir_Articulo(ByVal s As Object, ByVal e As EventArgs)
  29.    Sub Añadir_Articulo()
  30.         If Session("Carrito") Is Nothing Then
  31.             CrearCarro()
  32.         End If
  33.         Dim DRArticulo As DataRow
  34.         Dim MiCarro As DataTable
  35.  
  36.         Micarro = Session("Carrito")
  37.         DRArticulo = Micarro.NewRow()
  38.         DRArticulo("Cantidad") = "2"
  39.         DRArticulo("Articulo") = "Vino Cantino"
  40.         DRArticulo("Precio") = "64.87"
  41.         Micarro.Rows.Add(DRArticulo)
  42.         Session("Carrito") = Micarro
  43.  
  44.     End Sub
  45.  
  46.     Sub GVBebidas_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles GVBebidas.RowCommand
  47.  
  48.  
  49.         If e.CommandName = "Añadir" Then
  50.             Añadir_Articulo()
  51.             Label1.Text = "Articulo Añadido"
  52.  
  53.         End If
  54.  
  55.     End Sub

2 - Tengo una página para que el uusuario pueda ver el estado de su carro. Quiero que el GridView muestre su contenido al cargar la página... pero no lo muestra. En cambio, si pongo un botón que llame a "Añadir_Articulo", añade el artículo y se muestra el contenido del GridView.

Código vb:
Ver original
  1. Private Sub Page_Load(ByVal s As Object, ByVal e As EventArgs)
  2.         If Not Page.IsPostBack And Session("Carrito") Is Nothing Then
  3.  
  4.             CrearCarro()
  5.         Else
  6.             Micarro = Session("Carrito")
  7.         End If
  8.  
  9.         GridView1.DataSource = Micarro
  10.         GridView1.DataBind()
  11.         GridView1.Visible = True
  12.     End Sub

Algún consejo? Gracias!!

Última edición por Eloytxo; 22/12/2009 a las 04:28
  #11 (permalink)  
Antiguo 22/12/2009, 04:48
 
Fecha de Ingreso: noviembre-2009
Mensajes: 44
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Primero de mis problemas solucionado. La solución ha sido cambiar la columna ImageButton por una Template Field:

He cambiado Esto:

Código vb:
Ver original
  1. <asp:ButtonField ButtonType="Image" CommandName="Añadir" ImageUrl="images/CarroRojo.jpg" Text="Añadir" />

Por Esto:

Código vb:
Ver original
  1. <asp:TemplateField ShowHeader="False">
  2. <ItemTemplate>
  3. <asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="false" CommandName="Añadir" ImageUrl="~/images/CarroRojo.jpg" />
  4. </ItemTemplate>
  5. </asp:TemplateField>

Ahora bien, alguien me dice porque el GV no se carga al hacer el Page_load?

Gracias!!
  #12 (permalink)  
Antiguo 22/12/2009, 04:48
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: insertar en gridview y guardar

Hola Eloytxo.

En el problema uno no tiene porque ser la imagen del boton, puede ser cualquier src="" en la cual la imagen no esta o directamente no esta declarado el src ni vacio (src="")
Lamentablemente si no encontras cual es vas a tener que ir eliminando cosas de tu pagina hasta ver que el problema no pasa y ahi sabes que dentro de lo ultimo que sacaste esta el problema.
Para verificar que sea un Doble Postback lo que tenes hace una parada en el Page Load para verificarlo ok.


En el problema 2 tenes mal puesto el If....
En la primera carga nunca te va a mostrar nada ya que estas preguntando si es la primera vez que entra y si Carrito no tienen nada (cosa que puede pasar clar!!!).
Colocalo asi a ver que pasa...


Private Sub Page_Load(ByVal s As Object, ByVal e As EventArgs)
If Not Page.IsPostBack Then
If Session("Carrito") Is Nothing Then
CrearCarro()
End If

Micarro = Session("Carrito")

GridView1.DataSource = Micarro
GridView1.DataBind()
GridView1.Visible = True

End If
End Sub
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #13 (permalink)  
Antiguo 22/12/2009, 08:16
 
Fecha de Ingreso: noviembre-2009
Mensajes: 44
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Gracias por contestar Marcelo, pero tras probar tu código, el resultado es el mismo.

Sólo se muestra el GridView cuando pulso el botón. No se porqué pasa.

Si por ejemplo, en el código del Page_load sólo pongo:

Label1.Text =" Blablabla"

Tampoco se ejecuta ese código....

Alguna idea??Gracias!
  #14 (permalink)  
Antiguo 22/12/2009, 08:19
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: insertar en gridview y guardar

Recien vi que te falta esto Handles Me.Load nunca iba a funcionar sin esto ok, es por eso que no entra en tu page load.

Private Sub Page_Load(ByVal s As Object, ByVal e As EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
If Session("Carrito") Is Nothing Then
CrearCarro()
End If

Micarro = Session("Carrito")

GridView1.DataSource = Micarro
GridView1.DataBind()
GridView1.Visible = True

End If
End Sub
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #15 (permalink)  
Antiguo 23/12/2009, 05:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 44
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

Vaya fallo, jaja. Muchísimas gracias Marcelo, ya funciona de maravilla.

Ahora me toca empezar a tratar los datos de artículos como debe ser, a ver que tal me va...

Gracias!!!!

P.D. Y feliz navidad ya que estamos, jeje.
  #16 (permalink)  
Antiguo 23/12/2009, 06:11
Avatar de mdavila  
Fecha de Ingreso: julio-2007
Ubicación: Montevideo (Uruguay)
Mensajes: 919
Antigüedad: 16 años, 9 meses
Puntos: 13
Respuesta: insertar en gridview y guardar

Me alegro, nos estamos viendo por aca... Saludos y felices fiestas tambien para vos.
__________________
Marcelo Davila.

:. En Ignorante te conviertes al no preguntar, el que pregunta se nutre... :.
  #17 (permalink)  
Antiguo 14/01/2011, 15:21
 
Fecha de Ingreso: enero-2011
Mensajes: 1
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: insertar en gridview y guardar

hola soy nuevo en el mundo asp.net y quisiera saber si me pueden ayudar con un problemita:

es que estoy creando una aplicacion asp.net y necesito recorrer un gridview y lo hago de esta forma:

foreach (GridViewRow grid in DataGrid1.Rows)
{
string sValorColumna0 = DataGrid1.Rows[0].Cells[0].Text.ToString().Trim();
string sValorColumna1 = DataGrid1.Rows[0].Cells[1].Text.ToString().Trim();
string sValorColumna2 = DataGrid1.Rows[0].Cells[2].Text.ToString().Trim();
Mensaje.Text = sValorColumna0;
}


el problema es que me sale este error:

Error 5 'System.Web.UI.WebControls.DataGrid'no contiene una definición para "Rows"y que ningún método de extensión 'Rows' de aceptar un primer argumento de tipo'System.Web.UI.WebControls.DataGrid' se puede encontrar (¿falta una directiva using o una referencia de ensamblado)

entonces no se que estoy haciendo mal....

Gracias por su atención y si me pueden colaborar mucho mejor...
  #18 (permalink)  
Antiguo 05/03/2013, 22:02
 
Fecha de Ingreso: marzo-2013
Mensajes: 1
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: insertar en gridview y guardar

hola. necesito ayuda con un ejercicio similar al primero, es practicamente igual pero me dice que la columna de id padre NO EXISTE en esa tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:14.