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
1

1 Respuesta

97.675 pts. Ingeniero de Sistema en Computación
Yo no lo haría así como lo haces.
En ves de meterlo en un Array pasa directamente los valores de uno hacia el otro recorriendolos.
ListView. Items. Item(i).Text
ListView. Items. Item(i). SubItems(1).Text
ListView. Items. Item(i). SubItems(1).Text
ListView. Items. Item(i). SubItems(2).Text
...
ListView. Items. Item(i). SubItems(10).Text
SubItem representa a los Sub Elementos del ListView.
OK muchas gracias, otra cosa, me marca un error en la linea ListView.Items.Item(i).Text, me dice que no se encontró el método o el miembro de datos, y otro cosa ese código que mencionas, ¿solo es para el listview2 o también para el listview1?, ¿Y la parte de programación que tendría que eliminar seria lo del array en el listview 2?, perdón que haga tanta pregunta, pero soy nuevo en esto, espero y no te incomode, gracias.
Primero yo te puse ListView, pero tu debes cambiarlo por el nombre de tu control, en este caso el que tiene los datos.
Segundo, sacas lo del Array y harías algo así:
Dim item As ListViewItem
item = New ListViewItem()
item = New ListViewItem(ListView1. FocusedItem.Text) item. SubItems. Add(ListView1. FocusedItem. SubItems(1).Text)
Item. SubItems. Add(ListView1. FocusedItem. SubItems(2).Text)
Item. SubItems. Add(ListView1. FocusedItem. SubItems(3).Text)
Item. SubItems. Add(ListView1. FocusedItem. SubItems(4).Text)
Item. SubItems. Add(ListView1. FocusedItem. SubItems(5).Text)
Item. SubItems. Add(ListView1. FocusedItem. SubItems(6).Text)
ListView2. Items. Add(item)
Dim item As ListViewItem , me marca que no esta definido, supongo q lo tengo q definir en el form_load, como lo defino? y es en el form_load o en el listview?
Todo lo que te puse lo pones dentro de Private Sub ListView2_OLEDragDrop

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas