Prochazeni polzek v CHECKEDLISTBOX - zacatecnik   zodpovězená otázka

VB.NET, Komponenty, WinForms

Asi to bude pro vas kravina, ale hraju si s tim uz hodinu a nic

Mam CHECKEDLISTBOX ve kterem mam napr. takove plozky

I./07

II./07

III./07

IV./07

07 = rok, I - IV - ctvrtleti v danem roce, takhle tam jsou data uz od roku 2000. A jelikoz uzivatel muze chtit vybrat napriklad je I. etapy chtel jsem dolu pod CHECKEDLISTBOX pridat CheckBox s textem "Vyber vsechny I. etapy" - to jsem taky udelal.

Vyhledani polozky delam pres LIKE text LIKE "I./*"

No, ale neprisel jsem jak ziskat text jednotlivych polozek v CHEKEDLISTBOXU, umim to jen s oznacenymi plozkami :-(

Diky

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

"takhle tam jsou data uz od roku 2000" - kde jsou ta data?

volil bych CheckedListBox1.Items(i), kde i je číslo položky

Nevím o funkci nějakého filtru, asi musíte projít všechny položky třeba s

For i as Integer = 0 to CheckedListBox1.Items.Count - 1

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nejradsi bych se propad do zeme ..... Diky

Jsem si skoro jisty ze jsem to zkousel, ale ja to vzdycky skousel uz rovnou s LIKE a tady mi to opet nechce porovnavat, nevite proc?

Mam formular s jednim CHECKEDLISTBOXem a jednim CHECBOXem a tady ty udalosti

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

With Me.CheckedListBox1

.Items.Add("I/05")

.Items.Add("II/05")

.Items.Add("III/05")

.Items.Add("IV/05")

.Items.Add("I/06")

.Items.Add("II/06")

.Items.Add("III/06")

.Items.Add("IV/06")

.Items.Add("I/07")

.Items.Add("II/07")

.Items.Add("III/07")

.Items.Add("IV/07")

End With

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

With CheckedListBox1

For i As Integer = 0 To .Items.Count - 1

MsgBox(.Items(i))

If .Items(i).ToString Like "I./*" Then

MsgBox(.Items(i))

End If

Next

End With

End Sub

Ten kod pro CHECKBOX by mel vybrat vsechny "jednickove" etapy (I./05, I./06, I./07) ale LIKE to nevyhodnoti jako True ale jako False, i kdyz mi MsgBox pred tim porovnanim vrati text "I./05"

Kdyz to napisu do okna Immediate (? "I./05" LIKE "I./*") tak to vyhodnoti spravne, z cehoz usuzuji, ze mam nejaky spatny datovy typ, ale nepomohla ani funkce CStr. Tak nevim :-(

Diky

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

Nevím, jestli jste to špatně opsal nebo zkopíroval, ale při přidávání do seznamu nemáte za římskou číslicí tečky a při porovnávání tam tečku máte. Proto Vám to možná nejde.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

No ja jsem ale debil ....

Jasne ze je to ono

At je mi omluvou ze uz delam od 7 hod rana a uz nic nevidim.

Jasne znameni, odchazim spat.

Diky moc

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

Tak jsem tu jeste jednou :-(

Ty vase prikaldy jsem zkousel na novem projektu (abych nezasahoval do povodniho), tam to slape, ok, ale

ja data nacitam z databaze a pak to do CHECKEDLISTBOXu vkladam pomoci tohoto kodu

With Me.CheckedListBox1

.DataSource = DSTable.Tables("CODE_Etapy") 'data ztabulky+

.DisplayMember = "ETAPA"

.ValueMember = "ETAPA_Kod"

End With

a pak kdyz prochazim polozky tak mi to na radku

If .Items(i) Like "I./*" Then

nahlasi chybu

System.InvalidCastException was unhandled

Message="Operator 'Like' is not defined for type 'DataRowView' and string "I./*"."

Pokud pouziju naplneni pres Items.Add tak to slape jak ma

Poradite?

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

Záleží, jakými hodnotami seznam plníte. Pokud jej plníte ručně přes Items.Add, jako hodnotu předáváte String. Pokud jej ale plníte z databáze a volíte DisplayMember a ValueMember, do kolekce Items se neukládá jen text té položky, ale objekt z databáze DataRowView. Za něj tedy musíte do závorky zadat název sloupce, který požadujete.

Mělo by fungovat toto:

If .Items(i)("ETAPA") Like "I./*" Then ...
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Omlouvam se vcera jsem byl pryc.

Kde vy na to chodite? tohle by me nenapadlo, funguje to perfektne.

Diky moc

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

To je zkušenostmi. Programuji prakticky od rána do večera a vím, jak která komponenta funguje uvnitř. Mimochodem, když se podíváte do Object Browseru (Ctrl-Alt-J) a najdete si tam System.Windows.Forms.CheckedListBox a podíváte se na kolekci Items, zjistíte, že je to kolekce typu Object. Kdyby se do ní mohly ukládat pouze texty, byla by typu String. Ale protože je typu Object, kam můžeme uložit cokoliv, znamená to, že v ní někdy budou nějaké objekty. A když se podívám na chybovou hlášku, kterou jste sem zkopíroval, vidím, že jde o objekt DataRowView. A protože ho znám (a kdyby ne, mám opět object browser), tak vím, že má vlastnost Items, které předám název sloupce a vrátí mi jeho hodnotu.

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