web-dev-qa-db-fra.com

Comment définir la valeur par défaut de la combobox?

Sous windows form, il a un ComboBox, qui contient des données liées par le DataSource.

Lorsque vous définissez la propriété text pour un composant ComboBox. 

ComboBox sélectionné -> Propriété -> Texte: "--Sélectionner--".

La page de conception montre le texte donné. Mais lors de l'exécution de l'application, le texte donné a disparu et la valeur d'index initiale d'un élément comboBox est apparue, à partir de la source de données.

Donc, j'ai donné le texte ComboBox dans le chargement du formulaire. Je veux dire dans le constructeur

public myform()
{
     InitializeComponent();
     ComboBox.Text="--Select--";
}

lien révisé et plus. Mais ..

Définition de l'élément par défaut dans la liste déroulante

https://msdn.Microsoft.com/en-us/library/system.windows.forms.combobox.text(v=vs.110).aspx

Le lot de questions recherché dans SO dépend de ComboBox. Mais ceux-ci ne résolvent jamais mon cas

Édité

 enter image description here

Dans cette liste déroulante, cliquez sur le coin supérieur droit. À partir de là, j'ai choisi les données de ma liste déroulante à l'aide de Datasouce. Je n'ai écrit aucun code pour ajouter des éléments dans la liste déroulante.

6
User6667769

Vous pouvez faire quelque chose comme ça:

    public myform()
    {
         InitializeComponent(); // this will be called in ComboBox ComboBox = new System.Windows.Forms.ComboBox();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'myDataSet.someTable' table. You can move, or remove it, as needed.
        this.myTableAdapter.Fill(this.myDataSet.someTable);
        comboBox1.SelectedItem = null;
        comboBox1.SelectedText = "--select--";           
    }
7
Vandita

Supposons que vous ayez lié votre liste déroulante à un List<Person>

List<Person> pp = new List<Person>();
pp.Add(new Person() {id = 1, name="Steve"});
pp.Add(new Person() {id = 2, name="Mark"});
pp.Add(new Person() {id = 3, name="Charles"});

cbo1.DisplayMember = "name";
cbo1.ValueMember = "id";
cbo1.DataSource = pp;

À ce stade, vous ne pouvez pas définir la propriété Text comme vous le souhaitez, mais vous devez plutôt ajouter un élément à votre liste avant de définir la source de données. 

pp.Insert(0, new Person() {id=-1, name="--SELECT--"});
cbo1.DisplayMember = "name";
cbo1.ValueMember = "id";
cbo1.DataSource = pp;
cbo1.SelectedIndex = 0;

Bien sûr, cela signifie que vous devez ajouter un code de vérification lorsque vous essayez d'utiliser les informations de la liste déroulante.

if(cbo1.SelectedValue != null && Convert.ToInt32(cbo1.SelectedValue) == -1)
    MessageBox.Show("Please select a person name");
else
    ...... 

Le code est le même si vous utilisez un DataTable au lieu d'une liste. Vous devez ajouter une fausse ligne à la première position de la collection Rows du datatable et définir l'index initial de la liste déroulante pour que tout soit clair. La seule chose que vous devez regarder est le nom des colonnes pouvant être datées et les colonnes qui devraient contenir une valeur non nulle avant d'ajouter la ligne à la collection.

Dans une table à trois colonnes comme ID, Prénom, Nom avec ID, Prénom et Nom requis, vous devez

DataRow row = datatable.NewRow();
row["ID"] = -1;
row["FirstName"] = "--Select--";    
row["LastName"] = "FakeAddress";
dataTable.Rows.InsertAt(row, 0);
2
Steve