DRAG & DROP en el mismo formulario
Tengo un problema al mandar filas completas de un listview a otro, estoy haciendo un drag-drop, pero al arrastrar la(s) filas del listview1 al listview2, solo me copia o me manda la los datos de la primera columna, y lo que yo necesito es poder copiar la fila completa, espero y puedas ayudarme, te dejo el código que tengo. Espero y me puedas ayudar, gracias.
Private Sub Form_Load()
Dim UnItem As ListItem
Dim lvItem As ListItem
Dim i As Integer
With ListView1
.MultiSelect = True
.View = lvwReport
.GridLines = True
'Para poder arrastrar los items
.OLEDragMode = ccOLEDragAutomatic
For i = 1 To 25
Set UnItem = .ListItems.Add(, , "Elemento " & i)
End With
With ListView2
.MultiSelect = True
.View = lvwReport
.GridLines = True
'Para habilitar el Drop sobre este Listview
.OLEDropMode = ccOLEDropManual
End WithListView1.GridLines = True
ListView1.ColumnHeaders.Add , , "Referencia_Rittal", 1600
ListView1.ColumnHeaders.Add , , "Tipo_de_barra", 1600
ListView1. ColumnHeaders. Add,, "Sistema", 1800
ListView1. ColumnHeaders. Add,, "Componente", 1800
ListView1. ColumnHeaders. Add,, "Especificaciones", 1600
ListView1. ColumnHeaders. Add,, "Cantidad", 1600
ListView1. ColumnHeaders. Add,, "Precio", 1600
ListView1. ColumnHeaders. Add,, "Catalogo-Pagina", 1800
ListView2.GridLines = True
ListView2.ColumnHeaders.Add , , "Referencia_Rittal", 1600
ListView2.ColumnHeaders.Add , , "Tipo_de_barra", 1600
ListView2. ColumnHeaders. Add,, "Sistema", 1800
ListView2. ColumnHeaders. Add,, "Componente", 1800
ListView2. ColumnHeaders. Add,, "Especificaciones", 1600
ListView2. ColumnHeaders. Add,, "Cantidad", 1600
ListView2. ColumnHeaders. Add,, "Precio", 1600
ListView2. ColumnHeaders. Add,, "Catalogo-Pagina", 1800
End Sub
Private Sub ListView1_OLESetData(Data As MSComctlLib.DataObject, DataFormat As Integer)
Dim i As Integer, sStr As String
'Recorremos todos leos items del ListView y chequeamos cual está seleccionado
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Selected Then
'Creamos una cadena con los Items que luego será separada _
con la función Split
If Len(sStr) <> 0 Then
sStr = sStr & vbCrLf
End If
sStr = sStr & ListView1.ListItems(i).Text
End If
Next
'Establece los datos
Data.SetData sStr
DataFormat = vbCFText
End Sub
Private Sub ListView2_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Dim arrayItems() As String, ListaItems As String, objItem As ListItem
Dim i As Integer
'Si el dato es de tipo texto
If Data.GetFormat(vbCFText) Then
'Consulta en en el evento OleSetdata
ListaItems = Data.GetData(vbCFText)
'Recupera los datos y los separa
arrayItems = Split(ListaItems, vbCrLf, -1, vbBinaryCompare)
'Recorre el array y Los agrega al Listview2
For i = LBound(arrayItems) To UBound(arrayItems)
Set objItem = ListView2.ListItems.Add(, , arrayItems(i))
Next
'Refrescamos
ListView2.Refresh
End If
End Sub
Private Sub Form_Load()
Dim UnItem As ListItem
Dim lvItem As ListItem
Dim i As Integer
With ListView1
.MultiSelect = True
.View = lvwReport
.GridLines = True
'Para poder arrastrar los items
.OLEDragMode = ccOLEDragAutomatic
For i = 1 To 25
Set UnItem = .ListItems.Add(, , "Elemento " & i)
End With
With ListView2
.MultiSelect = True
.View = lvwReport
.GridLines = True
'Para habilitar el Drop sobre este Listview
.OLEDropMode = ccOLEDropManual
End WithListView1.GridLines = True
ListView1.ColumnHeaders.Add , , "Referencia_Rittal", 1600
ListView1.ColumnHeaders.Add , , "Tipo_de_barra", 1600
ListView1. ColumnHeaders. Add,, "Sistema", 1800
ListView1. ColumnHeaders. Add,, "Componente", 1800
ListView1. ColumnHeaders. Add,, "Especificaciones", 1600
ListView1. ColumnHeaders. Add,, "Cantidad", 1600
ListView1. ColumnHeaders. Add,, "Precio", 1600
ListView1. ColumnHeaders. Add,, "Catalogo-Pagina", 1800
ListView2.GridLines = True
ListView2.ColumnHeaders.Add , , "Referencia_Rittal", 1600
ListView2.ColumnHeaders.Add , , "Tipo_de_barra", 1600
ListView2. ColumnHeaders. Add,, "Sistema", 1800
ListView2. ColumnHeaders. Add,, "Componente", 1800
ListView2. ColumnHeaders. Add,, "Especificaciones", 1600
ListView2. ColumnHeaders. Add,, "Cantidad", 1600
ListView2. ColumnHeaders. Add,, "Precio", 1600
ListView2. ColumnHeaders. Add,, "Catalogo-Pagina", 1800
End Sub
Private Sub ListView1_OLESetData(Data As MSComctlLib.DataObject, DataFormat As Integer)
Dim i As Integer, sStr As String
'Recorremos todos leos items del ListView y chequeamos cual está seleccionado
For i = 1 To ListView1.ListItems.Count
If ListView1.ListItems(i).Selected Then
'Creamos una cadena con los Items que luego será separada _
con la función Split
If Len(sStr) <> 0 Then
sStr = sStr & vbCrLf
End If
sStr = sStr & ListView1.ListItems(i).Text
End If
Next
'Establece los datos
Data.SetData sStr
DataFormat = vbCFText
End Sub
Private Sub ListView2_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Dim arrayItems() As String, ListaItems As String, objItem As ListItem
Dim i As Integer
'Si el dato es de tipo texto
If Data.GetFormat(vbCFText) Then
'Consulta en en el evento OleSetdata
ListaItems = Data.GetData(vbCFText)
'Recupera los datos y los separa
arrayItems = Split(ListaItems, vbCrLf, -1, vbBinaryCompare)
'Recorre el array y Los agrega al Listview2
For i = LBound(arrayItems) To UBound(arrayItems)
Set objItem = ListView2.ListItems.Add(, , arrayItems(i))
Next
'Refrescamos
ListView2.Refresh
End If
End Sub
1 respuesta
Respuesta de Eduardo Saligari
1