Duda sobre ListView
Hola,
tengo un ListView donde cargo datos desde una base de datos. Tengo que conseguir que al hacer doble click sobre cualquiera de las filas (al hacer click en cualquiera de las casillas marco toda la fila automaticamente) poder recuperar los datos que en esta fila aparecen.
Os puede parecer una tonteria pero llevo unso dias peleandome con eso y no lo consigo.
Muchas gracias
tengo un ListView donde cargo datos desde una base de datos. Tengo que conseguir que al hacer doble click sobre cualquiera de las filas (al hacer click en cualquiera de las casillas marco toda la fila automaticamente) poder recuperar los datos que en esta fila aparecen.
Os puede parecer una tonteria pero llevo unso dias peleandome con eso y no lo consigo.
Muchas gracias
Aqui te pongo un codigo de como agregar editar y elimnar registros, segun selecciones un item en el listview, tendras que modificarlo segun lo necesites
Dim cod As String
Private Sub cmdAceptar_Click()
Unload Me
End Sub
Private Sub cmdAgregar_Click()
Dim rsEmpresa As New ADODB.Recordset
If txtDescEmpresa = "" Then
MsgBox "La razon social o nombre de la empresa no es correcto"
Exit Sub
End If
strSql = "select * from Empresa"
rsEmpresa.Open strSql, MDIForm1.DBporteria, adOpenStatic, adLockOptimistic
rsEmpresa.AddNew
rsEmpresa!CodEmpresa = txtCodEmpresa
rsEmpresa!DescEmpresa = txtDescEmpresa
rsEmpresa.Update
rsEmpresa.Close
Set rsEmpresa = Nothing
CargarLista
limpiar
End Sub
Private Sub cmdAnular_Click()
Dim rsTemp As New ADODB.Recordset
'cod = ListView.SelectedItem.Text 'aqui asigna el item que selecciona en el listview
If cod = "" Then
MsgBox "seleccione un registro de la lista"
Else
rsTemp.Open "Select * From Empresa Where CodEmpresa='" & cod & "'", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdText
If MsgBox("Esta seguro que desea eliminar este Registro", vbYesNo) = vbYes Then
If MsgBox("Esta realmente seguro????????", vbYesNo) = vbYes Then
rsTemp.Delete
CargarLista
rsTemp.Clone
Set rsTemp = Nothing
limpiar
End If
End If
End If
End Sub
Private Sub cmdEditar_Click()
Dim rsTemp As New ADODB.Recordset
If txtDescEmpresa = "" Then
MsgBox "La razon social o nombre de la empresa no es correcto"
Exit Sub
End If
rsTemp.Open "Select * From Empresa Where CodEmpresa='" & cod & "'", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdText
rsTemp!CodEmpresa = txtCodEmpresa
rsTemp!DescEmpresa = txtDescEmpresa
rsTemp.Update
CargarLista
limpiar
cmdAnular.Enabled = False
End Sub
Private Sub cmdNuevo_Click()
limpiar
txtCodEmpresa = UltimoCod()
txtDescEmpresa.SetFocus
txtCodEmpresa.Locked = True
cmdAnular.Enabled = False
cmdEditar.Enabled = False
cmdAgregar.Enabled = True
End Sub
Private Sub Form_Initialize()
cmdAnular.Enabled = False
cmdEditar.Enabled = False
End Sub
Private Sub Form_Load()
ListView.ColumnHeaders.Add , , "CodEmpresa", 1500
ListView.ColumnHeaders.Add , , "DescEmpresa", 2000
CargarLista
End Sub
Private Sub CargarLista()
Dim rsTemp As New ADODB.Recordset
Dim lstItem As ListItem
ListView.ListItems.Clear
rsTemp.Open "Empresa", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdTable
While Not rsTemp.EOF
Set lstItem = ListView.ListItems.Add(, , rsTemp!CodEmpresa & "")
lstItem.SubItems(1) = rsTemp!DescEmpresa
rsTemp.MoveNext
Wend
rsTemp.Close
Set rsTemp = Nothing
End Sub
Private Sub limpiar()
txtCodEmpresa = ""
txtDescEmpresa = ""
End Sub
Private Function UltimoCod() As String
Dim rsTemp As New ADODB.Recordset
rsTemp.Open "SELECT Max([Empresa].[CodEmpresa]) AS CodEmpresa FROM Empresa;", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdText
If IsNull(rsTemp!CodEmpresa) Then
UltimoCod = "0001"
Else
UltimoCod = FillStr(Val(rsTemp!CodEmpresa) + 1, 4)
End If
rsTemp.Close
Set rsTemp = Nothing
End Function
'funcion que lee el registro segun el codigo que selecciona en el lisview
Private Sub Leer()
Dim rsTemp As New ADODB.Recordset
cod = ListView.SelectedItem.Text 'aqui asigna el item que selecciona en el listview
rsTemp.Open "Select * From Empresa Where CodEmpresa='" & cod & "'", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdText
txtCodEmpresa = rsTemp!CodEmpresa
txtDescEmpresa = rsTemp!DescEmpresa
rsTemp.Close
Set rsTemp = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
frmPersonas.cargarcombo
End Sub
Private Sub ListView_Click()
Leer
cmdAnular.Enabled = True
cmdEditar.Enabled = True
cmdAgregar.Enabled = False
End Sub
Cualquier cosa que no le entiendas me avisas.
El botom agregar ovbialo porque llama a otra funcion
Saluds Adrian
Dim cod As String
Private Sub cmdAceptar_Click()
Unload Me
End Sub
Private Sub cmdAgregar_Click()
Dim rsEmpresa As New ADODB.Recordset
If txtDescEmpresa = "" Then
MsgBox "La razon social o nombre de la empresa no es correcto"
Exit Sub
End If
strSql = "select * from Empresa"
rsEmpresa.Open strSql, MDIForm1.DBporteria, adOpenStatic, adLockOptimistic
rsEmpresa.AddNew
rsEmpresa!CodEmpresa = txtCodEmpresa
rsEmpresa!DescEmpresa = txtDescEmpresa
rsEmpresa.Update
rsEmpresa.Close
Set rsEmpresa = Nothing
CargarLista
limpiar
End Sub
Private Sub cmdAnular_Click()
Dim rsTemp As New ADODB.Recordset
'cod = ListView.SelectedItem.Text 'aqui asigna el item que selecciona en el listview
If cod = "" Then
MsgBox "seleccione un registro de la lista"
Else
rsTemp.Open "Select * From Empresa Where CodEmpresa='" & cod & "'", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdText
If MsgBox("Esta seguro que desea eliminar este Registro", vbYesNo) = vbYes Then
If MsgBox("Esta realmente seguro????????", vbYesNo) = vbYes Then
rsTemp.Delete
CargarLista
rsTemp.Clone
Set rsTemp = Nothing
limpiar
End If
End If
End If
End Sub
Private Sub cmdEditar_Click()
Dim rsTemp As New ADODB.Recordset
If txtDescEmpresa = "" Then
MsgBox "La razon social o nombre de la empresa no es correcto"
Exit Sub
End If
rsTemp.Open "Select * From Empresa Where CodEmpresa='" & cod & "'", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdText
rsTemp!CodEmpresa = txtCodEmpresa
rsTemp!DescEmpresa = txtDescEmpresa
rsTemp.Update
CargarLista
limpiar
cmdAnular.Enabled = False
End Sub
Private Sub cmdNuevo_Click()
limpiar
txtCodEmpresa = UltimoCod()
txtDescEmpresa.SetFocus
txtCodEmpresa.Locked = True
cmdAnular.Enabled = False
cmdEditar.Enabled = False
cmdAgregar.Enabled = True
End Sub
Private Sub Form_Initialize()
cmdAnular.Enabled = False
cmdEditar.Enabled = False
End Sub
Private Sub Form_Load()
ListView.ColumnHeaders.Add , , "CodEmpresa", 1500
ListView.ColumnHeaders.Add , , "DescEmpresa", 2000
CargarLista
End Sub
Private Sub CargarLista()
Dim rsTemp As New ADODB.Recordset
Dim lstItem As ListItem
ListView.ListItems.Clear
rsTemp.Open "Empresa", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdTable
While Not rsTemp.EOF
Set lstItem = ListView.ListItems.Add(, , rsTemp!CodEmpresa & "")
lstItem.SubItems(1) = rsTemp!DescEmpresa
rsTemp.MoveNext
Wend
rsTemp.Close
Set rsTemp = Nothing
End Sub
Private Sub limpiar()
txtCodEmpresa = ""
txtDescEmpresa = ""
End Sub
Private Function UltimoCod() As String
Dim rsTemp As New ADODB.Recordset
rsTemp.Open "SELECT Max([Empresa].[CodEmpresa]) AS CodEmpresa FROM Empresa;", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdText
If IsNull(rsTemp!CodEmpresa) Then
UltimoCod = "0001"
Else
UltimoCod = FillStr(Val(rsTemp!CodEmpresa) + 1, 4)
End If
rsTemp.Close
Set rsTemp = Nothing
End Function
'funcion que lee el registro segun el codigo que selecciona en el lisview
Private Sub Leer()
Dim rsTemp As New ADODB.Recordset
cod = ListView.SelectedItem.Text 'aqui asigna el item que selecciona en el listview
rsTemp.Open "Select * From Empresa Where CodEmpresa='" & cod & "'", MDIForm1.DBporteria, adOpenKeyset, adLockOptimistic, adCmdText
txtCodEmpresa = rsTemp!CodEmpresa
txtDescEmpresa = rsTemp!DescEmpresa
rsTemp.Close
Set rsTemp = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
frmPersonas.cargarcombo
End Sub
Private Sub ListView_Click()
Leer
cmdAnular.Enabled = True
cmdEditar.Enabled = True
cmdAgregar.Enabled = False
End Sub
Cualquier cosa que no le entiendas me avisas.
El botom agregar ovbialo porque llama a otra funcion
Saluds Adrian
