Principales respuestas
ayuda no puedo obtener los datos de Footer con gridview

Pregunta
-
amigos estoy haciendo un gridview para poder ingresar datos, y cuando no hay registro en el Footer pongo una tabla con los datos que se tienen que capturar, pero no he podido obtener los datos no manda error pero no obtengo los datos el gridview es:
<asp:GridView ID="GridMarcas" runat="server" AutoGenerateColumns="False" ShowFooter="True" CssClass="GridOfertas" OnRowCommand="GridMarcas_RowCommand" OnRowDataBound="GridMarcas_RowDataBound" OnSelectedIndexChanged="GridMarcas_SelectedIndexChanged" DataKeyNames="IDMARCA"> <Columns> <asp:TemplateField> <EditItemTemplate> <asp:ImageButton ID="imgbtnUpdate" runat="server" CommandName="Update" Height="20px" ImageUrl="~/imagenes/Marcas/update.jpg" ToolTip="Update" Width="20px" /> <asp:ImageButton ID="imgbtnCancel" runat="server" CommandName="Cancel" Height="20px" ImageUrl="~/imagenes/Marcas/Cancel.jpg" ToolTip="Cancel" Width="20px" /> </EditItemTemplate> <FooterTemplate> <asp:ImageButton ID="imgbtnAdd" runat="server" Height="30px" ImageUrl="~/imagenes/Marcas/AddNewitem.jpg" CommandName="Insert" ToolTip="Agregar" Width="30px" /> </FooterTemplate> <ItemTemplate> <asp:ImageButton ID="imgbtnEdit" runat="server" CommandName="Edit" Height="20px" ImageUrl="~/imagenes/Marcas/Edit.jpg" ToolTip="Editar" Width="20px" /> <asp:ImageButton ID="imgbtnDelete" runat="server" CommandName="Delete" Height="20px" ImageUrl="~/imagenes/Marcas/delete.jpg" ToolTip="Eliminar" Width="20px" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="IDMARCA" HeaderText="Id" Visible="False" /> <asp:TemplateField HeaderText="Clase"> <EditItemTemplate> <asp:TextBox ID="txtEditClase" runat="server" Text='<%# Bind("CLASE") %>'></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtFtClase" runat="server" CssClass="TextboxMarcas"></asp:TextBox> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblItemClase" runat="server" Text='<%# Bind("CLASE") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Registro San."> <EditItemTemplate> <asp:TextBox ID="txtEditRegistro" runat="server" Text='<%# Bind("REGISTRO") %>'></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtFtRegistro" runat="server"></asp:TextBox> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblItemRegistro" runat="server" Text='<%# Bind("REGISTRO") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Of. Exime. Reg."> <EditItemTemplate> <asp:TextBox ID="txtEditOficio" runat="server" Text='<%# Bind("OFICIO_EXIME") %>'></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtFtOficio" runat="server"></asp:TextBox> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblItemOficio" runat="server" Text='<%# Bind("OFICIO_EXIME") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Tram. Inclusión."> <EditItemTemplate> <asp:TextBox ID="txtEditTramite" runat="server" Text='<%# Bind("TRAMITE_INCLUSION") %>'></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtFtTramite" runat="server"></asp:TextBox> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblItemTramite" runat="server" Text='<%# Bind("TRAMITE_INCLUSION") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Origen"> <EditItemTemplate> <asp:TextBox ID="txtEditOrigen" runat="server" Text='<%# Bind("ORIGEN") %>'></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtftOrigen" runat="server"></asp:TextBox> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblOrigen" runat="server" Text='<%# Bind("ORIGEN") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Fabricante"> <EditItemTemplate> <asp:TextBox ID="txtEditFabricante" runat="server" Text='<%# Bind("FABRICANTE") %>'></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtFtFabricante" runat="server"></asp:TextBox> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblItemFabricante" runat="server" Text='<%# Bind("FABRICANTE") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="RFC FABRIC."> <EditItemTemplate> <asp:TextBox ID="txtEditRfc" runat="server" Text='<%# Bind("RFC_FABRICANTE") %>'></asp:TextBox> </EditItemTemplate> <FooterTemplate> <asp:TextBox ID="txtFtRfc" runat="server"></asp:TextBox> </FooterTemplate> <ItemTemplate> <asp:Label ID="lblItemRfc" runat="server" Text='<%# Bind("RFC_FABRICANTE") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> <EmptyDataTemplate> <table class="tabla"> <tr> <th> </th> <th>Clase;</th> <th>Registro San.</th> <th>Of. Exime Reg.</th> <th>Tram. Inclución</th> <th>Origen</th> <th>Fabricante</th> <th>RFC FABRICANTE</th> </tr> <tr> <td> <asp:ImageButton ID="ImageButton1" runat="server" Height="20px" ImageUrl="~/imagenes/Marcas/AddNewitem.jpg" Width="20px" CommandName="InsertPrimero" OnCommand="ImageButton1_Command" OnClick="ImageButton1_Click"/></td> <td> <asp:TextBox ID="txtclasetab" runat="server"></asp:TextBox></td> <td> <asp:TextBox ID="txtregistrotab" runat="server"></asp:TextBox></td> <td> <asp:TextBox ID="txtoficiotab" runat="server"></asp:TextBox></td> <td><asp:TextBox ID="txttramitetab" runat="server"></asp:TextBox></td> <td> <asp:TextBox ID="txtorigentab" runat="server"></asp:TextBox></td> <td> <asp:TextBox ID="txtfabricantetab" runat="server"></asp:TextBox></td> <td> <asp:TextBox ID="txtrfctab" runat="server"></asp:TextBox></td> </tr> </table> </EmptyDataTemplate> <HeaderStyle BackColor="#61A6F8" Font-Size="1em" ForeColor="White" /> </asp:GridView>
y el código a donde quiero obtener los registros para almacenarlos en la base de datos es:
protected void ImageButton1_Click(object sender, ImageClickEventArgs e) { string error=null; int USUARIOID = Convert.ToInt32(Session["IdUsuario"]); int PROVEEDORID = Convert.ToInt32(this.lblProveedorId.Text); int MREQID = Convert.ToInt32(this.ddclave.SelectedValue); //TextBox txtclasetab = this.GridMarcas.FooterRow.FindControl("txtclasetab") as TextBox; TextBox txtclasetab = (TextBox)this.GridMarcas.FooterRow.FindControl("txtclasetab") as TextBox; TextBox txtregistrotab = (TextBox)this.GridMarcas.FooterRow.FindControl("txtregistrotab") as TextBox; TextBox txtoficiotab = (TextBox)this.GridMarcas.FooterRow.FindControl("txtoficiotab") as TextBox; TextBox txttramitetab = (TextBox)this.GridMarcas.FooterRow.FindControl("txttramitetab") as TextBox; TextBox txtorigentab = (TextBox)this.GridMarcas.FooterRow.FindControl("txtorigentab") as TextBox; TextBox txtfabricantetab = (TextBox)this.GridMarcas.FooterRow.FindControl("txtfabricantetab") as TextBox; TextBox txtrfctab = (TextBox)this.GridMarcas.FooterRow.FindControl("txtrfctab") as TextBox; //TextBox txtclasetab = (TextBox)control.FindControl("txtclasetab"); /*TextBox txtregistrotab = (TextBox)this.GridMarcas.FooterRow.FindControl("txtregistrotab"); TextBox txtoficiotab = (TextBox)control.FindControl("txtoficiotab"); TextBox txttramitetab = (TextBox)control.FindControl("txttramitetab"); TextBox txtorigentab = (TextBox)control.FindControl("txtorigentab"); TextBox txtfabricantetab = (TextBox)control.FindControl("txtfabricantetab"); TextBox txtrfctab = (TextBox)control.FindControl("txtrfctab");*/ try { EntOfertas obj = new EntOfertas(); obj.USUARIOID = Convert.ToInt32(Session["IdUsuario"]); obj.PROVEEDORID = Convert.ToInt32(this.lblProveedorId.Text);//id del proveedor)) obj.MREQID = Convert.ToInt32(this.ddclave.SelectedValue); obj.CLASE = HttpUtility.HtmlEncode((txtclasetab.Text).ToUpper());//clase obj.REGISTRO = HttpUtility.HtmlEncode((txtregistrotab.Text).ToUpper());//registro obj.OFICIO = HttpUtility.HtmlEncode((txtoficiotab.Text).ToUpper());//oficio obj.TRAMITE = HttpUtility.HtmlEncode((txttramitetab.Text).ToUpper());//TRAMITE obj.PROCEDENCIA = HttpUtility.HtmlEncode((txtorigentab.Text).ToUpper());//OGIEN obj.FABRICANTE = HttpUtility.HtmlEncode((txtfabricantetab.Text).ToUpper());//FABRICANTE obj.RFC_FABRICANTE = HttpUtility.HtmlEncode((txtrfctab.Text).ToUpper());//RFC if (NegOfertas.Guarda_Marcas_Temporales(obj) == 1) { lblerror.Text = "Registro Almacenado en la base de datos"; lblerror.Visible = true; } else { lblerror.Text = "Ocurrio un error durante el Guardado intente nuevamente"; lblerror.Visible = true; } } catch (Exception E) { error = E.Message.ToString() + " - " + E.Source.ToString(); } }
como verán lo he intentado de varias maneras sin que pueda obtener el datos del textbox.
podrían echarme apoyarme y ver en que estoy mal, muchas gracias
Horacio Xochitemol Bautista
Respuestas
-
Hola de nuevo Xochitemol,
Aquí un ejemplo con código fuente para hacer el caso que mencionas.
Add record to Database using ASP.Net GridView EmptyDataTemplate and FooterTemplate
Saludos,
@norrojas
- Propuesto como respuesta Karen MalagónModerator martes, 1 de septiembre de 2015 20:55
- Marcado como respuesta Karen MalagónModerator miércoles, 2 de septiembre de 2015 22:47
Todas las respuestas
-
hola
pero cuando usas esta linea
TextBox txtclasetab = (TextBox)this.GridMarcas.FooterRow.FindControl("txtclasetab") as TextBox;
estas buscando el txtclasetab que defines en el EmptyDataTemplate, no en el footer
o sea buscas controlaes que defines en un template diferente
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
-
pero entonces no usas el FooterRow desde este solo buscas los controles que defines en FooterTemplate
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
-
-
hola
quizas ayude
How To find control inside EmptyTemplate
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
Leandro.
ya intente pero no puedo obtener el dato; podrias echarme una mano por favor.
lo intente asi:
extBox txtclasetab = GridMarcas.Controls[0].Controls[0].FindControl("txtclasetab") as TextBox; TextBox txtregistrotab = GridMarcas.Controls[0].Controls[0].FindControl("txtregistrotab") as TextBox;
y tambien asi:
GridViewRow row = (GridViewRow)((Control)e.CommandSource).NamingContainer; if (row != null) { TextBox tb = (TextBox)row.FindControl("TextBox1"); }
pero no funciona, muchas gracias
Horacio Xochitemol Bautista
-
-
una duda, porque defines controles en el EmptyDataTemplate ? no es una buena idea
porque no defines estos por fuera del grid y si este no tiene registrso que mostrar habilitas los controles
eso de usar Controls[0] varias veces para ubicar un control queda pesimo en el codigo
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
-
Hola,
Me imagino que la idea es que puedas agregar un nuevo registro desde el GridView, sino hay datos te muestra un formulario en el EmptyDataTemplate, y si ya tiene datos Te muestra los controles en el FooterTemplate, y en el evento RowCommand del GridView agregas los nuevos registros.
De hecho mi sugerencia de buscar los controles, es porque yo uso ese código para un comportamiento similar.
En el evento RowCommand busco en un lugar o en otro con estas lineas de código.
TextBox nombreTextBox, code; try { nombreTextBox = competenecyGridView.FooterRow.FindControl("nameTextBoxFooter") as TextBox; code = competenecyGridView.FooterRow.FindControl("codeTextBoxFooter") as TextBox; } catch { nombreTextBox = competenecyGridView.Controls[0].Controls[0].Controls[0].FindControl("nameTextBoxFooter") as TextBox; code = competenecyGridView.Controls[0].Controls[0].Controls[0].FindControl("codeTextBox") as TextBox; }
Por favor coméntanos si resolviste el caso.
Saludos,
@norrojas
- Editado Norberto Rojas lunes, 31 de agosto de 2015 22:16 texto
-
-
Hola de nuevo Xochitemol,
Aquí un ejemplo con código fuente para hacer el caso que mencionas.
Add record to Database using ASP.Net GridView EmptyDataTemplate and FooterTemplate
Saludos,
@norrojas
- Propuesto como respuesta Karen MalagónModerator martes, 1 de septiembre de 2015 20:55
- Marcado como respuesta Karen MalagónModerator miércoles, 2 de septiembre de 2015 22:47
-
Amigos ya pude Ingresar el registro y obtener el dato de la siguiente manera:
if (e.CommandName.Equals("InsertFooter")) { Control control = null; if (this.GridMarcas.FooterRow != null) { control = this.GridMarcas.FooterRow; } else { control = this.GridMarcas.Controls[0].Controls[0]; } int USUARIOID = Convert.ToInt32(Session["IdUsuario"]); // int PROVEEDORID = Convert.ToInt32(this.lblProveedorId.Text); // int MREQID = Convert.ToInt32(this.ddclave.SelectedValue); try { string error = null; string txtclase = (control.FindControl("txtclasetab") as TextBox).Text; string txtregistro = (control.FindControl("txtregistrotab") as TextBox).Text; string txtoficio = (control.FindControl("txtoficiotab") as TextBox).Text; string txttramite = (control.FindControl("txttramitetab") as TextBox).Text; string txtorigen = (control.FindControl("txtorigentab") as TextBox).Text; string txtfabricante = (control.FindControl("txtfabricantetab") as TextBox).Text; string txtrfc = (control.FindControl("txtrfctab") as TextBox).Text; //EJECUTO PROCEDIMEINTO PARA INCLUSION DE MARCA EntOfertas obj = new EntOfertas(); obj.USUARIOID = Convert.ToInt32(Session["IdUsuario"]); obj.CLASE = HttpUtility.HtmlEncode((txtclase).ToUpper());//clase obj.REGISTRO = HttpUtility.HtmlEncode((txtregistro).ToUpper());//registro obj.OFICIO = HttpUtility.HtmlEncode((txtoficio).ToUpper());//oficio obj.TRAMITE = HttpUtility.HtmlEncode((txttramite).ToUpper());//TRAMITE obj.PROCEDENCIA = HttpUtility.HtmlEncode((txtorigen).ToUpper());//OGIEN obj.FABRICANTE = HttpUtility.HtmlEncode((txtfabricante).ToUpper());//FABRICANTE obj.RFC_FABRICANTE = HttpUtility.HtmlEncode((txtrfc).ToUpper());//RFC if (NegOfertas.Guarda_Marcas_Temporales(obj) == 1) { Recupera_Marcas_Temporales(); MessageBoxShow(this, "Registro Almacenado"); } else { //lblerror.Text = "Ocurrio un error durante el Guardado intente nuevamente"; //lblerror.Visible = true; MessageBoxShow(this, "Ocurrio un error durante el Guardado intente nuevamente"); } } catch (Exception E) { errorgral = E.Message.ToString() + " - " + E.Source.ToString(); } }
ahora bien cuando en el gridview activo la opción de edición y después del update me guarda los cambios pero no me regresa el gridview al estado original.
podrían ayudarme con eso. saludos
Horacio Xochitemol Bautista