Avatar
tester
Člen
Avatar
tester:

Ahoj,
potřeboval bych poradit jak srovnat(pomocí kliknutí na název sloupce) dataGridView pomocí datumu.

Ve sloupcích mám datum ve formátu "dd.MM.yyyy HH:mm:ss". Když ale datumy setřídím, dostanu pořadí s přeházenými dny podle první číslice.

Příklad: Řádky s datumem od 30.10 do 6.11

1.11.2015
2.11.2015
3.11.2015
4.11.2015
5.11.2015
6.11.2015
30.11.2015
31.11.2015

Díky za radu.

 
Odpovědět 10.11.2015 13:19
Avatar
Honza
Člen
Avatar
Honza:

Ahoj, podle toho co píšeš to vypadá že datum není v datagridview vloženo jako datum, ale jako text. Je potřeba aby daný sloupeček měl jako datový typ Date a ne String, pak by ti to mělo sortování fungovat podle očekávání.

Nahoru Odpovědět  +1 10.11.2015 13:48
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
tester
Člen
Avatar
tester:

I to jsem zkoušel pomocí:

dataGridView1.Columns[0].ValueType = typeof(DateTime);

Ale ani to nepomohlo. Nastavil jsem i styl toho sloupce na formát datumu a taky nic.

Editováno 10.11.2015 14:02
 
Nahoru Odpovědět 10.11.2015 14:01
Avatar
Honza
Člen
Avatar
Honza:

Styl nehraje roli, jde o datový typ. Hoď sem kód jak vytváříš tabulku a jak ji plníš daty, pes bude zakopaný nejspíš tam. Datový typ sloupce je potřeba nastavit předtím než daný sloupec vložíš do datagridview, pak to myslím už změnit nejde.

Nahoru Odpovědět  +1 10.11.2015 14:10
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
tester
Člen
Avatar
tester:

Celý kód sem dávat nebudu, je to moc dlouhý, ale tady je vkládání dat:

dataGridView1.Rows.Add(Data[i][0], Data[i][1], Data[i][2]);

Celý list Data je string. Do listu ukládám datum jako

Data[i][0] = datum.ToString();
 
Nahoru Odpovědět 10.11.2015 14:16
Avatar
Odpovídá na tester
Libor Šimo (libcosenior):

A v .ToString() je pes zakopaný. ;-)

Nahoru Odpovědět 10.11.2015 14:18
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
tester
Člen
Avatar
tester:

Takže mám vkládat proměnnou typu DateTime do tabulky?

 
Nahoru Odpovědět 10.11.2015 14:20
Avatar
Odpovídá na tester
Michal Štěpánek:

Ano. Nemůžeš po programu chtít, aby ti data třídil podle datumů, když je tam máš jako text...

Editováno 10.11.2015 14:24
Nahoru Odpovědět 10.11.2015 14:23
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
tester
Člen
Avatar
tester:

Ano už to funguje. Myslel jsem že to program za filtruje podle toho, jaký sem nastavil typ. Díky moc.

 
Nahoru Odpovědět 10.11.2015 14:40
Avatar
tester
Člen
Avatar
tester:

Teď jsem ale přišel na to, že pokud vložím prázdné pole do tohoto sloupce Datetime a data setřídím, program spadne. Dá se nějak nastavit, aby se třídily jen vyplněná pole a prázdná to nebralo?

 
Nahoru Odpovědět 10.11.2015 14:43
Avatar
Odpovídá na tester
Michael Škrášek:

Tak tam dej podmínku, aby se nedala přidat prázdná pole.

Nahoru Odpovědět 10.11.2015 14:47
Proč to dělat složitě, když to jde jednoduše.
Avatar
tester
Člen
Avatar
tester:

Jasně takhle to jde určitě. Ale kdyby tam ty data mohly být nulový, jde to nějak ošetřit?

 
Nahoru Odpovědět 10.11.2015 15:03
Avatar
tester
Člen
Avatar
tester:

Tak sem to vyřešil takto:

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
        {
            DateTime d1 = string.IsNullOrEmpty(e.CellValue1.ToString()) == false ? Convert.ToDateTime(e.CellValue1) : new DateTime();
            DateTime d2 = string.IsNullOrEmpty(e.CellValue2.ToString()) == false ? Convert.ToDateTime(e.CellValue2) : new DateTime();
            e.SortResult = DateTime.Compare(d1, d2);
            e.Handled = true;
        }
 
Nahoru Odpovědět  +1 10.11.2015 15:09
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 13 zpráv z 13.