Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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: ComboBox miznutie vyberu

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

Aktivity
Avatar
Patrik Živčák:14.1.2019 16:15

Mizne mi vyber v comboboxe pričom tie možnosti tam asi aj su lebo su tam 3 položky ako aj maju byť ale nevidno ich. Robim s 2 comboboxami pričom obsah druheho je zavisli na volbe toho prveho. Niektore su pritom vyselectovane s DB a niektore su pridané ručne.

Zkusil jsem: comboBox2.Item­sSource = null;

Resp. som použil:
Dictionary<string, object> Items = new Dictionary<string, object>();
comboBox2.Item­sSource = null;
Items.Add("1", "2019 - 2015");
Items.Add("2", "2014 - 2010");
Items.Add("3", "2010 a menej");

comboBox2.Item­sSource = Items;
comboBox2.Selec­tedValuePath = "Key";
comboBox2.Dis­playMemberPath = "Value";
A ide to problém je pri prepnutí na predošle možnosti to ten druhy combobox je zas "prázdny"

Chci docílit: Aby to šlo pri opakovanom zvolení, ktorejkolvek možnosti bez toho aby sa druhy combobox javil ako prazdny.

Cely kod: https://www.itnetwork.cz/…lighter/1140

Editováno 14.1.2019 16:16
 
Odpovědět
14.1.2019 16:15
Avatar

Člen
Avatar
:17.1.2019 10:03

Dovolím si odhadnout zcela bez prostudování detailů, jen na základě osobní zkušenosti, že problém je v tom, že máte Items jako slovník typu řetězec , objekt. Objekt ve výchozím "stringovém" podání neukáže ze sebe nic. Dejte dictionary typu string, string, anebo musíte použít na object.ToString konverzi.

 
Nahoru Odpovědět
17.1.2019 10:03
Avatar

Člen
Avatar
:17.1.2019 11:59

No tak jsem kecal :). Dobrá zkusím druhý tip. Datacontext, tam hledejte. Při vypisování položek z Item slovníku může být ještě nastaven na ouplně něco jinýho, a není nulován?
Obecně bych doporučoval používat jen jednu kolekci napevno a tu plnit daty dle potřeby (nejlépe observable). Tohle přepínání mezi různými políčky různých sad dat, zdrojů a pod. není moc dobré.

Zkuste si taky stáhnout utilitku Snoop, co umí zobrazovat v reálném čase obsah čehokoliv v celé Vaší WPF aplikaci (Visual Studio to umí už taky -> Live Visual Tree -> Live Property Explorer). A koukněte co tam vlastně máme v tu chvíli, kdy Vám to zmizí, za data.

Chybí mi tu, jak to máte v XAML.

Editováno 17.1.2019 12:00
 
Nahoru Odpovědět
17.1.2019 11:59
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18.1.2019 8:24

Se asp c# nepracuji, ale co treba uvozovky kolem stringu?

comboBox.SelectedValue == rokVydania
comboBox.SelectedValue == "rokVydania"

Pripadne zrovna si tam dej do toho ifu, ze se ma vypsat do nejakeho textboxu nebo logu, ze jsi uvnitr ifu

if (comboBox.SelectedValue == rokVydania)
            {
echo "comboBox.SelectedValue == rokVydania == TRUE"; // v php
            }
Editováno 18.1.2019 8:26
 
Nahoru Odpovědět
18.1.2019 8:24
Avatar
Odpovídá na Peter Mlich
Michal Štěpánek:18.1.2019 9:22

Tady bych řekl, že ty uvozovky být nemají, podle mě by to měla být proměnná. Nicméně v tom kódu jsem nikde nenašel její deklaraci, či hodnotu...

Nahoru Odpovědět
18.1.2019 9:22
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Patrik Živčák:18.1.2019 12:00

tu je xaml: tu

 
Nahoru Odpovědět
18.1.2019 12:00
Avatar

Člen
Avatar
:18.1.2019 13:02

...zase od boku, jen jsem mrknul na to XAML. A je jisté, že <ComboBoxItem x:Name="rokVydania" Content="Roku vydania"/> funguje v kódu comboBox.Selec­tedValue == rokVydania ? rokVydania jako ComboBoxItem nemusí vracet Content ale úplně něco jinýho, nebo to máte odzkoušené? Nemělo by bejt spíš comboBox.Selec­tedValue == rokVydania.Name ? Defaultně totiž asi vrací .Content.

 
Nahoru Odpovědět
18.1.2019 13:02
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18.1.2019 13:21

Michal Štěpánek - presne, nenasel jsem definici.
V JS bych to napsal

sel1   = form['ComboBox']; // (xaml) ComboBox x:Name="comboBox"
value1 = sel1.options[sel1.selectedIndex]
if (value1=='rokVydania') {...} // (xaml)   <ComboBoxItem x:Name="rokVydania" Content="Roku vydania"/>

Cili, podle xamlu jsem to asi tipnul spravne, "rokVydania" je value optionu. Ale ASP fakt nedelam :)
Jakoze, on chce, kdyz v selectu1 zvolu hodnotu, aby se prepsaly hodnoty ve druhem selectu. Takze, logicky bych porovnaval value prvniho.

Editováno 18.1.2019 13:23
 
Nahoru Odpovědět
18.1.2019 13:21
Avatar
Patrik Živčák:18.1.2019 13:49

comboBox.Selec­tedValue == rokVydania bez problemu funguje

 
Nahoru Odpovědět
18.1.2019 13:49
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Patrik Živčák
Peter Mlich:18.1.2019 15:59

Funguje jako, ze kdyz dovnitr podminky dal print nebo logovani nebo aby se neco zobrazilo na obrazovku?
Nebo funguje, jakoze to prekladac zkousl? Pro prekladac je to samozrejme ok. prom1==prom2. Ale, podle mne, by to melo delat neco jineho, nez chces ty.
Muzu se mylit, rikam, s asp nedelam. Jenom mi to prijde divne, z celeho toho kodu :) Ten zbytek, uvnitr ifu vypada funkcne.

Editováno 18.1.2019 16:00
 
Nahoru Odpovědět
18.1.2019 15:59
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18.1.2019 16:03

Trochu jsem googloval a tam pouzivaji toto

List<ComboData> ListData = new List<ComboData>();
ListData.Add(new ComboData { Id = "1", Value = "One" });
ListData.Add(new ComboData { Id = "2", Value = "Two" });
ListData.Add(new ComboData { Id = "3", Value = "Three" });
ListData.Add(new ComboData { Id = "4", Value = "Four" });
ListData.Add(new ComboData { Id = "5", Value = "Five" });

cbotest.ItemsSource = ListData;
cbotest.DisplayMemberPath = "Value";
cbotest.SelectedValuePath = "Id";
 
Nahoru Odpovědět
18.1.2019 16:03
Avatar
Patrik Živčák:19.1.2019 12:23

dik už je to jedno ja programatorom asi nikdy nebudem to sa proste neda naučiť

Editováno 19.1.2019 12:23
 
Nahoru Odpovědět
19.1.2019 12:23
Avatar
Odpovídá na Patrik Živčák
Michal Štěpánek:20.1.2019 9:50

Nebuď pesimista. Nemusíš být profesionálním programátorem, ale programovat se naučit můžeš. Stačí mít nějakou motivaci. Vymysli si nějaký prográmek, který by ti mohl být k něčemu užitečný a pak to programování, resp. učení půjde mnohem lépe...

Nahoru Odpovědět
20.1.2019 9:50
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
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.