Avatar
erik518
Člen
Avatar
erik518:

Čaute, mám problém so zoraďovaním v ListView. Mám tam podľa dátumu aby to zoraďovalo ale ono to po 9.11. ide a potom to začne dávať dole ako keby 10.11. bolo 1.11. Neviete náhodou ako to opraviť ? skúšal som to už aj podľa internetu ale nič nefungovalo :/ Zoraďovanie nemám pomocou kódu ale v nastaveniach ListView mám Sorting nastavený na Descending.

 
Odpovědět 13. listopadu 14:09
Avatar
HONZ4
Člen
Avatar
HONZ4:

jde o to, že mu musíš říct, že řadíš datum
řazení podle sloupce

mimochodem, já vždy používám ListView virtuálně, řazení a plnění je hodně rychlejší

pokud chceš něco jiného, hoď sem tvůj kód

 
Nahoru Odpovědět 13. listopadu 17:22
Avatar
erik518
Člen
Avatar
erik518:

Tak ja som zoraďovanie nemal žiadno pomocou kódu iba v nastaveniach toho ListView ( Sorting = Descending ) a pekne to fungovalo a zrazu október a aj teraz november to nejde :/ A načítavanie informácii mám takéto.

private void NacitanieInformacii()
        {
            string pathString2 = System.IO.Path.Combine(@"c:\Financnydennik\" + Convert.ToString(aktualrok), aktualmesiac, "Dennik.txt");
            string pozicia = Path.Combine(@"c:\Financnydennik\" + Convert.ToString(aktualrok), aktualmesiac, "Dokopy.txt");
            string[] lines2 = File.ReadAllLines(pozicia);
            if (lines2[0] != null) PrijemSpolu.Text = Convert.ToString(lines2[0]) + " €";
            prijmy = Convert.ToInt32(lines2[0]);
            if (lines2[1] != null) VydavkySpolu.Text = Convert.ToString(lines2[1]) + " €";
            vydavky = Convert.ToInt32(lines2[1]);
            aktualny2 = Convert.ToInt32(lines2[0]) - Convert.ToInt32(lines2[1]);
            aktualny.Text = Convert.ToString(aktualny2) + " €";
            string[] lines = File.ReadAllLines(pathString2);
            int pocOP = lines.Length / 6;
            for (int i = 0; i < pocOP; i++)
            {
                string datum = lines[por]; por++;
                string kategor = lines[por]; por++;
                string podkat = lines[por]; por++;
                string summa = lines[por]; por++;
                string dovodo = lines[por]; por++;
                int farba = Convert.ToInt32(lines[por]); por++;
                ListViewItem lv = new ListViewItem(datum);
                lv.SubItems.Add(kategor);
                lv.SubItems.Add(podkat);
                lv.SubItems.Add(summa + " €");
                lv.SubItems.Add(dovodo);
                if (farba == 1) lv.BackColor = Color.Green;
                else if (farba == 2) lv.BackColor = Color.Red;
                listView1.Items.Add(lv);

            }

jún, júl, august, september mám krásne zoradený a október a november nie.

 
Nahoru Odpovědět 13. listopadu 21:36
Avatar
HONZ4
Člen
Avatar
Odpovídá na erik518
HONZ4:
using System.Collections;
....
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            listView1.ListViewItemSorter = new ListViewItemComparer();
        }
    }

    class ListViewItemComparer : IComparer
    {
        public int Compare(object t1, object t2)
        {
            int result = 0;
            try
            {
                string s1 = ((ListViewItem)t1).SubItems[0].Text;
                string s2 = ((ListViewItem)t2).SubItems[0].Text;

                DateTime d1 = DateTime.Parse(s1);
                DateTime d2 = DateTime.Parse(s2);
                result = d1.CompareTo(d2);
            }
            catch (Exception) { }
            return result;
        }
    }
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 13. listopadu 22:02
Avatar
erik518
Člen
Avatar
erik518:

Mohol by si mi ešte poradiť ako to zoradiť Descending a nie Ascending? Ináč moc díky takto to funguje parádne len to zoradenie by som chcel trošku ináč :)

 
Nahoru Odpovědět 13. listopadu 22:16
Avatar
HONZ4
Člen
Avatar
Odpovídá na erik518
HONZ4:

result = d2.CompareTo(d1);

 
Nahoru Odpovědět 13. listopadu 22:20
Avatar
HONZ4
Člen
Avatar
HONZ4:

pokud to chceš přepínat, tak si to jistě dokážeš upravit podle toho odkazu, co jsem ti tu dal

 
Nahoru Odpovědět 13. listopadu 22:25
Avatar
erik518
Člen
Avatar
erik518:

Ahá :) bože, že ma to nenapadlo :/ Vážne moc ďakujem za pomoc a jasné keby to chcem prepínať tak to si už viem urobiť :)

 
Nahoru Odpovědět 13. listopadu 22:28
Avatar
Jan Bezdíček
Redaktor
Avatar
Jan Bezdíček:

Jsem snad jediny kdo place, kdyz vidi ty absolutni cesty v tom sourcu ? :D

 
Nahoru Odpovědět 14. listopadu 2:44
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

Zde se nabizi otazka prpo zvidave..

Jaky je rozdil mezi timto kodem:

string datum = lines[por]; por++;
               string kategor = lines[por]; por++;
               string podkat = lines[por]; por++;
               string summa = lines[por]; por++;
               string dovodo = lines[por]; por++;

a tímto kodem:

string datum = lines[por];
               string kategor = lines[por+1];
               string podkat = lines[por+2];
               string summa = lines[por+3];
               string dovodo = lines[por+4];
              por = por + 5;

na modernim CPU. kdo bude vedet, ma bludistaka ;)

 
Nahoru Odpovědět 14. listopadu 3:05
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Marian Benčat
Lukas C#:

Ten druhý mnohem lépe využije CPU pipeline? Nevím, spíš tipuju, ale chci to vědět :-)

 
Nahoru Odpovědět  +1 14. listopadu 15:07
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Lukas C#
Marian Benčat:

A chces cerveneho, nebo zeleneho? Spravne.. zmenseni dependency chain a vetsinou se pouziva pri loop unrollingu ;-)

 
Nahoru Odpovědět  +1 14. listopadu 15:30
Avatar
Lukas C#
Redaktor
Avatar
Odpovídá na Marian Benčat
Lukas C#:

Nemáš nějakou dobrou e-book, kde si můžu přečíst o této compiler optimalizaci a podobném?

 
Nahoru Odpovědět 14. listopadu 16:33
Avatar
erik518
Člen
Avatar
erik518:

Je to možné, že ten kód nieje profesionálne optimalizovaný :D Ale som začiatočník takže ako ma to napadne tak to urobím a keď to funguje som rád :D

 
Nahoru Odpovědět 14. listopadu 18:13
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Lukas C#
Marian Benčat:

Jsou jich desitky, ale ke vsem me privedla vysoká škola a předměty jako Efektivni implementace algoritmu, číslicový návrh , HW architektura a další :-)

Pokud ti jde o to rozumět dobře C# tak určitě:

  1. CLR via C#
  2. C# Deep Dive

atd :-)

 
Nahoru Odpovědět  +2 14. listopadu 19:09
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Marian Benčat
ostrozan:

Můžeš blíže specifikovat pojem "moderní CPU" ?

jinak ještě na úrovni asembleru nevidím mezi variantami nějaký zásadní rozdíl

první varianta:

 string kategor = lines[por+1];
09F826B7  mov         eax,dword ptr [ebp-3Ch]
09F826BA  mov         edx,dword ptr [eax+214h]
09F826C0  inc         edx
09F826C1  mov         eax,dword ptr [ebp-3Ch]
09F826C4  mov         ecx,dword ptr [eax+1DCh]
09F826CA  cmp         dword ptr [ecx],ecx
09F826CC  call        5977DF00
09F826D1  mov         dword ptr [ebp-88h],eax
09F826D7  mov         eax,dword ptr [ebp-88h]
09F826DD  mov         dword ptr [ebp-60h],eax

druhá varianta:

            string kategor = lines[por];
0A212AB0  mov         eax,dword ptr [ebp-3Ch]
0A212AB3  mov         ecx,dword ptr [eax+1DCh]
0A212AB9  mov         eax,dword ptr [ebp-3Ch]
0A212ABC  mov         edx,dword ptr [eax+214h]
0A212AC2  cmp         dword ptr [ecx],ecx
0A212AC4  call        5977DF00
0A212AC9  mov         dword ptr [ebp-88h],eax
0A212ACF  mov         eax,dword ptr [ebp-88h]
0A212AD5  mov         dword ptr [ebp-60h],eax
            por++;
0A212AD8  mov         eax,dword ptr [ebp-3Ch]
0A212ADB  inc         dword ptr [eax+214h]
 
Nahoru Odpovědět 21. listopadu 7:58
Avatar
Marian Benčat
Redaktor
Avatar
Marian Benčat:

protoze to si prekladac neridi.

 
Nahoru Odpovědět 21. listopadu 15:33
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na ostrozan
Marian Benčat:

Jeste jednou s "oznacenim".

  1. To je JITnuty kod? Jestli ano, tak musis brat v uvahu to, ze tvuj JITnuty kod, nemusi byt stejny jako u nekoho jineho.. .NET totiz jak JITuje, tak si zjistuje mj. specifikaci CPUcka a na tom zaklade dela treba optimalizace. .NET je schopny dokonce zjistit urcite patterny v kodu a na tom zaklade pouzit SIMD instrukci (opet , pokud je CPU podporuje) atd.... Jen pokud pouzijes NGEN, tak tyto "cpu specific" optimalizace a dalsi vypne a vygeneruje ASM takovy, ktery pobezi "vsude".

take to samozrejme zalezi na target CPU.

  1. Pipelining nema nic spolecneho s ASM kodem. Resp. tam nezjistis jak se to provede.. Muzes ten ASM pouze optimalizovat tak, aby byl pipelinig lepsi. A jde to optimalizovat i na vyssi vrstve prave treba tim indexem, co jsem popisoval.

Krasna ukazka techto figlu a jeho dopad je v knizce .NET Performance:

Mimochodem, prave ten priklad, co jsem daval ja, je videt zde:
https://books.google.cz/books?…

Editováno 23. listopadu 1:08
 
Nahoru Odpovědět  +1 23. listopadu 1:06
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Lukas C#
Marian Benčat:

Jak jsem psal v komentari vyswe, koukni na PRO .NET Performance.

 
Nahoru Odpovědět  +1 23. listopadu 1:07
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Marian Benčat
ostrozan:

.NET totiz jak JITuje, tak si zjistuje mj. specifikaci CPUcka a na tom zaklade dela treba optimalizace

Hmm na to jsem nepomyslel - jinak ta konkrétní ukázka byla pro "Any CPU"

Studovat to asi nebudu - už tak nevím co dřív, ale pokud se s námi sem tam podělíš o své poznatky - stejně jako tady - budu rád a jistě ne sám :-)

 
Nahoru Odpovědět 23. listopadu 7:53
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na ostrozan
Marian Benčat:

Dej mi redaktorky právo a podelim se čas od času ve článcích ;)

 
Nahoru Odpovědět 23. listopadu 13:12
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Marian Benčat
ostrozan:

No být na mně, tak máš redaktora hned, ale taková práva tu nemám - budeš si muset o něj zažádat standardním způsobem - je to myslím někde v profilu :)

 
Nahoru Odpovědět  +1 24. listopadu 8:17
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 22 zpráv z 22.