J'utilise un System.Windows.Forms.Combobox lié à la catégorie Category comme critère de recherche. Je dois avoir une valeur "All" ou une chaîne vide qui sera sélectionnée quand l'utilisateur ne veut pas utiliser ce critère. Comme la liste déroulante est liée, chaque fois que l'on clique dessus, la valeur ajoutée par combo1.Text = "All" est effacée. Évidemment, je ne peux pas ajouter la catégorie "Tous" à la base de données. Quelle est la meilleure façon d'y parvenir?Comment ajouter une valeur vide ou personnalisée à une liste déroulante liée?
Répondre
Soit ajouter manuellement l'entrée Tous à l'ensemble de données lié après les autres valeurs ont été chargées ou UNBIND le combo et au lieu itérer les données pour le remplir . C'est juste un combo de recherche, donc vous n'avez pas vraiment besoin de tous les avantages de la liaison.
Vous devez ajouter un autre élément:
ComboBox1.Items.Insert(0,"All");
Je reçois une erreur: la collecte des éléments ne peuvent pas être modifiés lorsque le La propriété DataSource est définie. – Dan
j'avais peur que cela arriverait ..Si vous définissez vos éléments directement à partir d'un dataset vers la source de données, verrouillez la propriété Items. Une solution possible consiste à parcourir votre collection d'éléments dans votre ensemble de données et à les ajouter via Items.Insert – Konstantinos
J'ai essayé de remplir manuellement à l'aide de ComboBox1. Items.Insert (0, "All"), mais je reçois alors SelectedValue comme Nothing. Je peux lancer l'article à l'objet original mais c'est beaucoup de code pour quelque chose que simple ... – Dan
- Si vous utilisez le serveur SQL vous pouvez ajouter une valeur supplémentaire à la commande de sélection pour l'option Tous
- Ou vous pouvez ajouter toutes les options en utilisant comboBox1.Items.Insert (0, « All ») à ajouter un nouvel élément en tant qu'index. après la liaison du contrôle
Espérons que cela aidera.
Dans la deuxième option, cela signifie que je ne peux pas utiliser le concepteur pour définir des options de liaison? J'ai placé le ComboBox1.Items.Insert (0, "Tous") dans la charge de formulaire mais j'obtiens l'erreur "Collection d'éléments ne peut pas être modifiée lorsque la propriété DataSource est définie". – Dan
Je pense que vous devriez utiliser la première option, lorsque vous sélectionnez l'élément, vous pouvez y ajouter l'option tout, Ajout de nouveaux éléments est disponible dans le contrôle de la liste déroulante web. –
Je toujours "manuellement" ajouter un élément à la source de données avant la liaison de données. Cela évite d'avoir des données «artificielles» dans la requête de votre source de données, donc si vous utilisez la requête pour autre chose qu'une liste déroulante, vous obtenez uniquement des données réelles.
- Si vous ne voulez pas ajouter l'élément "All" dans votre source de données, vous pouvez effectuer les opérations suivantes:
Code Snippet
comboBox1.Text = "All";
Il définit le texte affiché dans comboBox à la valeur attribuée mais sans modifier les éléments de la zone de liste déroulante et de la source de données liée.
- Vous pouvez également ajouter "Tous" à votre source de données. Mais vous devriez le faire de cette façon:
Code Snippet
private void button1_Click(object sender, EventArgs e)
{
DataRow dataRow = dataTable.NewRow();
dataRow["ItemId"] = "All";
dataTable.Rows.InsertAt(dataRow, 0);
comboBox1.SelectedIndex = 0;
}
La façon la plus simple serait d'insérer une ligne dans votre ds.Tables [0] qui est
ds = StockDAL.BindItemId();
DataRow dataRow = ds.Tables[0].NewRow();
dataRow["ItemId"] = "All";
ds.Tables[0].Rows.InsertAt(dataRow, 0);
comboBox1.DataSource = ds.Tables[0];
comboBox1.DisplayMember = "ItemId";
comboBox1.ValueMember = "ItemId";
comboBox1.selectedIndex=0;
espérons que cela résoudre votre problème ..
vous pouvez essayer ce
ComboBox1.Items.Insert(0,"All");
lors de l'insertion de table que vous vérifiez que l'index sélectionné de la ComboBox1 -à-dire,
if(ComboBox1.SelectedIndex>0)
{
//do the insert code here
}
else
{
//dont do anything
}
ceci fonctionne bien ...
J'ai essayé peupler manuellement, employant ComboBox1.Items.Insert (0, "tout"), mais alors je reçois null SelectedValue. – Dan
C'est pourquoi j'ai dit l'ajouter à l'ensemble de données plutôt qu'à la liste déroulante. – MartW