Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DaniloTec

[Resolvido] Adicionar controle no gridview - C#

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.