Listbox i obiekty

0

A więc chcę stworzyć pseudo comboboxa...
a więc utworzyłem:

  • TextBox3
  • ListBox1
    Jego zadanie to już w trakcie wpisywania pobierać dane z bazy i pokazywać najbardziej prawdopodobne 10 dokumentów
    Dokumenty zazwyczaj mają nazwę, np: ZK 2131/11/2013
    TEXTBOX z wpisanym "31"

ZK 2131/11/2013 - Klient 1
ZK 2131/11/2012 - Klient 2
ZK 1131/11/2013 - Klient 1
ZK 131/11/2013 - Klient 3
I teraz po wybraniu w textboxie ma się pojawiać tylko: "ZK 2131/11/2013" (bez nazwy klienta), ok więc utworzyłem sobie klasę:

        public class cbItem
        {
            public string Text { get; set; } //ID
            public string Value { get; set; } //PELNY
            public string Klient { get; set; } //Klient
            public cbItem()
            { 
                
            }
            public cbItem(string nValue, string nKlient)
            {
                //Text = nText;
                Value = nValue;
                Klient = nKlient;
            }
            public override string ToString()
            {
                StringBuilder sbi = new StringBuilder();
                sbi.AppendFormat("{0} - {1}",Value,Klient);
                return sbi.ToString();
            }
            public string ReturnText()
            {
                return Text;
            }
            public string ReturnValue()
            {
                return Value;
            }
            public string ReturnKlient()
            {
                return Klient;
            }
        }

a tu funkcja, która wywoływana jest przez klikniecie, na wybrany dokument w listboxie:

        private void wybrano_zamowienie(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex.ToString()!="-1")
            if (listBox1.SelectedItem.ToString() != "")
            {
                textBox3.Text = listBox1.SelectedItem.ToString();
                zamowienie_wyswietl(textBox3.Text);
                listBox1.Visible = false;
            }
        }

No i oczywiście, funkcja zamówienie wyświetl:

private void zamowienia_lista(int ile, string co)
        {
            //DataTable dt = new DataTable();
            //string query = "";
            StringBuilder sb = new StringBuilder();
            if (ile == 0)
            {
                sb.Append("select");
            }
            else
            { 
                sb.AppendFormat("select TOP {0}",ile.ToString());
            }
            sb.Append(" [dok_id],[dok_NrPelny],[kh_Symbol] from labe_pablo_dokument ");
            if(co !="")
            {
                sb.AppendFormat(" where [dok_NrPelny] LIKE '%{0}%'",co);
            }
            zamowienia = conn_date.polaczenie_dt(sb.ToString());
            cbItemDictionary.Clear();
            foreach (DataRow dr in zamowienia.Rows)
            {
                cbItem item = new cbItem(dr["dok_NrPelny"].ToString(), dr["kh_Symbol"].ToString());
                StringBuilder sbi = new StringBuilder();
                sbi.AppendFormat("{0}", dr["dok_Id"].ToString());
                cbItemDictionary.Add(sbi.ToString(), item);
            }
            listBox1.ValueMember = "Value";
            listBox1.DataSource = new BindingSource(cbItemDictionary,null);
        }

No i teraz pytanie, po skompilowaniu mojego strasznego kodu, w listboxie wyświetla mi się:
ab3f2093ef.png
Tu jest jeszcze w porządku, jednak, po kliknięciu na któryś dokument z listy, zamiast wpisać mi się tylko "ZK 5077/MG/2013"
A wpisało się:
fe9fce78b2.png
Proszę o pomoc dlaczego i jak to poprawić?
Z góry dziękuje i pozdrawiam

0

Spróbuj zamiast tego

textBox3.Text=listBox1.SelectedItem.ToString();

dać to

textBox3.Text=((cbItem)listBox1.SelectedItem).getValue();
0

oczywiście u mnie nie ma funkcji getValue() (ja nazwałem ReturnValue()), ale wiem o co Ci chodziło:

textBox3.Text = ((cbItem)listBox1.SelectedItem).ReturnValue();

Jednak pojawia się tu błąd:

Additional information: Nie można rzutować obiektu typu 'System.Collections.Generic.KeyValuePair`2[System.String,wydruk.zamowienie+cbItem]' na typ 'cbItem'.

Jakieś propozycje, rady?

0

Tak. Postaw breakpoint na wywalającej się linijce, odpal debugowanie (F5), wykonaj wszystko co niezbędne, żeby wykonała się ta linijka kodu. Jak kod się zatrzyma, to podejrzyj sobie (myszką albo przez Immediate Window) zawartość SelectedItem i wywnioskuj jak się dostać do siedzących tam danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1