Ir para conteúdo

POWERED BY:

Arquivado

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

Bruno_Ferreira

Como adicionar um link à um ListView?

Recommended Posts

Boa Tarde galera,

 

Estou com mais um probleminha aqui que já pesquisei de tudo mas não acho resposta.

 

Tenho um ListView aqui que estou preenchendo com dados de uma consulta a banco de dados, e pretendo colocar na frete dos dados dois links, um pra excluir e outro para editar.

De início crio os objetos LinkLabel com base do id da consulta, dessa forma já vai chamar uma função de exclusão ou edição com base no registro correspondente.

 

Até aí foi tudo certo, criei os links com sucesso, porém não consigo adicioná-los ao ListView, pois ao que aparenta só é aceito string no List.

 

Como faço pra adicionar esses links no ListView? Se tiverem alguma outra sugestão também tá valendo, como ao invés de link colocar alguma outra coisa ou usar algo diferente de um listView pra fazer isso.

 

Valeu Galera!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com ListView você não vai conseguir, ela é tipo uma combobox.

Em 90% destes casos é usado uma Grid comum, no Windows Forms é a DataGridView. Acho que é a que se encaixa melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza, Criei a DataGridView e populei ela com o resultado da minha consulta conforme o código abaixo.

O problema é que no lugar do link apareceu o seguinte; System.Windows.Forms.LinkLabel Text:Editar, ou seja, apenas o nome da classe.

 

Como faço pra aparecer o link mesmo?

Segue o código abaixo:

//função para listagem das informações das linhas na aba de linhas
		public void listaLinhas()
		{
			using (MySqlDataReader lista = banco.listaLinhas())
			{
				//preenche as colunas da tabela
				for (int i = 0; i < lista.FieldCount; i++)
					List_Linhas.Columns.Add(lista.GetName(i), lista.GetName(i));

				//Adiciona colunas de links de edição e exclusão
				List_Linhas.Columns.Add("Editar", "Editar");
				List_Linhas.Columns.Add("Excluir", "Excluir");
				
				//preenche as linhas da tabela
				while (lista.Read())
				{
					//cria itens auxiliares, um para popular a linha e outro para os links de edição e exclusão
					object[] item = new object[lista.FieldCount + 2];
					LinkLabel[] link = criaLinks(lista.GetValue(0).ToString());

					for (int i = 0; i < lista.FieldCount+2; i++)
					{
						//cria subitens para o item
						if(i < lista.FieldCount)
							item[i] = lista.GetValue(i).ToString();
						else
							item[i] = link[i - (lista.FieldCount)];
						
						//Ajusta o tamanho da coluna
						List_Linhas.AutoResizeColumn(i);

					}

					//adiciona à GridView
					List_Linhas.Rows.Add(item);
				}
			}

			//fecha conexão
			banco.CloseConnection();
		}

Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não precisa fazer tudo manual. No componente DataGridView você pode incluir as colunas normalmente e tem uma coluna especial, que se chama LinkColumn.

Dai quando você precisa popular a grid, você usa apenas uma linha:

List_Linhas.DataSource = banco.listaLinhas();

Para adicionar as colunas, clica com o botão direito na DataGridView e vai em Edit Columns.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza achei o LinkCOlumn aqui, mas como adiciono os links à essa coluna de acordo com o primeiro registro da consulta? no caso o id correspondente ao registro que quero editar ou excluir?

 

tentei adicionar um objeto DataGridViewLinkCell mas não adiantou nada, apenas retornou o nome da classe como sempre.

 

Pode ser até um botão também, já que isso vai chamar uma função para a exclusão ou edição do registro.

 

Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você usa link, você vai ter que escrever o event CellContentClick. Esse evento é lançado quando você clica no link.

Nesse evento você consegue saber qual a linha e qual a coluna que foi clicada. Tendo isso, você consegue pegar todos os dados de uma linha, e provavelmente o ID vai estar em uma das colunas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você usa link, você vai ter que escrever o event CellContentClick. Esse evento é lançado quando você clica no link.

Nesse evento você consegue saber qual a linha e qual a coluna que foi clicada. Tendo isso, você consegue pegar todos os dados de uma linha, e provavelmente o ID vai estar em uma das colunas.

Valeu Oenning,

 

Desculpa a dificuldade, mas pode me dar um exemplo? Preciso vincular esse exemplo a duas colunas, então faço um evento desse para cada uma? tem como eu vincular à coluna? achei na rede apenas exemplos vinculando esse evento à tabela toda.

 

valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou sem visual studio no momento. Esse evento ai eh um por grid.

Para saber qual link foi clicado voce precisa saber qual a coluna deles, imagine a seguinte grid:

 

ID | Nome do Aluno | Editar | Excluir

2 | Guilherme | Clique Aqui | Clique aqui

 

No evento ContentCellClick, voce pode fazer isso:

 

if (e.ColIndex == 2)
{
//Chama a tela de edicao
}
else if (e.ColIndex == 3)
{
//deleta o aluno
}

para pegar o ID do aluno faca:

 

string id = this.suaGruid[e.RowIndex,0].Value;

O codigo pode estar com erro pois estou sem referencias aqui, mas a ideia eh essa.

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.