Impossible d’ajouter des éléments de liste après le tri de la colonne

la programmation


Vous trouverez ci-dessous le code que j’utilise pour ajouter des éléments à la liste.

C#
OpenFileDialog FLoc = new OpenFileDialog();
           Application.DoEvents();
           FLoc.Title = "Select Host Name File";
           FLoc.Filter = "TXT files|*.txt";
           FLoc.InitialDirectory = @"C:\";

           if (FLoc.ShowDialog() == DialogResult.OK)
           {
               try
               {
                   FileName = FLoc.FileName;
                   FileLines = File.ReadAllLines(FileName);

                   if (listView1.Items.Count > 0)
                   {
                       foreach (ListViewItem itemR in listView1.Items)
                       {
                           itemR.Checked = false;
                           itemR.Remove();
                       }

                       int LC = 0;
                       foreach (var item1 in FileLines)
                       {
                           this.listView1.Focus();
                           LC = listView1.Items.IndexOf(listView1.Items.Add(item1));
                        //   listView1.Items[LC].SubItems.Add("");
                         //  listView1.Items[LC].Checked = true;

                       }
                       comboBox1.ResetText();
                       DTP.Value = DateTime.Today;

                   }
                   else
                   {


                       foreach (var item2 in FileLines)
                       {
                           //below condition to avoid duplicate entries in listview
                           //if (listView1.FindItemWithText(item) == null)
                           //{
                           int LC = listView1.Items.IndexOf(listView1.Items.Add(item2));
                           listView1.Items[LC].Checked = true;
                           //}


                       }
                   }

ci-dessous est la classe que j’utilise pour trier la colonne listview

C#
class ListViewItemComparer : IComparer
   {
       private int col;
       private System.Windows.Forms.SortOrder order;
       public ListViewItemComparer()
       {
           col = 0;
           order = System.Windows.Forms.SortOrder.Ascending;
       }
       public ListViewItemComparer(int column, System.Windows.Forms.SortOrder order)
       {
           col = column;
           this.order = order;
       }
       public int Compare(object x, object y)
       {
           int returnVal = -1;
           returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text,
                                   ((ListViewItem)y).SubItems[col].Text);
           // Determine whether the sort order is descending.
           if (order == System.Windows.Forms.SortOrder.Descending)
               // Invert the value returned by String.Compare.
               returnVal *= -1;
           return returnVal;
       }
   }

après avoir inclus cette colonne de tri de liste. si j’essaie de trier les colonnes, ouvrez le fichier pour ajouter des éléments à la liste et obtenez un message d’erreur ci-dessous. toute aide serait très appréciée.

<br />
InvalidArgument=Value of '3' is not valid for 'index'. Parameter name: index<br />

Ce que j’ai essayé :

J’ai parcouru toutes les pages Google mais je n’ai trouvé aucune solution parfaite.

Solution 1

j’ai finalement trouvé une solution sur moi-même. Mais le pire, c’est que je ne sais pas comment ça marche…

ajouté la ligne ci-dessous avant la partie de suppression des éléments Listview, ce qui a résolu le problème

C#
listView1.Sorting = System.Windows.Forms.SortOrder.None;

PS : Peut-être qu’avant de recréer les éléments de la liste, j’ai réglé le tri sur NONE, ce qui résout mon problème.

Solution 2

ListView1.ListViewItemSorter = Rien

コメント

タイトルとURLをコピーしました