IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: c# , nahradenie bool hodnoty v stlpci (tabulka +DGW)

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Filip
Člen
Avatar
Filip:23.3.2015 11:27

Mam nacitanu tabulku z databazy asi takto:

...
vysledky = new DataTable();
adapter.Fill(vysledky);
...
dataGridView1.DataSource = vysledky

V tabulke mam stlpec "pohlavie", ktory je typu bool, tzn. ak true="muz" , ak false="zena". Tuto tabulku chcem zobrazit v dataGridView, ale tak aby v danom stlpci(pohlavie) bolo napisane ci zena, alebo muz. Ako to elegantne vyriesit? Napada ma jediny sposob, ze tabulku este pred zobrazenim prejst nejakym cyklom a hodnoty nahradit. Ak v tabulke bude povedzme 5000 zaznamov, neviem ci je optimalne riesenie. Dakujem.

 
Odpovědět
23.3.2015 11:27
Avatar
Odpovídá na Filip
Michal Štěpánek:23.3.2015 11:52

Ve formuláři přeci upravuješ, které sloupce toho DGV se mají zobrazit a které ne, jaký mají mít formát, šířku, apod. tak tam by se toto mělo dát ošetřit...

Nahoru Odpovědět
23.3.2015 11:52
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Filip
Člen
Avatar
Filip:23.3.2015 16:34

Ano, ale to co ja potrebujem, to tam nastavit neviem.

 
Nahoru Odpovědět
23.3.2015 16:34
Avatar
Honza
Člen
Avatar
Odpovídá na Filip
Honza:24.3.2015 12:18

Ahoj na stack overflow (http://stackoverflow.com/…es-no-string) se mi podařilo najít formátování pomocí formátu stringu:

var truth   = string.Format("{0:on;0;OFF}", true.GetHashCode());
var unTruth = string.Format("{0:on;0;OFF}", false.GetHashCode());

bude to vracet:

truth   = on
unTruth = OFF

Takže když si to přepíšeš na Muž/Žena mělo by to fungovat. Snad by to mělo jít nastavit i jako formát sloupce datagridview (pokud ho používáš).

Další možností která už není tak pěkná je vytvořit si v tabulce ještě stringový sloupec a po načtení dat projet tabulky cyklem a podle bool hodnoty doplnit stringový popisek, to ale není moc pěkné.

A do třetice pokud tyto data pouze zobrazuješ a nepotřebuješ pracovat přímo s tou bool hodnotou, můžeš upravit SQL dotaz který ti načítá data z databáze aby ti vracel přímo požadovaný text (navím jakou db používáš, u SQL serveru to jde celkem pěkně řešit např. pomocí case when).

Druhý a třetí způsob ale narážejí na omezení že když tu bool hodnotu změníš až po načtení dat, musíš znovu spustit cykl který ti doplní správný popisek podle aktuální hodnoty (minimálně musíš přepočítat řádek kde došlo ke změně).

Nahoru Odpovědět
24.3.2015 12:18
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Filip
Člen
Avatar
Odpovídá na Honza
Filip:16.4.2015 13:11

Diky, ale nasiel som asi lepsie riesenie, vyriesil som to pomocou eventu CellFormatting:

private void osobyDGV_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
           var grid = (DataGridView)sender;
           if (grid.Columns[e.ColumnIndex].Name == "Pohlavie" && e.Value != DBNull.Value)
            {

                e.Value = (bool)e.Value ? "Muz" : "Zena";
                e.FormattingApplied = true;
            }
        }
 
Nahoru Odpovědět
16.4.2015 13:11
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 5 zpráv z 5.