none
Copiar ciertos items de un Listview a Otro en un Form diferente RRS feed

  • Pregunta

  • Hola, quisiera saber como podria copiar ciertos items de un listview a otro listview en un form diferente, mediante un boton y sin tener ningun item seleccionado, o sea que se copien todas las filas del primer listview al final del segundo listview, encontre un codigo, pero no se si me sirva, lo adjunto por si alguien tiene una idea

     

    publicclass FormListViewCopy1 : Form { private ListView ListView1 = new ListView(); public FormListViewCopy1() { this.ListView1.Dock = DockStyle.Fill; for (int i = 0; i < 10; i++) this.ListView1.Items.Add(string.Format("Item{0}", i)); this.Controls.Add(this.ListView1); Button buttonEdit = new Button(); buttonEdit.Text = "Editar"; buttonEdit.Click += new EventHandler(buttonEdit_Click); buttonEdit.Dock = DockStyle.Bottom; this.Controls.Add(buttonEdit); } privatevoid buttonEdit_Click(object sender, EventArgs e) { using (FormListViewCopy2 form2 = new FormListViewCopy2()) { // copia los items del primer listview..

    foreach (ListViewItem item inthis.ListView1.Items) form2.ListView2.Items.Add((ListViewItem)item.Clone()); form2.ShowDialog(); } } } publicclass FormListViewCopy2 : Form { public ListView ListView2 = new ListView(); public FormListViewCopy2() { this.ListView2.Dock = DockStyle.Fill; this.Controls.Add(this.ListView2); } }

    public class FormListViewCopy1 : Form
     {
      private ListView ListView1 = new ListView();
    
      public FormListViewCopy1()
      {
       this.ListView1.Dock = DockStyle.Fill;
    
       for (int i = 0; i < 10; i++)
        this.ListView1.Items.Add(string.Format("Item{0}", i));
    
    
       this.Controls.Add(this.ListView1);
    
       Button buttonEdit = new Button();
       buttonEdit.Text = "Editar";
       buttonEdit.Click += new EventHandler(buttonEdit_Click);
       buttonEdit.Dock = DockStyle.Bottom;
       this.Controls.Add(buttonEdit);
      }
    
      private void buttonEdit_Click(object sender, EventArgs e)
      {
       using (FormListViewCopy2 form2 = new FormListViewCopy2())
       {
        // copia los items en el segundo form...
        foreach (ListViewItem item in this.ListView1.Items)
         form2.ListView2.Items.Add((ListViewItem)item.Clone());
        form2.ShowDialog();
       }
      }
     }
    
     public class FormListViewCopy2 : Form
     {
      public ListView ListView2 = new ListView();
    
      public FormListViewCopy2()
      {
       this.ListView2.Dock = DockStyle.Fill;
       this.Controls.Add(this.ListView2);
      }
     }
    martes, 3 de abril de 2012 21:37

Todas las respuestas

  • encontre un codigo, pero no se si me sirva

    ¿Por qué no lo probó?  Pero bueno, en todo caso le recuerdo que la clase ListViewItem de Windows Forms es clonable.  Por lo tanto, en principio sería tan fácil como:

    //Desde form1, digamos de un botón:
    protected void Button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        foreach (ListViewItem item In listView1.Items)
        {
            f2.listView1.Items.Add(item.Clone() as ListViewItem);
        }
        f2.Show();
    }
    

    Pruébelo y cualquier pregunta la coloca aquí.


    Jose R. MCP

    miércoles, 4 de abril de 2012 5:59
  • Entonces cual seria el codigo correcto,  por que,  estoy usando el form 9 y 10 cada uno tiene un listview parecido aunque tu metodo es el mas facil me gustaria que me lo dieras con todo el codigo correcto, por que al de arriba le falta un next y algunas expresiones estan mal declaradas, uso visual studio 2010
    lunes, 9 de abril de 2012 4:24
  • ¿A qué se refiere con "el código correcto"?  ¿Tiene algún error el código que le di?  ¿Cuando lo prueba, arroja alguna excepción?

    Jose R. MCP

    lunes, 9 de abril de 2012 4:33
  • si, estoy programando en visual basic .net y creo que el codigo que esta arriba es para c# o me equivoco??
    lunes, 9 de abril de 2012 4:38
  • Así es, todo el código en esta conversación es C#.  Developerfusion.com tiene un traductor en línea que le recomiendo usar ya que yo no programo en VB.net.  C# es un lenguaje mucho más simple y libre de palabras clave que no tengo que memorizar. :D

    Jose R. MCP

    lunes, 9 de abril de 2012 4:40
  • Si, ya lo probe pero igual no funciona al traducir :( pero te agradezco tu ayuda, si me ayudases a implementarlo en .net te lo agradeceria ;)
    lunes, 9 de abril de 2012 4:57
  • Lástima que no le funcione.  No le puedo ayudar si su proyecto es Visual Basic puesto que no programo en Visual Basic desde Visual Basic 6.  Todo mi .Net es C#.

    Jose R. MCP

    lunes, 9 de abril de 2012 4:58
  • amigo, logre migrar el codigo, ahora pido un favor especial hacia ti.. Esta copiando cada item como debe, pero lo esta haciendo 2 veces... tu sabes cual puede ser el error?? te adjunto el codigo

    Dim f2
            f2 = New Form10
            If ListView1.Items.Count > 0 Then

                For i = ListView1.Items.Count - 1 To 0 Step -1
                    Dim litem1 As ListViewItem
                    For Each litem1 In ListView1.Items
                        Form10.ListViewtotal.Items.Add(litem1.Clone)

                    Next
                Next i
            End If

    lunes, 9 de abril de 2012 20:19
  • Veo dos ciclos FOR, y el único propósito del exterior es repetir el interior una cantidad de veces que es igual a la cantidad de items in ListView1, cosa que probablemente no tiene sentido "físico", jeje.  Elimine el ciclo FOR exterior.

    Jose R. MCP

    lunes, 9 de abril de 2012 23:43