Řazení datagridview   otázka

VB.NET, WinForms, Databáze

Dobrý den, asi to tu už někde bude, ale hledám to marně už několik dní, tak se na to zeptám.

Umím si data v Datagridview seřadit pomocí Sort, ale vždycky jen abecedně tj. např. 100, 2000, 30, 4000 apod. Jak lze docílit toho, aby se sloupce s čísly neřadily abecedně, ale řadily se podle hodnot?

Předem děkuji za radu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nastavte si ValueType datagridu na číslo,poté by to mělo být ok.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To jsem zkoušel přes .ValueType = GetType(Integer) a žádná změna. Dokonce když nastavím formát sloupce jako číslo přímo v datagridu, tak Sort dokonce hlásí chybu a vyžaduje sloupec typu String.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A proč GetType(Integer)? Nestačilo by TypeOf(System.Int32)?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To jsem taky zkoušel, ale výsledek je: "Error 'Int32' is a type in 'System' and cannot be used as an expression."

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Máte tam len čísla, alebo aj čísla aj iné názvy?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jen čísla

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Osobně jsem to teď zkoušel a korektně mi funguje

column.ValueType = TypeOf(System.Int32);

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pořád mi to ukazuje tu chybu: "'Int32' is a type in 'System' and cannot be used as an expression." Je u toho ještě druhá chyba: "'Is' expected."

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se,dělám v C# a tak je i moje ukázka v tomto jazyce - nenapadlo mě popravdě,že to nepoznáte.Je tedy nutné převést kód do VB.net.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To jsem poznal, jen nevím kde dělám chybu. :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud to teda dělám správně:

DataGridView1.Columns(6).ValueType = TypeOf (System.Int32)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Chtělo by to taky trochu snahy ;-)

Dejte

GetType(Int32)

Místo zmíněného

TypeOf(System.Int32)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tak jsem to dělal původně, jen jsem tam měl Integer místo Int32. nefunguje to ale ani s GetType(Int32), GetType(Integer), GetType(Int16) ani s GetType(Int64). Zkoušel jsem vše a pořád je to seřazeno abecedně. Možná mám něco špatně nastavenýho v Datagridview.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To asi ano,já jsem si udělal Form,kam jsem umístil DataGridView s jedním sloupcem právě typu Int32 a následně app spustil.Naplnil jsem sloupec čísly a dal Sort a vše ok.Čísla srovnaná dle hodnoty.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuju za snahu. Asi je to nad moje chápání. :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Skúste zabaliť celú zložku Solution do archívu, hodiť na file hosting a sem napísať link. Možno keď si to niekto otvorí vo Visual Studiu, tak mu vypíše tú istú chybu, ako Vám.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak nebo odkud buňky plníte? Jsou to opravdu čísla? Zkuste nový GridView s nastavením GetType(Int32) a čísla zadávat z klavesnice. Tak řazení musí jít!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jak sloupce v gridu vytváříte..pomocí designeru nebo dynamicky v kódu?

V případě prvním se podívejte v definici sloupce na hodnotu option "Name" - pak v rámci code-behind můžete nastavit ValueType takto:

columnName.ValueType = GetType(Int32)

V případě druhém můžete již při vytváření rovnou nastavit ValueType stejným způsobem.

Vše funguje samozřejmě jen za podmínky,že sloupec je typu DataGridViewTextBoxColumn

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Všechno mám nastaveno správně a plním to takhle:

Dim Radek As String() = {Akce, Etapa, RN0, RN1, RN2}
DataGridView1.Rows.Add(Radek)

Trochu jsem to zkrátil, těch hodnot je tam podstatně víc. Je úplně jedno, jestli mám např. RN0 jako String, Integer nebo třeba Double, pořád se to řadí abecedně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Je úplně jedno jak plníte buňky!Podívejte se na poslední příspěvek a zkontrolujte jak vytváříte sloupce,zda designerem nebo v rámci code-behind.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Designerem a jsou typu DataGridViewTextBoxColumn.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vidíte..o pár příspěvků výše to máte napsané ;-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já vím, ale stejně když dám např. Sloupec8.ValueType = GetType(Int32), tak se to pořád řadí abecedně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nesmysl!Zkoušel jsem to jak v C# tak i ve VB.net a funguje to přesně jak píši.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já vám to věřím, ale pak tam v Datagridview musím mít ještě někde něco špatně nastavenýho nebo to třeba špatně používám (např. špatně umístěný v kódu). Nevím v čem je zakopanej pes.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Podľa mňa je chyba presne v tom plnení :

Dim Radek As String() = {Akce, Etapa, RN0, RN1, RN2}

DataGridView1.Rows.Add(Radek)

Takto sa všetky položky pretypujú na string. To isté som riešil aj ja , až som to musel zmeniť tak že to nešlo cez premennú Radek, ale priamo

DataGridView1.Rows.Add(akce,Etapa ......

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback