Avatar
joon5
Člen
Avatar
joon5:

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 joon5
Michal Štěpánek:

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
joon5
Člen
Avatar
joon5:

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 joon5
Honza:

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
joon5
Člen
Avatar
Odpovídá na Honza
joon5:

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.