Ir para conteúdo

POWERED BY:

Arquivado

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

electric

Listview limpar selecção

Recommended Posts

Boas malta eu uso o VB.NET 2003 e como base de dados tenho o accesseu ainda n aprendi isto no liceu mas como gosto de tr a frente andei a procura a 2 dias e fui me desenrascando apesar do codigo tar a ser adaptado e por vezzes pareça patetico XDo meu prob é o seguinte:tenho uma listview com o nome de = LtvListaruma base de dados com o nome = Arquivador.mdbe tenho 1 button com o nome = BtnApagaragora o que queria era que na listview eu seleciona-se uma linha e depois de tar selecionada ao carregar no btnapagar a linha fosse apagada da DB se alguem me puder ajudar inda hj agradecia :P[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua dúvida é em como listar na ListView? Ou é em como apagar o registro da tabela de acordo com a seleção?GraymalkinPS: Movido para .NET.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim é isso mesmo eu tenho la listado (mas ja agora diz la o codigo pra ver se ta dacordo com o meu)agora o k eu queria era o codigo para apagar a linha selecionada da base de dados...PS: a linha da listview é constituida por 5 campos da tabela da base de dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

Supondo que fosse uma tabela somente com dois campos (Código e Nome) eu faria assim para incluí-los na ListView:

 

Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Tabela;", cn)		Dim dt As New DataTable		da.Fill(dt)		For Each registro As DataRow In dt.Rows			Dim obj As New ListViewItem			obj.Text = registro("Código") & " - " & registro("Nome")			obj.Tag = registro			LtvListar.Items.Add(obj)		Next registro

Onde "cn" é um objeto OleDbConnection.

E para remover o selecionado eu faria:

 

If Not LtvListar.SelectedItems Is Nothing Then			Dim código As Integer = LtvListar.SelectedItems(0).Tag("Código")			Dim cmd As New OleDb.OleDbCommand(String.Format("DELETE FROM Tabela WHERE Código={0}", código), cn)			Try				cmd.ExecuteNonQuery()			Catch ex As OleDb.OleDbException				MessageBox.Show("Ops! Ocorreu um erro: " & ex.Message)			End Try		End If

Note que a remoção do selecionado *depende* de como o objeto foi inserido na ListView. No caso, eu guardo uma referência para a linha da tabela (DataRow) na propriedade Tag do item inserido. Por isso que na hora de remover eu tenho como obter o campo código do respectivo item.

 

Certo? ;)

 

Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas tive a ver o teu codigo para colocar os dados na listview e n deu con nd :s

eu uso o seguinte codigo:

Dim conexao As String		conexao = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= D:\Documents and Settings\electric\Os meus documentos\Visual Studio Projects\Arquivador\bin\Arquivador.mdb"		cn = New OleDbConnection(conexao)		daPedidos = New OleDbDataAdapter("Select * from TabJogos", cn)		Try			ds = New DataSet			daPedidos.Fill(ds, "TabJogos")		Catch ex As Exception			MsgBox(ex.Message)		End Try		LtvListar.Items.Clear()		Dim i As Integer		For i = 0 To ds.Tables("TabJogos").Rows.Count - 1			LtvListar.Items.Add(ds.Tables("TabJogos").Rows(i)("Lugar"))			LtvListar.Items(i).SubItems.Add(ds.Tables("TabJogos").Rows(i)("Nome"))			LtvListar.Items(i).SubItems.Add(ds.Tables("TabJogos").Rows(i)("Genero"))			LtvListar.Items(i).SubItems.Add(ds.Tables("TabJogos").Rows(i)("Data"))			LtvListar.Items(i).SubItems.Add(ds.Tables("TabJogos").Rows(i)("Formato"))		Next

não me perguntes como ai cheguei pk foi atravez de 1 tutorial e tive nisso uma tarde inteira :s

 

na parte do apagar

 

depois de trocar algumas coisas dame um break nesta linha:

Dim código As Integer = LtvListar.SelectedItems(0).Tag("código")
no ultimo "código" tentei alterar para um campo da minha base de dados mas não da na mesma :S

 

PS: eu coloquei o codigo para apagar dentro do meu BtnApagar penso que esteja certo...

 

[]'s

 

Men descubri como por o codigo de preenchimento a funcionar so k se usar esse codigo mais facil sera usar uma listbox pelo menos no meu caso, só que eu quero usalo numa listview porque com a listview conseguimos dividir a "folha" em varias colunas e assim meter cada coisa na sua coluna...

não havera maneira de aplicar o teu codigo que é muito mais basico a uma listview mas que esta dividida em colunas ?

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso, o que faltou no seu código foi fazer a referência à DataRow na propriedade Tag do item, mas você nem precisa, já que está organizando os elementos da ListView em colunas. Qual é o campo da ListView que identifica aquele registro como único? Como o código no meu caso (seria o campo "Lugar"?).Bastaria você pegar o valor desta coluna e utilizar onde eu utilizei o "código" naquela instrução SQL.Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok decidi voltar ao inicio ... peguei no teu codigo e aplikei...

Listbox= LtvListar

Base de dados= Arquivadr.mdb

base de dados com 5 campos = Lugar, nome, genero, data, formato nome da tabela = TabJogos

listbox dividida em 5 colunas

 

Dim conexao As String		conexao = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= D:\Documents and Settings\electric\Os meus documentos\Visual Studio Projects\Arquivador\bin\Arquivador.mdb"		cn = New OleDbConnection(conexao)		Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM TabJogos;", cn)		Dim dt As New DataTable		da.Fill(dt)		For Each registro As DataRow In dt.Rows			Dim obj As New ListViewItem			obj.Text = registro("Lugar")			obj.Tag = registro			LtvListar.Items.Add(obj)		Next registro		PreencheGenero()		PreencheFormato()

com isto a listview é preenchida mas so 1 coluna e se meter como tinha preenche + mas na mesma coluna :S

tb n havera maneira de ter sempre a base de dados pronta... tipo se eu mudar a BD do lugar isto ja n funca tas a perceber :s

 

Sry tar a ser chato mas é que ja não tou a ver bem isto XD e como inda n dei isto na school...

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

com isto a listview é preenchida mas so 1 coluna e se meter como tinha preenche + mas na mesma coluna :S

Mas, *nada* te impede de preencher as outras colunas como você já estava fazendo.

tb n havera maneira de ter sempre a base de dados pronta... tipo se eu mudar a BD do lugar isto ja n funca tas a perceber :s

Claro, e isso é o normal, oras. Se você abrir um documento no Word ele fica lá naquela lista de últimos arquivos abertos, mas se você mudar o arquivo de lugar depois disso, você não vai conseguir abrir ele por aquela lista. O banco de dados vai ter que estar sempre junto com o programa. O que você pode fazer no caso da pasta do arquivo é pegar o caminho da pasta do executável (através de Application.StartupPath) e juntar com o nome do arquivo do banco de dados (desta maneira seu programa vai funcionar em qualquer pasta, desde que o BD esteja na mesma que o executável).Abraços,Graymalkin

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok voltei a colocar o codigo de preenchimento como tinha mas mesmo assim n ta a dar pk da aquel erro na linha k te disse :S desculpa la mas n tou aperceber como resolver :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok voltei a colocar o codigo de preenchimento como tinha mas mesmo assim n ta a dar pk da aquel erro na linha k te disse :S desculpa la mas n tou aperceber como resolver :s

Mas, cara, você não precisará mais daquela linha... Você só precisa dela se *não* possuir a informação que identifica um registro como único isoladamente (o que você *tem*, já que colocou ela em uma *coluna*).Qual é a idéia no caso? Cada registro tem uma identificação única, certo? Um código, ok? Quando você lista na ListView você coloca essa identificação nela, certo? Então, quando usuário selecionar uma linha qualquer, você vai pegar o código que está nesta linha selecionada e mandar apagar na tabela (com a SQL eu demonstrei). Existem zilhões de maneiras diferentes de se fazer todo este processo, e a mudança no modo preencher a ListView implica na mudança de como obter a identificação do registro. No meu caso eu guardava uma referência a DataRow, no seu caso você não fazia isso, mas guardava a identificação do registro em uma coluna. Ou seja, dá no mesmo. A diferença fica apenas em como obter esta identificação (que é *justamente* a linha que dá erro no seu código, já que você deveria fazer de uma outra maneira).Sacou? ;)Graymalkin

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.