"Desetinná místa" po načtení dat z SQL serveru   zodpovězená otázka

VB.NET, SQL, ADO.NET, Databáze

Dobrý den, potřeboval bych poradit se zobrazovaním hodnot u dvou datových typů. Problém je že nevím zda to mám řešit na straně serveru nebo aplikace (pro mě by bylo pohodlnější přímo v aplikaci).

Případ 1) Na sql serveru mám tabulku kde v jednom sloupci jsou hodnoty typu datatime. Pokud je načtu do aplikaci do datagridView zobrazí se mi datum a čas bez sekund. Nechápu proč se nezobrazují sekundy a tisíciny sekund když v databázi jsou zadané (nejsou nulové). Tisíciny mě až tak netrápí ale sukundy bych potřeboval do datagridviewu dostat.

Případ 2) V databázi mám datový typ money. Zde se mi naopak zobrazuje více desetinných míst než bych potřeboval. Uživatelé nadávají že je nepřehledné a zbytečné aby každá částka byla na 4 desetinná místa (a já souhlasím).

Typuji že první případ budu muset řešit na straně aplikace a druhý na straně serveru. Bohužel nevím jak. Můžete mi prosím někdo poradit? Nejde o nic kvůli čemu by se zhroutila aplikace, je to vyloženě pro pohodlí uživatelů.

Pro úplnost data jsou na SQL serveru 2000 a data načítám přes SQLclient voláním procedur, které jsou také na SQL serveru.

Díky za jakoukoliv radu:)

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

V každé komponentě pro zobrazování dat, co znám, se dá pro každý sloupec nastavit tzv. format string, který přesně tyto věci řeší a říká, jak se mají data zformátovat. Dělat tohle na úrovni databáze není vhodné, přiděláte si tím akorát víc problémů.

Jak konkrétně tohle nastavovat, záleží na použité komponentě. Pokud je to DataGridView, jak píšete, tak zkuste vlézt do editoru na sloupečky (vlastnost Columns a rozkliknout ...).

Vyberte příslušný sloupec a najděte jeho vlastnost DefaultCellStyle a tam upravte vlastnost Format (opět stačí rozkliknout a je tam podobný dialog na výběr formátu jako v Excelu). To by mělo stačit a fungovat.

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

Osobně bych obojí řešil na straně klienta. Ad 1 je to pravděpodobně o formátování buňky (pokud tedy jsou data opravdu v db). Ad2 máte 2 možnosti, které je potřeba zvážit podle požadované funkčnosti. První je omezení desetinných čísel již při vkladádání čísel a druhou jest zaokrouhlování a způsob zobrazení "zbytečně přesných dat".

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

Omezení při vkládání bohužel nefunguje.Po importu dat se všude tam kde je desetinné číslo kratší doplní nuly na 4 desetinná místa.

Zkoušel jsem vlézt do editoru do vlastnosti columns ale tam žádné sloupce nemám protože datagridview slouží pro načítání ruzných dat (pokaždé mají jinou strukturu) v závislosti na tom co vybere uživatel. Po zapnutí aplikace jsou datagridviewy zcela prázdné dokut se něco nenačte dotazem ze serveru. Zkusím si s vlastností columns pohrát přímo v kódu po načtení dat.

Díky z a nakopnutí:)

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

Tak to budete asi muset nastavit kódem, ale dělá se to úplně stejně:

DataGridView1.Columns(1).DefaultCellStyle.Format = "C2"  'zformátovat jako měnu
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ozkoušeno a funguje:) Kód jsem umístil za řádek kde datasource datagridviewu napojuji na datatable a zformátovalo se to přesně jak jsem potřeboval.

Děkuji:)

nahlásit spamnahlásit spam 1 / 1 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