[ Sandra_G @ 07.09.2005. 09:59 ] @
Cao!

Imam sledeci problem: kada ComboBox kontroli dodam DataSource property kao neki DataTable, pa DataMember kao kolonu te tabele, u drop-down listi mi se pojave vrednosti koje su u toj koloni. Tako i treba. Medjutim, nemam neku nazovi pocetnu vrednost - u smislu da hocu da mi se kao prva vrednost pojavi nesto tipa "izaberite nesto..." ili prazan string ili slicno. Odmah mi se u kontroli pojavi prva vrednost u tabeli, a ja to necu. Hocu da korisnik sam izabere tacno sta hoce iz tog comboBox-a, a ako nista ne izabere, onda nemam tu vrednost (tj. imam ili string "izaberite...", ili prazan string, ili ... whatever).

Kako da to uradim???

Thanx :)

[ dusans @ 07.09.2005. 13:50 ] @
Pre punjenja tabele podacima dodaj u tabelu red sa vrednošću "Izaberite nešto..." u koloni koja ti je DataMember.
[ Sandra_G @ 07.09.2005. 14:46 ] @
Da, to mi je palo na pamet, ali zasto bih to radila? Ja taj DataTable koristim i za druge stvari i potreban mi je u originalu (npr. punim DataGrid). Zamisli da ti u dataGrid-u stoji red sa tekstom "izaberite nesto"...
Problem sam "resila" tako sto sam podatke iz tabele prebacila u listu i dodala taj red. Ali to je presipanje iz supljeg u prazno. Mislila sam da postoji neka fora, tj. neki property koji sam "preskocila", a treba da se enable-uje ili slicno... Bas je bezveze ako to ne moze da se uradi, vec samo dodatnim "budzenjem".
Doduse, mozda je to tako...
[ gavra20 @ 07.09.2005. 17:57 ] @
Mozda da probas:
Combo box -> Properties -> Appearance -> Text
i tu uneses "izaberite nesto"
[ ZokiR @ 08.09.2005. 02:56 ] @
To što tražiš može da se postigne ovako:

Code:

myComboBox.SelectedIndex = -1;
myComboBox.Text = "Izaberi nešto";


Navedeni kod treba pozvati posle podešavanja DataSource/DisplayValue vrednosti.

Naravno, ako ti često treba ComboBox sa ovakvim ponašanjem, možeš da izvedeš svoju kontrolu iz bazičnog ComboBox-a:

Code:

public class InitiallyBlankComboBox : ComboBox
{
    private string initialValue = string.Empty;

    public string InitialValue
    {
        get 
        { 
            return this.initialValue; 
        }
        set 
        { 
            this.initialValue = value; 
            this.SelectedIndex = -1;
            this.Text = this.initialValue;
        }
    }

    protected override void OnDisplayMemberChanged(EventArgs e)
    {
        base.OnDisplayMemberChanged (e);
        this.SelectedIndex = -1;
        this.Text = this.initialValue;
    }
}


I onda ga koristiš tako što podesiš InitialValue na neophodnu vrednost, npr. "Izaberi nešto..."
[ Sandra_G @ 08.09.2005. 14:03 ] @
E, super, ovo resava problem. Sjajno, hvala! Ko bi se setio da uzme indeks -1 i da postavi Text property... :)
[ majstor01 @ 23.09.2005. 00:11 ] @
Ima jos jedno jednostavnije resenje. Posto bindujes combobox, dodaj sledecu liniju koda koja insetuje prazno polje na pocetku combobox, (takodje umesto praznog teksta mozes da stavis npr [izaberite vrednost].

ComboBox1.Items.Insert(0,new ListItem(null,null));