Avatar billede gulbaek Nybegynder
25. marts 2003 - 20:32 Der er 4 kommentarer og
1 løsning

Lidt problemer med en ListView

Har lige lidt små problemer med en ListView
http://danevirke.frip.dk/ListView.jpg

Som man kan se på billede så vælger den ikke hele rækken men, kun feltet Oprettet.
Hvordan kan jeg lige rette det ?


Desuden kunne jeg godt tænke mig at få den til at sortere f.eks. efter Stilling, eller Telefonnr alt efter hvad brugeren trykker på.

håber nogle venlige mennesker kan hjælpe :-)
Avatar billede burningice Nybegynder
25. marts 2003 - 21:04 #1
det med at vælge hele linjen skal du sætte FullRowSelect til True:

Gets or sets a value indicating whether clicking an item selects all its subitems.

[Visual Basic]
Public Property FullRowSelect As Boolean
[C#]
public bool FullRowSelect {get; set;}


Ang. det med at sortere, er du desværre tvunget til at skrive din sorteringsalgoritme selv. Jeg har dog en liggende, som jeg selv bruger, som du gerne må få. Jeg har fået den fra www.codeproject.com og kun rettet den en smule til :)
Avatar billede gulbaek Nybegynder
25. marts 2003 - 21:13 #2
oki, FullRowSelect virkede fint.

kunne godt tænke mig den sorteringsalgoritme du bruger

Kan du poste den her ?
Og husk nu at skrive som Svar :-)
Avatar billede burningice Nybegynder
25. marts 2003 - 21:18 #3
//--- selve klasse... :

public class ListViewSorter : IComparer
    {
        // Column comparers
        protected Hashtable _comparers;
        // Last clicked column
        protected ColumnHeader _column;
        // Parent list
        protected ListView _list;

        public ListViewSorter()
        {
            _comparers = new Hashtable();
            _comparers.Clear();
        }

        public ListView List
        {
            set
            {
                _list = value;
                _comparers.Clear();
               
                _list.Sorting = SortOrder.None;
                _list.ColumnClick += new ColumnClickEventHandler(this.Column_Click);
                _list.ListViewItemSorter = this;
            }
        }

        /// <summary>
        /// Column comparer.
        /// </summary>
        public Comparer this[ColumnHeader column]
        {
            get
            {
                if (column == null)
                {
                    throw new Exception("The column is null");
                }
                if (column.ListView != _list)
                {
                    throw new Exception("The column parent does not match the list");
                }

                return (Comparer)_comparers[column];
            }
            set
            {
                if (column == null)
                {
                    throw new Exception("Column is null");
                }
                if (column.ListView != _list)
                {
                    throw new Exception("The column parent does not match the list");
                }

                this._comparers[column] = value;
            }
        }

        /// <summary>
        /// All comparers by columns. Null item for nonsortable column.
        /// </summary>
        public Comparer[] Comparers
        {
            get
            {
                Comparer[] comps = new Comparer[_list.Columns.Count];
                for (int i = 0; i < comps.Length; i++)
                {
                    comps[i] = this[_list.Columns[i]];
                }
               
                return comps;
            }
           
            set
            {
                if (_list.Columns.Count < value.Length)
                {
                    throw new Exception("The list has less columns");
                }

                _comparers.Clear();
                for (int i = 0; i < value.Length; i++)
                {
                    this[_list.Columns[i]] = value[i];
                }
            }
        }

        /// <summary>
        /// Sorts list by column.
        /// </summary>
        public void SortBy(ColumnHeader column, bool asc)
        {
            if (column == null)
            {
                throw new Exception("The column is null");
            }

            if (this[column] == null)
            {
                return;
            }

            _column = column;
           
            _list.Sorting = SortOrder.None;
            _list.Sorting = asc ? SortOrder.Ascending : SortOrder.Descending;
        }

        /// <summary>
        /// Compares two items.
        /// </summary>
        int IComparer.Compare(object x, object y)
        {
            if (_list.Sorting == SortOrder.None || _column == null)
            {
                return 0;
            }

            ListViewItem ix = x as ListViewItem;
            ListViewItem iy = y as ListViewItem;
           
            if (ix.ListView != _list || iy.ListView != _list)
            {
                throw new Exception("The event sender does not match the list");
            }

            return (_list.Sorting == SortOrder.Ascending ? 1 : -1) *  this[_column](ix.SubItems[_column.Index].Text, iy.SubItems[_column.Index].Text);
        }

        // Handles sorting request.
        protected void Column_Click(object sender, ColumnClickEventArgs e)
        {
            CleanUp();

            ColumnHeader column = _list.Columns[e.Column];
            SortBy(column, _column != column || _list.Sorting != SortOrder.Ascending);
        }

        // Drops old columns.
        protected void CleanUp()
        {
            if (_list == null)
            {
                _comparers.Clear();
                return;
            }

            foreach (ColumnHeader key in _comparers.Keys)
            {
                if (!_list.Columns.Contains(key))
                {
                    _comparers.Remove(key);
                }
            }
        }

        /// <summary>
        /// Basic comparer.
        /// </summary>
        public delegate int Comparer(string x, string y);

        /// <summary>
        /// Standard strings comparer.
        /// </summary>
        public static int CompareStrings(string x, string y)
        {
            return x.CompareTo(y);
        }

        /// <summary>
        /// Standard numbers comparer.
        /// </summary>
        public static int CompareNumbers(string x, string y)
        {
            double dx = double.Parse(x);
            double dy = double.Parse(y);
            return dx.CompareTo(dy);
        }

        /// <summary>
        /// Standard dates comparer.
        /// </summary>
        public static int CompareDates(string x, string y)
        {
            DateTime dx = DateTime.Parse(x);
            DateTime dy = DateTime.Parse(y);
            return DateTime.Compare(dx, dy);
        }
    }

//--- sådan bruger du den:
ListViewSorter lstSorter = new ListViewSorter();
ListViewSorter.Comparer[] comparers = new ListViewSorter.Comparer[] {
            new ListViewSorter.Comparer( ListViewSorter.CompareStrings ),
            new ListViewSorter.Comparer( ListViewSorter.CompareDates ),
            new ListViewSorter.Comparer( ListViewSorter.CompareStrings )
            };

            lstSorter.List = lstCostumersView; //Din listview
            lstSorter.Comparers = comparers;
Avatar billede burningice Nybegynder
25. marts 2003 - 21:18 #4
det var det svar ;)
Avatar billede gulbaek Nybegynder
25. marts 2003 - 21:22 #5
Jamen jeg siger da endnu engang tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester