SELECIONAR LINHA LISTVIEW PELO INDEX
Bom Dia!!! Alguém poderia me ajudar em como fazer para selecionar uma linha do listview através do index???Irei passa por exemplo o Ãndice tipo 3 - ai seleciona a linha 3 do listview.
CCRISANEVB segue um exemplo meu, quando eu clico no meu listview e seleciono o registro desejado
Private Sub lvFuncionarios_Click()
If lvFuncionarios.ListItems.Count = 0 Then Exit Sub [ô]Caso alguém clique no listview em branco
strSQL = [Ô]Select * from Funcionarios where CodFunc=[ô][Ô] & lvFuncionarios.SelectedItem & [Ô][ô][Ô] [ô]Aqui pega o registro no listview
Set rsFuncionarios = New ADODB.Recordset
rsFuncionarios.Open strSQL, Db, adOpenKeyset, adLockOptimistic
Consulta = True
ExibeDados
[ô]Preenche o grid do log
Call Log(Me, txtCodigo.Text)
TravarCampos Me, True
AbilitaTabulacao
SSTab1.Tab = 1
CmdAlterar.Enabled = True
CmdExcluir.Enabled = True
End Sub
Private Sub lvFuncionarios_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) [ô]Isso aqui tem que estar no evento do seu form
With lvFuncionarios
If (ColumnHeader.Index - 1) = .SortKey Then
.SortOrder = (.SortOrder + 1) Mod 2
Else
.Sorted = False
.SortOrder = 0
.SortKey = ColumnHeader.Index - 1
.Sorted = True
End If
End With
End Sub
Private Sub lvFuncionarios_Click()
If lvFuncionarios.ListItems.Count = 0 Then Exit Sub [ô]Caso alguém clique no listview em branco
strSQL = [Ô]Select * from Funcionarios where CodFunc=[ô][Ô] & lvFuncionarios.SelectedItem & [Ô][ô][Ô] [ô]Aqui pega o registro no listview
Set rsFuncionarios = New ADODB.Recordset
rsFuncionarios.Open strSQL, Db, adOpenKeyset, adLockOptimistic
Consulta = True
ExibeDados
[ô]Preenche o grid do log
Call Log(Me, txtCodigo.Text)
TravarCampos Me, True
AbilitaTabulacao
SSTab1.Tab = 1
CmdAlterar.Enabled = True
CmdExcluir.Enabled = True
End Sub
Private Sub lvFuncionarios_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) [ô]Isso aqui tem que estar no evento do seu form
With lvFuncionarios
If (ColumnHeader.Index - 1) = .SortKey Then
.SortOrder = (.SortOrder + 1) Mod 2
Else
.Sorted = False
.SortOrder = 0
.SortKey = ColumnHeader.Index - 1
.Sorted = True
End If
End With
End Sub
Certo Alvaro obrigado pela ajuda porém ñ é bem isto o meu problema, o problema está em como faço por exemplo o index que selecionei no listview é igual a 8, salvo o index em uma variável proém como fazer para selecionar no listiview este index sem que ocorrá erro.Exemplo: Fiz assim: Set LvwCadastro.SelectedItem.index = cod
E qual foi o erro que ele deu quando você deu esse comando?
Invalid use of property
o correto é:
ListView1.ListItems(3).Selected = True
Cara eu fiz este exemplo aqui, acho que pode ser o que você quer.
Neste exemplo tem uma Lisview e um TextBox, cada qual com seu nome padrão, OK?
[txt-color=#0000f0]Public[/txt-color] linha [txt-color=#0000f0]As Integer[/txt-color]
[txt-color=#0000f0]Private Sub[/txt-color] Form_Load()
[txt-color=#0000f0]Dim[/txt-color] Item [txt-color=#0000f0]As[/txt-color] ListItem
[txt-color=#0000f0]With[/txt-color] ListView1
[txt-color=#0000f0] For [/txt-color]j = 1 [txt-color=#0000f0]To[/txt-color] 15
[txt-color=#0000f0]Set[/txt-color] Item = .ListItems.Add(, , j)
Item.ListSubItems.Add , , j
[txt-color=#0000f0] Next
End With[/txt-color]
ListView1.ListItems(1).Selected = [txt-color=#0000f0]False[/txt-color] [txt-color=#007100][ô]Deseleciona o index 1[/txt-color]
Text1.TabIndex = 0 [txt-color=#007100][ô]Põe o foco na caixa de textos[/txt-color]
[txt-color=#0000f0]End Sub[/txt-color]
[txt-color=#0000f0]Private Sub [/txt-color]Text1_KeyPress(KeyAscii As Integer)
[txt-color=#0000f0]If[/txt-color] KeyAscii = 13 [txt-color=#0000f0]Then[/txt-color]
linha = Val(Text1.Text)[txt-color=#007100] [ô] Guarda o index que você quer[/txt-color]
[txt-color=#0000f0] With [/txt-color]ListView1
[txt-color=#0000f0] For [/txt-color]i = 1 [txt-color=#0000f0]To[/txt-color] ListView1.ListItems.Count[txt-color=#007100] [ô]faz um loop em todos os itens da ListView[/txt-color]
[txt-color=#0000f0] If [/txt-color]linha = i [txt-color=#0000f0]Then[/txt-color][txt-color=#007100] [ô]Se o valor do da caixa de textos for iqual ao valor do index[/txt-color]
[txt-color=#0000f0] For [/txt-color]j = 1 [txt-color=#0000f0]To[/txt-color] ListView1.ListItems.Count [txt-color=#007100][ô]Verifica se já tem um index selecionado[/txt-color]
[txt-color=#0000f0]If[/txt-color] ListView1.ListItems(j).Selected = [txt-color=#0000f0]True Then [/txt-color]ListView1.ListItems(j).Selected = [txt-color=#0000f0]False[/txt-color] [txt-color=#007100][ô]se tiver, deselecione[/txt-color]
[txt-color=#0000f0]Next[/txt-color]
.FullRowSelect = [txt-color=#0000f0]True[/txt-color][txt-color=#007100] [ô]Habilita a seleção da linha toda[/txt-color]
.ListItems(linha).Selected = [txt-color=#0000f0]True[/txt-color] [txt-color=#007100][ô]seleciona a linha toda[/txt-color]
.SetFocus[txt-color=#007100] [ô]Mantém o foco no ListView[/txt-color]
Text1.Text = [Ô][Ô] [txt-color=#007100][ô]Limpa caixa de textos[/txt-color]
[txt-color=#007100][ô]Text1.SetFocus[/txt-color]
[txt-color=#0000f0] Exit Sub [/txt-color][txt-color=#007100][ô]Sai da Sub quando a condição for satisfeita[/txt-color]
[txt-color=#0000f0]End If
Next
End With
End If
End Sub[/txt-color]
Note que eu comentei a linha que faz foco na caixa de textos.
O motivo é que se a caixa de textos receber foco, a Listview não vai exibir a cor azul que diz qual linha está selecionada.
valeu
Neste exemplo tem uma Lisview e um TextBox, cada qual com seu nome padrão, OK?
[txt-color=#0000f0]Public[/txt-color] linha [txt-color=#0000f0]As Integer[/txt-color]
[txt-color=#0000f0]Private Sub[/txt-color] Form_Load()
[txt-color=#0000f0]Dim[/txt-color] Item [txt-color=#0000f0]As[/txt-color] ListItem
[txt-color=#0000f0]With[/txt-color] ListView1
[txt-color=#0000f0] For [/txt-color]j = 1 [txt-color=#0000f0]To[/txt-color] 15
[txt-color=#0000f0]Set[/txt-color] Item = .ListItems.Add(, , j)
Item.ListSubItems.Add , , j
[txt-color=#0000f0] Next
End With[/txt-color]
ListView1.ListItems(1).Selected = [txt-color=#0000f0]False[/txt-color] [txt-color=#007100][ô]Deseleciona o index 1[/txt-color]
Text1.TabIndex = 0 [txt-color=#007100][ô]Põe o foco na caixa de textos[/txt-color]
[txt-color=#0000f0]End Sub[/txt-color]
[txt-color=#0000f0]Private Sub [/txt-color]Text1_KeyPress(KeyAscii As Integer)
[txt-color=#0000f0]If[/txt-color] KeyAscii = 13 [txt-color=#0000f0]Then[/txt-color]
linha = Val(Text1.Text)[txt-color=#007100] [ô] Guarda o index que você quer[/txt-color]
[txt-color=#0000f0] With [/txt-color]ListView1
[txt-color=#0000f0] For [/txt-color]i = 1 [txt-color=#0000f0]To[/txt-color] ListView1.ListItems.Count[txt-color=#007100] [ô]faz um loop em todos os itens da ListView[/txt-color]
[txt-color=#0000f0] If [/txt-color]linha = i [txt-color=#0000f0]Then[/txt-color][txt-color=#007100] [ô]Se o valor do da caixa de textos for iqual ao valor do index[/txt-color]
[txt-color=#0000f0] For [/txt-color]j = 1 [txt-color=#0000f0]To[/txt-color] ListView1.ListItems.Count [txt-color=#007100][ô]Verifica se já tem um index selecionado[/txt-color]
[txt-color=#0000f0]If[/txt-color] ListView1.ListItems(j).Selected = [txt-color=#0000f0]True Then [/txt-color]ListView1.ListItems(j).Selected = [txt-color=#0000f0]False[/txt-color] [txt-color=#007100][ô]se tiver, deselecione[/txt-color]
[txt-color=#0000f0]Next[/txt-color]
.FullRowSelect = [txt-color=#0000f0]True[/txt-color][txt-color=#007100] [ô]Habilita a seleção da linha toda[/txt-color]
.ListItems(linha).Selected = [txt-color=#0000f0]True[/txt-color] [txt-color=#007100][ô]seleciona a linha toda[/txt-color]
.SetFocus[txt-color=#007100] [ô]Mantém o foco no ListView[/txt-color]
Text1.Text = [Ô][Ô] [txt-color=#007100][ô]Limpa caixa de textos[/txt-color]
[txt-color=#007100][ô]Text1.SetFocus[/txt-color]
[txt-color=#0000f0] Exit Sub [/txt-color][txt-color=#007100][ô]Sai da Sub quando a condição for satisfeita[/txt-color]
[txt-color=#0000f0]End If
Next
End With
End If
End Sub[/txt-color]
Note que eu comentei a linha que faz foco na caixa de textos.
O motivo é que se a caixa de textos receber foco, a Listview não vai exibir a cor azul que diz qual linha está selecionada.
valeu
Tópico encerrado , respostas não são mais permitidas