DaniloTec 0 Denunciar post Postado Maio 12, 2009 Boa tarde. Gostaria de saber como eu faço para adicninar controles (dropdowslist,button,textbox,...) no gridview. Lendo algumas coisas que encontrei aqui no forum eu só consegui chegar nisso: Button btnExcluir = new Button(); btnExcluir.Text = "Excluir"; gvXML.Controls.Add(btnExcluir);Mas ele só acrescenta um ítem e é no final do grid. Eu preciso de um botão em cada linha.E como eu coloco uma função nele? Vlw! Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 12, 2009 Consegui uma pequena evolução; Button btnExcluir = new Button(); btnExcluir.ID = "btnExcluir"; btnExcluir.Text = "Excluir"; TableCell coluna = new TableCell(); gvXML.Rows[0].Cells.Add(coluna); gvXML.Rows[0].Cells[5].Controls.Add(btnExcluir);Mas ele só coloca na primeira linha da tabela e ainda não consegui colocar um evento nele. Compartilhar este post Link para o post Compartilhar em outros sites
daniel.cafonso 0 Denunciar post Postado Maio 12, 2009 DaniloTec, AQUI tem uma "coleção" de ótimos artigos sobre GridView. Acredito que vai te ajudar muito! []'s Daniel Afonso Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 12, 2009 Vlw a dica Daniel, é realmente um site muito bom. Mas eu estou tentando adicionar um controle via código e não encontrei nada a esse respeito. Fiz isso e cheguei muito perto. O problema é que ele coloca os botões todos em baixo do gride e não em uma coluna alinhada. protected void gvXML_RowCreated(object sender, GridViewRowEventArgs e) { TableCell cell = new TableCell(); Button btnExcluir = new Button(); btnExcluir.ID = "btnExcluir"; btnExcluir.Text = "Excluir"; cell.Controls.Add(btnExcluir); gvXML.Controls.Add(cell); }Estou quase lá, rs. Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Maio 13, 2009 Use o evento RowDataBound, ele é executado uma vez para cada linha da grid. Seu código vai ficar mais ou menos assim: protected void RowDataBound (....) { Button btn = new Button(); e.Row.Cells[5].Controls.Add(btn); } O código acima adicionar um botão em todas as linhas, na coluna de índice 5. Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 13, 2009 Boa Oenning, deu quase certo, rs. O problema é que ele colocou um botão no header do gridview. Eu tentei algo do tipo: protected void gvXML_RowDataBound(object sender, GridViewRowEventArgs e){ Button btnExcluir = new Button(); btnExcluir.ID = "btnExcluir"; btnExcluir.Text = "Excluir"; gvXML.Rows[1].Cells[4].Controls.Add(btnExcluir); }Mas não deu certo. A mensagem de erro é:Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index Minha idéia era dizer pra começar a incrementar o botão a partir da linha 1. Outro problema que eu vi aqui. O meu grid tem 5 colunas, ele teria que colocar uma na 6ª coluna (que não existe). Ao fazer isso aparece o mesmo erro de cima. Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Maio 13, 2009 Você vai precisar criar a sexta coluna no aspx, pode ser sem conteudo mesmo. Para não colocar na Header use: protected void gvXML_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { Button btnExcluir = new Button(); btnExcluir.ID = "btnExcluir"; btnExcluir.Text = "Excluir"; gvXML.Rows[1].Cells[4].Controls.Add(btnExcluir); } }Aquele if vai garantir que apenas nas linhas que forem de Dados sejam inseridos o botão. Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 13, 2009 Boa. Adicionei uma nova coluna do tipo TemplateField e coloquei o código: if (e.Row.RowType == DataControlRowType.DataRow){ Button btnExcluir = new Button(); btnExcluir.ID = "btnExcluir"; btnExcluir.Text = "Excluir"; btnExcluir.Click += new EventHandler(btnExcluir_Click); e.Row.Cells[0].Controls.Add(btnExcluir); // => ESTA DEU! //gvXML.Rows[1].Cells[4].Controls.Add(btnExcluir); => ESTA PARTE NÃO DEU CERTO. }Resolvi a execução do evento com a linha: btnExcluir.Click += new EventHandler(btnExcluir_Click);Só não estou conseguindo colocar a coluna na última posição. Ela esta na posição 0 (zero) e quero que ela fique no final do grid. Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Maio 14, 2009 Troca de zero para 4, fica assim: e.Row.Cells[4].Controls.Add(btnExcluir); A linha que você disse que não funcionou é porque você deixou fixo o índice da linha como sendo 1. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Maio 14, 2009 Se entendi você quer colocar no final da grid, acho que ao invés desse if: if (e.Row.RowType == DataControlRowType.DataRow){}Deveria verificar se é o Footer e não o DataRow. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 14, 2009 Troca de zero para 4, fica assim: e.Row.Cells[4].Controls.Add(btnExcluir); A linha que você disse que não funcionou é porque você deixou fixo o índice da linha como sendo 1. Eu já tinha feito isso. Ele coloca os botões no final, mas o cabeçalho ainda continua na primeira coluna. Se entendi você quer colocar no final da grid, acho que ao invés desse if: if (e.Row.RowType == DataControlRowType.DataRow){}Deveria verificar se é o Footer e não o DataRow. Abraços... O final que eu digo é referente as posições das colunas. Quero que a coluna dos botões seja a última da ordem. Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Maio 15, 2009 Não entendi, consegue colocar um print do resultado e um desenho do esperado? Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 18, 2009 O grid normal é assim: Grid 1 Quando eu declaro: e.Row.Cells[6].Controls.Add(btnExcluir);Fica assim:Grid 2 Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Maio 18, 2009 Mas não está certo? O único problema que eu vejo é que o ID deveria ser a primeira coluna e o botão a sexta coluna. É isso? Se for, só alterar a ordem no seu arquivo .aspx. Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 19, 2009 Não, não está. Repare que a coluna dos botões eu coloquei na última posição, mas e cabeçalho "Ação" continua em primeiro. Eu quero colocar o cabeçalho "Ação" e os botões na última posição. O código ASP.NET do grid está assim: <asp:GridView ID="gvXML" runat="server" OnRowDataBound="gvXML_RowDataBound"> <Columns> <asp:TemplateField HeaderText="Ação" SortExpression="10"></asp:TemplateField> </Columns> </asp:GridView>Não sei como colocar ele na última posição. Procurei algum atributo, mas não encontrei. Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Maio 19, 2009 Como esta usando o AutoGenerate, acho que ele sempre vai colocar o Template em primeiro. A única forma acho que seria adicionar esse coluna via código, em tempo de execução. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 19, 2009 Legal, e como eu faço isso? :) Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Maio 19, 2009 De uma olhada nesse artigo: http://www.highoncoding.com/Articles/29_Cr...mmatically.aspx Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Oenning 0 Denunciar post Postado Maio 19, 2009 Acho que voce nao precisa chegar no nivel de criar colunas via programacao, voce pode colocar as colunas no proprio arquivo aspx, assim como voce fez com a coluna do TemplateField. So que neste caso voce usa DataBound (posso ter errado, mas eh algo assim). Compartilhar este post Link para o post Compartilhar em outros sites
DaniloTec 0 Denunciar post Postado Maio 25, 2009 De uma olhada nesse artigo: http://www.highoncoding.com/Articles/29_Cr...mmatically.aspx Abraços... Quintelab, esse artigo não ajudou muito não. Acho que voce nao precisa chegar no nivel de criar colunas via programacao, voce pode colocar as colunas no proprio arquivo aspx, assim como voce fez com a coluna do TemplateField. So que neste caso voce usa DataBound (posso ter errado, mas eh algo assim). Oenning, eu sei que não precisa ir tão fundo para se criar uma simples coluna de botões, mas se é possível eu gostaria de saber como fazer. Mas se eu não conseguir fazer deste jeito eu tento outro com certeza. Vlw! Compartilhar este post Link para o post Compartilhar em outros sites