Spravna praca s combo (GridLookUpEdit ...)   otázka

VB.NET, WinForms

Zdravim.

Neviem ako spravne vyriesit tento problem.

Mam componentu typu combo, ja pouzivam GridLookUpEdit, nebranim sa pouzit aj ine ak bude vyhovovat zadaniu.

V databaze mam zoznam pracovnikov, kt. niektori uz nepracuju vo firme, to znamena su uz neplatni.

Tuto tabulku z pracovnikmi mam napojenu na combo (GridLookUpEdit).

Potrebujem aby :

1. pri otvoreni formulara, na kt. je combo sa v combe zobrazilo aj toho pracovnika, kt. uz je neplatny (ak bol pred tym navoleny)

2. nedovolilo uzivatela kt. je neplatny vybrat zo zoznamu - ziadnym sposobom !!! vysvetlim nizsie

3. po vybere uzivatela previedlo akciu - even validated , alebo EditValueChaged?

Moje riesienie:

1. Nalinkujem datasource na tabulku

2. pri otvoreni zoznamu sa spusti event PopupMenuShowing, kde zapnem filter aby nezobrazovalo neplatnich pracovnikov

3. do eventu Validated vlozim kod, kt. sa spusti po prejdeni na ine pole

Problemom toho riesenia je ze ak uzivatel pride na combo a priamo zadava cez klavesnicu meno pracovnika, cize nedojde k zadaniu filtra, tak dokaze zadat aj uzivatela, kt. je neplatny.

Uzivatelia maju tendenciu neotvarat zoznam ale priamo pisat uzivatela.

Ak do comba vlozim priamo uz odfiltrovany zoznam, kt. neobsahuje neplatnych uzivatelov tak pri zobrazeni stareho zaznamu, kde bol zadany stary uzivatel sa mi nezobrazi.

Ako by sa toto malo korektne riesit? Predpokladam, ze toto sa pouziva velmi casto.

Dakujem.

Karol

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

Combobox lze nastavit, zda má být dropdown či dropdownlist, pak musí být hodnota vybrána z listu.

Pokud je styl dropdown, tak lze zachytit změnu textu v editační části a patříčně reagovat nebo zkusit nastavit autocomplete, aby se text doplňoval ze zdroje resp. listitems comboboxu.

Ohledně platných a neplatných jmen z listu bude třeba pracovat s původní nezměněnou hodnotou záznamu, pokud se jedná o DataRow, tak je k dispozici Current a Proposed verze, tak lze porovnat provedenou změnu, kontrolovat platnou a neplatnou hodnotu jména.

Když je třeba v comboboxu zobrazit i původní nyní již neplatnou hodnotu, lze podědit combobox a implementovat editingcontrol, nastavit vlastní DrawMode a v události DrawItem ji vykreslit pomocí jako disabled pomocí gray text barvy, ale to není asi pěkné řešení.

Pokud hodnota v listu povolených hodnot nebude vůbec, tak je třeba zajistit, aby buňka zůstala beze změny s původní hodnotou, i když není v comboboxu. Celkově to není standardní záležitost a vypadá to na potřebu vlastního ovládacího prvku pro editaci buňky, který skrze události editingcontrolu uspokojí požadovanou funkčnost. Chápu=li správně, tak chcete docílit, aby výběr pro hodnotu buňky obsahoval původní ač již neplatnou hodnotu nebo jednu z aktuálně platných hodnot.

Myslím, že událost datagridview Validating se spustí před Validated, kde je možné provést kontrolu záznamu, případně vynutit opravu hodnot nebo neplatné zadání zrušit.

Tip na starý příspěvek s vytvořením vlastního editingcontrolu pro datagridview :

https://www.dotnetportal.cz/forum/tema/2...

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