GridView- Mudar o Enable de um link dentro de uma coluna da view
- 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>o problema que estou tendo é no <asp:Panel ID="panelEdit" runat="server" Visible="true"> e no <asp:Panel ID="panelDelete" runat="server" Visible="true">.
<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>
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
- 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
- Boa Noite amigo,
No painel, vc tenta colocar
Visible='<%# Converter.ToBoolean(Eval("Status"))%>'
espero que tenha ajudado. - 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
- 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 - Desculpe pelo erro.
Mude para:
if(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Status")).ToLower().Trim().Equals("inativo"))- Marcado como RespostaHarley AraujoMSFT, Moderadorquinta-feira, 5 de novembro de 2009 13:12
- Não Marcado como RespostaKrusst quinta-feira, 5 de novembro de 2009 17:19
- 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

