Listbox i obiekty

JU
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:149
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ę:

Kopiuj
        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:

Kopiuj
        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:

Kopiuj
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

edytowany 1x, ostatnio: juniorchat
Azarien
„niewybrano”? „defaultowej”?
JU
Nie, ponieważ nie spełnia ona wymagań.
Azarien
"Nie_wybrano" i "domyślnej".
MI
  • Rejestracja:ponad 15 lat
  • Ostatnio:prawie 9 lat
0

Spróbuj zamiast tego

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

dać to

Kopiuj
textBox3.Text=((cbItem)listBox1.SelectedItem).getValue();
edytowany 1x, ostatnio: misiakufal
JU
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 6 lat
  • Postów:149
0

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

Kopiuj
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?

ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:3 dni
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.


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.