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!
Avatar
erik518
Člen
Avatar
erik518:13.11.2016 14:09

Č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.11.2016 14:09
Avatar
HONZ4
Člen
Avatar
HONZ4:13.11.2016 17:22

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.11.2016 17:22
Avatar
erik518
Člen
Avatar
erik518:13.11.2016 21:36

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.11.2016 21:36
Avatar
HONZ4
Člen
Avatar
Odpovídá na erik518
HONZ4:13.11.2016 22:02
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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
13.11.2016 22:02
Avatar
erik518
Člen
Avatar
erik518:13.11.2016 22:16

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.11.2016 22:16
Avatar
HONZ4
Člen
Avatar
Odpovídá na erik518
HONZ4:13.11.2016 22:20

result = d2.CompareTo(d1);

 
Nahoru Odpovědět
13.11.2016 22:20
Avatar
HONZ4
Člen
Avatar
HONZ4:13.11.2016 22:25

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.11.2016 22:25
Avatar
erik518
Člen
Avatar
erik518:13.11.2016 22:28

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.11.2016 22:28
Avatar
Jan Bezdíček
Tvůrce
Avatar
Jan Bezdíček:14.11.2016 2:44

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

 
Nahoru Odpovědět
14.11.2016 2:44
Avatar
Marian Benčat:14.11.2016 3:05

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.11.2016 3:05
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Neaktivní uživatel:14.11.2016 15:07

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

Nahoru Odpovědět
14.11.2016 15:07
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Marian Benčat:14.11.2016 15:30

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

Nahoru Odpovědět
14.11.2016 15:30
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Neaktivní uživatel:14.11.2016 16:33

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.11.2016 16:33
Neaktivní uživatelský účet
Avatar
erik518
Člen
Avatar
erik518:14.11.2016 18:13

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.11.2016 18:13
Avatar
Odpovídá na Neaktivní uživatel
Marian Benčat:14.11.2016 19:09

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
14.11.2016 19:09
Totalitní admini..
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Marian Benčat
ostrozan:21.11.2016 7:58

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.11.2016 7:58
Avatar
Marian Benčat:21.11.2016 15:33

protoze to si prekladac neridi.

Nahoru Odpovědět
21.11.2016 15:33
Totalitní admini..
Avatar
Odpovídá na ostrozan
Marian Benčat:23.11.2016 1:06

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.11.2016 1:08
Nahoru Odpovědět
23.11.2016 1:06
Totalitní admini..
Avatar
Odpovídá na Neaktivní uživatel
Marian Benčat:23.11.2016 1:07

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

Nahoru Odpovědět
23.11.2016 1:07
Totalitní admini..
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Marian Benčat
ostrozan:23.11.2016 7:53

.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.11.2016 7:53
Avatar
Odpovídá na ostrozan
Marian Benčat:23.11.2016 13:12

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

Nahoru Odpovědět
23.11.2016 13:12
Totalitní admini..
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na Marian Benčat
ostrozan:24.11.2016 8:17

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
24.11.2016 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.