NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: C# - seřazení ObservableCollection zestupně podle čísla

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
lukas.sei
Člen
Avatar
lukas.sei:10.5.2016 17:43

Čaute,
Potřebuji pomoct.
Mám observableCollec­tion v které mám uložené všechny uživatelé, které chci zobrazit v listboxu. V uživatelích metoda ToString(), která vrací pořadí v kterém by měl být zobrazen.
Takže moje otázka zní:
Jak mám observableCollec­tion seřadit podle tohoto pořadí.

Předem děkuji.

 
Odpovědět
10.5.2016 17:43
Avatar
Ondřej Štorc
Tvůrce
Avatar
Nahoru Odpovědět
10.5.2016 17:45
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
lukas.sei
Člen
Avatar
lukas.sei:11.5.2016 20:20

Dík. Udělal jsem vše podle tohohle komentáře(http://stackoverflow.com/a/16344936). Vše šlo v pohodě, až na řádek:

return Utils.LogicalStringCompare(a.Penize, b.Penize);

Kde dostanu chybu:
"'Utils' is inaccessible due to its protection level"

Celý kód:

static class Extensions
{
    public static void Sort<T>(this ObservableCollection<T> collection) where T : IComparable
    {
        List<T> sorted = collection.OrderBy(num => num).ToList();
        for (int i = 0; i < sorted.Count(); i++)
            collection.Move(collection.IndexOf(sorted[i]), i);
    }
}
public class Uzivatel : IComparable
{
    public int CompareTo(object o)
    {
        Uzivatel a = this;
        Uzivatel b = (Uzivatel)o;
        return Utils.LogicalStringCompare(a.Penize, b.Penize);
    }

    public string Penize { get; set; }
}

Mohl bys mi s tím pomoct ?

Když místo toho použiji:

string.Compare

Tak sice seřazování funguje, ale čísla to seřazuje špatně (např. Vidí to číslo 1005 jako měnší než číslo 15 -_-)

Editováno 11.5.2016 20:22
 
Nahoru Odpovědět
11.5.2016 20:20
Avatar
Odpovídá na lukas.sei
Michal Štěpánek:11.5.2016 20:50

Nemůže to mít souvislost s tím, že nemáš "public"¨

static class Extensions

?

Nahoru Odpovědět
11.5.2016 20:50
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
lukas.sei
Člen
Avatar
Odpovídá na Michal Štěpánek
lukas.sei:12.5.2016 6:03

Ne. I když to změním na:

public static class Extensions

Tak to ukazuje tu samou chybu. :/
A chyba přetrvává, i když u obou to "public" odstraním.

Editováno 12.5.2016 6:05
 
Nahoru Odpovědět
12.5.2016 6:03
Avatar
lukas.sei
Člen
Avatar
lukas.sei:12.5.2016 16:14

Tak už jsem to vyřešil. Byla to chyba mojí nepozornosti.
Ale teď mám další problém, s kterým mi doufám poradíte.

Pomocí ToString() do toho listboxu následně vypisuji dvě proměnné (Jméno a Peníze), ale můj problém je, že to není zarovnané. Já bych tyto dvě proměné chtěl v tom listboxu zarovnat do dvou sloupců.
Je to možné ?

Takhle se to vypisuje teď:

bustercze   258
JohnyPrcina   147
dalšíHráč   42

Jak bych chtěl, aby se to vypisovalo:

bustercze               258
JohnyPrcina             147
dalšíHráč               42

Kód mojeho ToString() ve třídě Uživatel.:

public override string ToString()
        {
            return string.Format("{0}   {1}", Jmeno, Penize);
        }

Znova předem děkuji.

 
Nahoru Odpovědět
12.5.2016 16:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.