none
ayuda no puedo obtener los datos de Footer con gridview RRS feed

  • 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>&nbsp;</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

    lunes, 31 de agosto de 2015 15:48

Respuestas

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

    lunes, 31 de agosto de 2015 17:03
  • Si Leandro, perdón es de donde quiero tomar el dato del EmptyDataTemplate

    Horacio Xochitemol Bautista

    lunes, 31 de agosto de 2015 17:20
  • 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

    lunes, 31 de agosto de 2015 17:22
  • Ok Leandro déjame intentar y te comento saludos y muchas gracias.

    Horacio Xochitemol Bautista

    lunes, 31 de agosto de 2015 17:34
  • Hola Xochitemol,

    Para encontrar los controles en el EmptyDataTemplate lo puedes hacer así:

    var txtclasetab =  this.GridMarcas.Controls[0].Controls[0].Controls[0].FindControl("txtclasetab") as TextBox;

    Saludos,

    @norrojas

    lunes, 31 de agosto de 2015 17:37
  • hola

    quizas ayude

     How To find control inside EmptyTemplate

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 31 de agosto de 2015 18:02
  • 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

    lunes, 31 de agosto de 2015 19:07
  • Hola Xochitemol,

    Quizá no viste mi comentario anterior, Ya lo intentaste así: 

    var txtclasetab =  this.GridMarcas.Controls[0].Controls[0].Controls[0].FindControl("txtclasetab") as TextBox

    Saludos,

    @norrojas

    lunes, 31 de agosto de 2015 19:45
  • 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

    lunes, 31 de agosto de 2015 20:07
  • La idea es que desde el gridview se puedan ingresar datos a una tabla temporal.

    Horacio Xochitemol Bautista

    lunes, 31 de agosto de 2015 22:04
  • 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


    lunes, 31 de agosto de 2015 22:11
  • Hola Norberto esa es la idea, de hecho he probado tu código pero no funciona; sigo investigando

    Horacio Xochitemol Bautista

    martes, 1 de septiembre de 2015 1:25
  • 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

    martes, 1 de septiembre de 2015 14:17
  • 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

    viernes, 4 de septiembre de 2015 16:07