Microsoft Developer Network > Página Inicial dos Fóruns > Fóruns do Web Development > ASP .NET > GridView- Mudar o Enable de um link dentro de uma coluna da view
Fazer uma PerguntaFazer uma Pergunta
 

RespondidoGridView- Mudar o Enable de um link dentro de uma coluna da view

  • terça-feira, 3 de novembro de 2009 21:04Krusst Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Ola pessoal

    eu tenho o seguinte grid

    <asp:GridView ID="gridViewPessoa" runat="server" AutoGenerateColumns="False" 
    	CellPadding="4"  GridLines="None" 
    	OnPageIndexChanging="gridViewPessoa_PageIndexChanging" Width="600px"
    	>
    	
    	<Columns>                              
    		<asp:TemplateField HeaderText="Nome">
    			<ItemTemplate>
    				<%#Eval("Nome")%>
    			</ItemTemplate>
    		</asp:TemplateField>
    
    <asp:TemplateField HeaderText="Status">
     <ItemTemplate>
      <%#Eval("Status")%>
     </ItemTemplate>
    </asp:TemplateField>   <asp:TemplateField HeaderText="-"> <ItemTemplate> <asp:Panel ID="panelEdit" runat="server" Visible="true"> <a href="../../processo/pessoa_form.aspx?pessoaID=<%#Eval("PessoaID")%>&&pageAction=2"> <img src="../../img/icon/icon_user_edit.png" height="16" width="16" alt="Visualizar <%#Eval("Nome")%>" class="linkFalso"/> </a> </asp:Panel> <asp:Panel ID="panelDelete" runat="server" Visible="true"> <a href="agente_credito_desativa_form.aspx?agenteCreditoID=<%#Eval("ID")%>&clienteChave=abcd"> <img src="../../img/icon/icon_user_remove.png" height="16" width="16" alt="Desativar <%#Eval("Nome")%>" class="linkFalso"/> </a> </asp:Panel> </ItemTemplate> </asp:TemplateField>  </Columns> </asp:GridView>
    o problema que estou tendo é no <asp:Panel ID="panelEdit"  runat="server" Visible="true"> e no <asp:Panel ID="panelDelete"  runat="server" Visible="true">.
    quando eu tiver no "<%#Eval("Status")%>" o valor "Inativo" eu nao devo mostrar o panel "panelDelete".

    porem, cada coluna pode ter um valor diferente, e em algumas linhas vou ter que mostrar e em outras nao
    como eu faco para resolver este problema?

    abs

    T+


    É melhor acender uma vela do que praguejar contra e Escuridão

Respostas

  • terça-feira, 3 de novembro de 2009 23:36kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    Boa noite,

          A solução do _Xakkal_ deve resolver, porém gostaria de deixar outra solução por questões de padrão, pois sempre que possível é melhor tentar evitar a mistura de código HTML com o C#/VB.

          Para você ter mais controle sobre as linhas você poderia utilizar o evento RowDataBound da GridView.

          Um exemplo seria assim(dentro do evento RowDataBound da GridView):

          if (e.Row.RowType == DataControlRowType.DataRow)
          {
              if(Convert.ToString(e.Row.DataItem("Status")).ToLower().Trim().Equals("inativo"))
              {
                 e.row.Cells[2].FindControl("panelDelete").Visible = false;
              }
          }


          
    • Marcado como RespostaKrusst quinta-feira, 5 de novembro de 2009 17:19
    •  

Todas as Respostas

  • terça-feira, 3 de novembro de 2009 22:21_Xakkal_ Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Boa Noite amigo,

    No painel, vc tenta colocar

    Visible='<%# Converter.ToBoolean(Eval("Status"))%>'

    espero que tenha ajudado.
  • terça-feira, 3 de novembro de 2009 23:36kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido
    Boa noite,

          A solução do _Xakkal_ deve resolver, porém gostaria de deixar outra solução por questões de padrão, pois sempre que possível é melhor tentar evitar a mistura de código HTML com o C#/VB.

          Para você ter mais controle sobre as linhas você poderia utilizar o evento RowDataBound da GridView.

          Um exemplo seria assim(dentro do evento RowDataBound da GridView):

          if (e.Row.RowType == DataControlRowType.DataRow)
          {
              if(Convert.ToString(e.Row.DataItem("Status")).ToLower().Trim().Equals("inativo"))
              {
                 e.row.Cells[2].FindControl("panelDelete").Visible = false;
              }
          }


          
    • Marcado como RespostaKrusst quinta-feira, 5 de novembro de 2009 17:19
    •  
  • quarta-feira, 4 de novembro de 2009 11:41Krusst Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Bom dia  todos

    kaueBranco
    quando executei eu codigo, tive este problema

    Non-invocable member 'System.Web.UI.WebControls.GridViewRow.DataItem' cannot be used like a method. 

    Xakall
    com o seu codigo, tive este problema
    desta forma

    <

     

    asp:Panel ID="panelDelete" runat="server" Visible="<%Converter.ToBoolean(#Eval("IsDelete"))%>">

    <

     

    asp:Panel ID="panelDelete" runat="server" Visible="<%#Converter.ToBoolean(Eval("IsDelete"))%>">

    ele me retorna o seguinte erro
    "Cannot create an object of type 'System.Boolean' from its string representation '"<%Converter.ToBoolean(#Eval("IsDelete"))%' for the 'Visible' property."

    o meu dataTable

            public DataTable convertListToDataTable(List<Pessoa> pessoaLista)
            {
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add("ID");
                dataTable.Columns.Add("Nome");
                dataTable.Columns.Add("Documento");
                dataTable.Columns.Add("Status");
                dataTable.Columns.Add("IsDelete");
    
                foreach (Pessoa pessoaTemp in pessoaLista)
                {
                    DataRow dr = dataTable.NewRow();
                    dr["ID"] = pessoaTemp.Id;
                    dr["Nome"] = pessoaTemp.Pessoa.Nome;
                    dr["Documento"] = pessoaTemp.Pessoa.Documento;
                    dr["Status"] = pessoaTemp.Status.ToString();
                    if (pessoaTemp.Status == Status.Inativo) {
                        dr["IsDelete"] = true.ToString();
                    }
                    dataTable.Rows.Add(dr);
                }
    
                return dataTable;
            }


    o que estou fazendo de errado


    abs

    T+



    É melhor acender uma vela do que praguejar contra e Escuridão
  • quarta-feira, 4 de novembro de 2009 11:51kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Desculpe pelo erro.

    Mude para:

    if(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Status")).ToLower().Trim().Equals("inativo"))

  • quinta-feira, 5 de novembro de 2009 17:19Krusst Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Valeu kaueBranco, funcionou

    veja como ficou
    no gridview

     

    <asp:GridView ID="gridViewPessoa" runat="server" AutoGenerateColumns="False"

     

    CellPadding="4" GridLines="None"

     

    OnPageIndexChanging="gridViewPessoa_PageIndexChanging" Width="600px"

     

    OnRowCreated="DoTeste"

     

    >

    ....

     

    <asp:TemplateField HeaderText="-">

     

    <ItemTemplate>

     

    <asp:Panel ID="panelEdit" runat="server" Visible="true">

     

    <a href="pessoa.aspx?pessoaID=<%#Eval("PessoaID")%>&&pageAction=2">

     

    <img src="../../img/icon/icon_user_edit.png" height="16" width="16" alt="Visualizar <%#Eval("Nome")%>" class="linkFalso"/>

     

    </a>

     

    </asp:Panel>

     

     

    <asp:Panel ID="panelDelete" runat="server" Visible="true">

     

    <a href="pessoa_form.aspx?agenteCreditoID=<%#Eval("ID")%>&clienteChave=abcd">

     

    <img src="../../img/icon/icon_user_remove.png" height="16" width="16" alt="Desativar <%#Eval("Nome")%>" class="linkFalso"/>

     

    </a>

     

    </asp:Panel>

     

     

    </ItemTemplate>

     

     

    </asp:TemplateField>

     

     

    </Columns>

     

     

    <HeaderStyle CssClass="headerStyle"/>

     

    <FooterStyle CssClass="footerStyle"/>

     

    <PagerStyle CssClass="pagerStyle"/>

     

    <RowStyle CssClass="rowStyle" />

     

    <AlternatingRowStyle CssClass="alternatingRowStyle"/>

     

    </asp:GridView>



    no fonte


     

    protected void DoTeste(object sender, GridViewRowEventArgs e)

    {

     

     

    if (e.Row.RowType == DataControlRowType.DataRow)

    {

     

    //if (e.Row.DataItem("Status").ToLower().Trim().Equals("inativo"))

     

    if (Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Status")).ToLower().Trim().Equals("inativo"))

    {

    e.Row.Cells[4].FindControl(

    "panelDelete").Visible = false;

    }

    }


    obrigado pelal ajuda

    abs

    T+


    É melhor acender uma vela do que praguejar contra e Escuridão