Usuário com melhor resposta
Gridview valor de coluna invisivel

Pergunta
-
Boa noite,Para terminar o aperfeicoamento da página que estou implementando só falto um permonenorzinho que não estou conseguindo solucionar, já pesquisei no google e no forum e não encontrei solução.Tenho uma página com uma tabcontainer e vários tabpanel's, dentro de um tabpanel tenho uma gridview, com o datakeyfield defido e 4 colunas, as 3ª são boundfield e a última uma templatefield uma vez que tem umm linkbutton. A 1ª coluna está escondida uma vez que é a coiluna DatakeyFieldNo evento rowcommand estou a recuperar os valores das colunas 2 e 3 e passo para textbox's para evitar ler novamente da BD. O problema está na 1ª coluna, uma vez que está escondida não é possivel recuperar o valor.A solução que tinha pensado era em tempo de execução, mostrar a coluna, resgatar o valor e depois esconder de seguida, acontece que não me está a ser possivel mostar o valor.Para despiste optei por mostrar e não esconder mas ai só ao segundo clique no comando da gridview é que resgata.Vou postar o código:HTML da coluna de comando
<asp:TemplateField HeaderText="Editar"> <ItemTemplate> <asp:LinkButton ID="cmdEditar" CommandArgument='<%# Container.DataItemIndex %>' CommandName="Editar" runat="server"> <img border="0" src="images/edit.gif" alt="Editar" /> </asp:LinkButton> </ItemTemplate> <ItemStyle HorizontalAlign="Center" Width="40px" /> </asp:TemplateField>
C#protected void gvProjectos_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Editar") { //Encontral o Botao Adiconar do painel projectos Button btPanel = (Button)tbpProjectos.FindControl("btAdicionar"); //Esconde botão btPanel.Visible = false; //mostra painel de edição pnEdicao.Visible = true; //mostra a 1ª coluna da gridview gvProjectos.Columns[0].Visible = true; //encontra o indice de linha clicada int index = Convert.ToInt32(e.CommandArgument); //define o indice da linha clicada GridViewRow row = gvProjectos.Rows[index]; //Atribui o ID da Linha na label lbIDProjecto.Text = row.Cells[0].Text; //Atribui o valor da 2º coluna txProjecto.Text = row.Cells[1].Text; //Atribui o valor da 3º coluna if (row.Cells[2].Text == "Activo") { ddlEstado.SelectedValue = "1"; } else { ddlEstado.SelectedValue = "0"; } //esconde a 1ª coluna gvProjectos.Columns[0].Visible = false; } }
Como poderei resolver sem mexer no que já está?
Será por estar dentro de um tabcontainer?
Obrigado!
Respostas
-
Pedro, veja os links abaixo:
http://www.dev102.com/2008/03/05/how-to-hide-columns-of-a-gridview/
http://www.codeproject.com/KB/cs/Hide_GridView_Column_Cell.aspx
Abraço
Estevam
**** Se a reposta foi útil, então não esqueça de marca-lá. ***- Sugerido como Resposta Seilor Bonancio JuniorModerator quarta-feira, 27 de abril de 2011 11:48
- Marcado como Resposta skindu quarta-feira, 27 de abril de 2011 13:48
Todas as Respostas
-
Pedro, veja os links abaixo:
http://www.dev102.com/2008/03/05/how-to-hide-columns-of-a-gridview/
http://www.codeproject.com/KB/cs/Hide_GridView_Column_Cell.aspx
Abraço
Estevam
**** Se a reposta foi útil, então não esqueça de marca-lá. ***- Sugerido como Resposta Seilor Bonancio JuniorModerator quarta-feira, 27 de abril de 2011 11:48
- Marcado como Resposta skindu quarta-feira, 27 de abril de 2011 13:48
-
vc pode usar um HiddenField para armazenar o dado da primeira coluna
<asp:TemplateField HeaderText="Editar"> <ItemTemplate> <asp:HiddenField ID="primeiraColuna" runat="server" value='<%# Eval("Campo") %>'/> <asp:LinkButton ID="cmdEditar" CommandArgument='<%# Container.DataItemIndex %>' CommandName="Editar" runat="server"> <img border="0" src="images/edit.gif" alt="Editar" /> </asp:LinkButton> </ItemTemplate> <ItemStyle HorizontalAlign="Center" Width="40px" /> </asp:TemplateField>
var hiddenField = row.Cells[2].Controls.OfType<HiddenField>().FirstOrDefault();