2010-02-26 2 views
3

Comment puis-je copier des éléments sélectionnés d'une liste à l'autre en cliquant sur le bouton .. ?? sans aucune redondance puis-je donner l'option pour la sélection multiple d'articles et de les ajouter dans un volume sans utiliser le ctrl du clavier ?? ce qui rend l'utilisateur convivial peut-on utiliser des cases à cocher et comment vont-ils travailler? Le code ci-dessous permet de copier les entrées pour la sélection unique de l'élément et aussi donne les entrées en double sur la sélection de ce point à nouveau ... s'il vous plaît me aider à éliminer les défauts ...Comment copier les éléments sélectionnés d'une liste à l'autre sur un clic de bouton dans C# net?

private void btn_Add_Click(object sender, EventArgs e)   
{   
    CopySelectedItems(source_name, target_name);  
} 

private void CopySelectedItems(ListView source, ListView target) 
{   
    foreach (ListViewItem item in source.SelectedItems) { 
     target.Items.Add((ListViewItem)item.Clone()); 
    } 
} 

Répondre

5

Il existe plusieurs façons différentes.

Si vous voulez copie les articles de a à b:

private static void CopySelectedItems(ListView source, ListView target) 
{ 
    foreach (ListViewItem item in source.SelectedItems) 
    { 
     target.Items.Add((ListViewItem)item.Clone()); 
    } 
} 

Si vous voulez déplacer les éléments de a à b:

private static void MoveSelectedItems(ListView source, ListView target) 
{  
    while (source.SelectedItems.Count > 0) 
    { 
     ListViewItem temp = source.SelectedItems[0]; 
     source.Items.Remove(temp); 
     target.Items.Add(temp); 
    }    
} 

Mise à jour
Vous indiquez que vous souhaitez conserver l'ordre dans lequel les éléments se trouvent dans la source ListView contrôle. Je suppose qu'ils apparaissent dans un ordre trié? Si oui, vous pouvez créer une fonction qui utilise la même règle de tri pour savoir où insérer un élément dans la cible ListView (mon exemple utilise la valeur dans la deuxième colonne:

private static void CopySelectedItems(ListView source, ListView target) 
{ 
    foreach (ListViewItem item in source.SelectedItems) 
    { 
     ListViewItem clone = (ListViewItem)item.Clone(); 
     target.Items.Insert(GetInsertPosition(clone, target), clone); ; 
    } 
} 

private static int GetInsertPosition(ListViewItem item, ListView target) 
{ 
    const int compareColumn = 1; 
    foreach (ListViewItem targetItem in target.Items) 
    { 
     if (targetItem.SubItems[compareColumn].Text.CompareTo(item.SubItems[compareColumn].Text) > 0) 
     { 
      return targetItem.Index; 
     } 
    } 
    return target.Items.Count; 
} 

Il est difficile de donner un plus réponse exacte sans connaître plus de détails

+0

merci pour votre code ... s'il vous plaît dites-moi si j'ai besoin d'ajouter plusieurs éléments eux quelles sont les modifications que je peux faire dans le code afin que plusieurs éléments sont sélectionnés et ajoutés sur la liste de destination .. – zoya

+0

s'il vous plaît me dire un moyen si je pourrais rafraîchir la liste ou effacer la liste après quelques entées – zoya

+0

@zoya: comme les exemples de code, ils vont gérer tous les cas différents (source est vide, source a zéro, un ou plusieurs éléments sélectionnés) . Il n'y a pas besoin de modifications de code pour gérer ces différents scénarios. –

0

Vous devez faire une boucle sur SelectedItems et créer de nouveaux éléments ListView dans votre deuxième ListView.

Code Pseudo:

foreach(var item in lst1.SelectedItems) 
{ 
    var lvi = lst2.Items.Add(item.Text); 
    lvi.ImageIndex = item.ImageIndex; 
    ... 
} 
+0

lvi.ImageIndex = item.ImageIndex; – zoya

+0

un ListViewItem a un index d'image J'ai suggéré que vous créez de nouveaux ListViewItems dans votre liste de destination. par exemple http://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.imageindex(VS.80).aspx – Arthur

0

Je vais hasarder une hypothèse que ce serait quelque chose d'aussi simple que sauver tous les éléments sélectionnés de la première listView dans une liste du type correct et itérer ensuite par cette liste pour les ajouter tous à la deuxième listView?

Je ne suis pas sur mon ordinateur de développement, donc je crains de ne pouvoir publier aucun code correct.

0

Dans le gestionnaire de clics sur les boutons, recherchez les éléments sélectionnés dans la liste des sources et ajoutez-les à la liste cible. quelque chose comme ceci:

  var insertPos = 0; 
      foreach (ListViewItem s in sourceList.SelectedItems) 
      { 
       s.Remove (); 
       var copyCode = Int32.Parse (s.Text); 
       while (insertPos < destinationList.Items.Count) 
       { 
        var itemAtCandidate = Int32.Parse (destinationList.Items [ insertPos ].Text); 
        if (itemAtCandidate > copyCode) 
         break; 
        insertPos++; 
       } 
       destinationList.Items.Insert (insertPos, s); 
      } 

Ceci déplacera tous les éléments sélectionnés dans « SourceList » à « DESTINATIONLIST » et les garder dans l'ordre.

+0

merci son bon fonctionnement mais j'ai besoin de les afficher dans le tri o Il affiche le SNo. en tant que tel dans le fichier source .. j'ai besoin de rentrer dans l'ordre de série .. quelles sont les modifications spécifiques à faire ?? – zoya

+0

monsieur ce code enlève l'article d'une listview, puis l'ajoute à d'autres ...je ne veux pas enlever les articles d'une liste, je veux juste ajouter ceux à d'autres listview sans les supprimer de la liste des sources aussi il ne devrait pas ajouter les entailles en double ... – zoya

+0

je veux juste le copier ... de l'un à l'autre sans redondance ... – zoya

Questions connexes