none
OCULTAR CAMPO EN GRIDVIEW RRS feed

  • Pregunta

  • Hola amigos, quiero hacerles la siguiente pregunta

    Tengo un gridview de la siguiente forma:

    <asp:GridView ID="Grilla" runat="server" AutoGenerateColumns="False" onrowcommand="Grilla_RowCommand">
        <Columns>
            <asp:ButtonField CommandName="Seleccionar" Text="Imprimir" />
            <asp:BoundField DataField="Nombre" HeaderText="Nombre" />
            <asp:BoundField DataField="Apellido" HeaderText="Apellido" />                              
        </Columns>
    </asp:GridView>

    NECESITO QUE CUANDO LA GRILLA ME CARGUE LOS DATOS EL DATO "IMPRIMIR" QUEDE VISIBLE = FALSE

    <asp:ButtonField CommandName="Seleccionar" Text="Imprimir" />

    Para cargar la grilla lo hago de la siguiente manera (A MODO DE EJEMPLO) pero no me resulta....

    public void CargaGrilla() { DataTable dt = new DataTable(); string nom = string.Empty;

    dt = Procedure_Load_Grid(); int i = 0; foreach (DataRow row in dt.Rows) { // OCULTAMOS EL CAMPO IMPRIMIR CUANDO EL NOMBRE SEA IGUAL A CARLOS nom = dt.Rows[i]["Nombre"].ToString().Trim(); if (nom == "Carlos") { Button btn = (Button)(Grilla.FindControl("Imprimir")); btn.Visible = false; } i++; } }


    Muchas Gracias, espero su ayuda

    lunes, 8 de febrero de 2016 15:22

Respuestas

  • Jona, yo por lo general lo que hago es crear una plantilla donde pongo el control Button
    <asp:TemplateField ShowHeader="False">
    <ItemTemplate>
    <div style="width: 100px;">
    <asp:Button ID="btnReprocesar" runat="server"                                     Text="Ejecutar" OnClick "btnReprocesar_Click"                                     CommandName = "Seleccionar" 
                                        Visible="true" />                 
                                    </div>
                                </ItemTemplate>
                            </asp:TemplateField>

    luego en la clase hago algo similar a lo que ya tenes
    Button btn = (Button)(e.Row.FindControl("btnReprocesar"));

    solo que esta parte lo dejo dentro de
    protected void grdProcesos_RowDataBound(Object sender, GridViewRowEventArgs e)

    el campo donde va el nombre lo pongo ya sea en un label o un textbox, dependiendo de la funcionalidad
    <asp:TemplateField ShowHeader="True">
    <ItemTemplate>
    <div style="width: 100px;">
    <asp:Label runat ="server" ID="lbNombre" Text='<%# Eval("Nombre") %>' Visible="false"></asp:Label>  />                 
                                    </div>
                                </ItemTemplate>
                            </asp:TemplateField>

    asi que al final quedaria algo asi
    protected void grdProcesos_RowDataBound(Object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
    {
    Button btn = (Button)(e.Row.FindControl("btnReprocesar"));
    Label lb = (Button)(e.Row.FindControl("lbNombre"));
    
    If(lb.Equals("Carlos", StringComparison.OrdinalIgnoreCase))
    {
      btn.visible = false
    }
    }
    }


    espero te sirva

    Att. Franklin Andino



    lunes, 8 de febrero de 2016 16:27

Todas las respuestas

  • hola

    no entiendo, porque cuando cargue los datos debes ocultar ese boton ? para que lo defines si vas a ocultarlo cuando haya datos, no tiene mucho sentido lo que planteas

    [GridView] - Ocultar dinámicamente botones, imágen

    como veras en el RowDataBound puedes acceder a los controles de la row para ocultar botones

    en tu caso para remover el control usarias la linea

    e.Row.Cells[0].Controls.Clear();


    de esta forma quitas los contoles de la primer columns, pero esto lo harias fila por file por eso el RowDataBound

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    lunes, 8 de febrero de 2016 15:51
  • Jona, yo por lo general lo que hago es crear una plantilla donde pongo el control Button
    <asp:TemplateField ShowHeader="False">
    <ItemTemplate>
    <div style="width: 100px;">
    <asp:Button ID="btnReprocesar" runat="server"                                     Text="Ejecutar" OnClick "btnReprocesar_Click"                                     CommandName = "Seleccionar" 
                                        Visible="true" />                 
                                    </div>
                                </ItemTemplate>
                            </asp:TemplateField>

    luego en la clase hago algo similar a lo que ya tenes
    Button btn = (Button)(e.Row.FindControl("btnReprocesar"));

    solo que esta parte lo dejo dentro de
    protected void grdProcesos_RowDataBound(Object sender, GridViewRowEventArgs e)

    el campo donde va el nombre lo pongo ya sea en un label o un textbox, dependiendo de la funcionalidad
    <asp:TemplateField ShowHeader="True">
    <ItemTemplate>
    <div style="width: 100px;">
    <asp:Label runat ="server" ID="lbNombre" Text='<%# Eval("Nombre") %>' Visible="false"></asp:Label>  />                 
                                    </div>
                                </ItemTemplate>
                            </asp:TemplateField>

    asi que al final quedaria algo asi
    protected void grdProcesos_RowDataBound(Object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
    {
    Button btn = (Button)(e.Row.FindControl("btnReprocesar"));
    Label lb = (Button)(e.Row.FindControl("lbNombre"));
    
    If(lb.Equals("Carlos", StringComparison.OrdinalIgnoreCase))
    {
      btn.visible = false
    }
    }
    }


    espero te sirva

    Att. Franklin Andino



    lunes, 8 de febrero de 2016 16:27