Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 3.617 pregleda

Najnovija ↓

Sortable binding IList<T> 06.06.2008. u 16:04 · pre 224 meseca #1
Potrebno mi je da na datagridview bindujem IList<T> i imam mogućnost sortiranja kada kliknem na header.
Pogledao sam nešto slično na http://www.timvw.be/presenting-the-sortablebindinglistt/ ali ta klasa radi samo sa List kolekcijom i sortiranje ne radi kako treba.
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Sortable binding IList<T> 09.06.2008. u 09:19 · pre 223 meseca #3
Nije mnogo pomoglo...
Potpis
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
Re: Sortable binding IList<T> 09.06.2008. u 09:51 · pre 223 meseca #4
Rijesenje ti je na onom tvom prvom linku.
Kreiraj svoju klasu, nazovi je SortabilnaLista npr.
implementiraj IList ako hoces ili nasljedi neku listu.
Odradi override kao i ovaj covjek u primjeru i napravi sve isto kao on...
I nakraju ako ti treba interfejs napravi interfejs svoje klase
i nazovi ga ISortabilnaLista.

Meni je ovaj isti kod radio...
Potpis
logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
Re: Sortable binding IList<T> 09.06.2008. u 10:12 · pre 223 meseca #5
Citat:
Pharos: Nije mnogo pomoglo...

Razlog ???

Napravis jednu sortabilnu klasu sa static metodama od kojih ce svaka raditi sort za odredjenu kolonu ..

Code:

public class ProductSorting : IComparable<Product>
{     

 public static Comparison<Product> PriceComparison =      
  delegate(Product p1, Product p2) 
       {            return p1.Price.CompareTo(p2.Price);       
 };    

public static Comparison<Product> IDComparison =        
delegate(Product p1, Product p2)   
{  
 return p1.ProductID.CompareTo(p2.ProductID);    
   
};  

public int CompareTo(Product other)   
{        
return ProductName.CompareTo(other.ProductName);  

}


}
//negde u kodu 

List<Product> items = new List<Product>() ; 
items.Add(...) ; 
..
..
items.Sort(ProductSorting.IDComparison) ;
items.Sort(ProductSorting.PriceComparison ) ;

Potpis
Viva lollapalooza
Re: Sortable binding IList<T> 09.06.2008. u 11:18 · pre 223 meseca #6
Milim da znam zasto mu to ne pomaze, on ne radi sa svojim List<T> instancama, radi sa IList<T> interfejsom (mozda ga je dobio iz nekog business layer-a). A IList<T> nema sort.

Resenje je medjutim veoma jednostavno, nema potrebe da se kreiraju posebne klase, samo se iz IList<T> napravi List<T> kroz ToList() metod. Onda na toj listi moze da se radi sortiranje kao sto ste predlozili. A moze i ad izvuce IEnumerable<T> iz IList<T> i da nad njim pozove OrderBy(labda) metod da dobije sortirani IEnumerable, bez ikakvih IComparable<T> klasa.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: Sortable binding IList<T> 09.06.2008. u 13:51 · pre 223 meseca #7
Evo ti dva primera sortiranja IList<T>:

Code:

    class Person
    {
        public int ID; public string ime;
    }

    class Program
    {
        static void Main(string[] args)
        {
            IList<Person> ilista = new List<Person>() { new Person() { ID = 12, ime = "Pera"},
                                                        new Person() { ID = 1, ime = "Zika"},
                                                        new Person() { ID = 7, ime = "Aska"}};

            string imePolja = "ID";
            FieldInfo field = ilista.GetType().GetGenericArguments()[0].GetField(imePolja);
            var sortedlista = (from p in ilista
                               orderby field.GetValue(p)
                               select p).ToList();

            var sortedlista2 = ilista.AsEnumerable().OrderBy(x => x.ime).ToList();
        }
    }


Oba u principu koriste IEnumerable<T>.OrderBy() za sortiranje, samo sto sortedlista koristi kroz LINQ to Objects, a sortedlista2 kroz direktan poziv ekstenzije. Takodje, sortedlista moze da se koristi univerzalno posto koristi refleksiju (imePolja moze da ti bude ime polje na koje je korisnik kliknuo u headeru tako da ne moras da imas poseban kod za svako posebno polje, sto je slucaj sa sortedlista2. Cena univerzalnosti je sto moras kroz refleksiju, i sto za property moras da koristis PropertyInfo umesto FieldInfo.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme