web-dev-qa-db-fra.com

insérer un élément dans la zone de liste déroulante après l'avoir lié à partir d'un ensemble de données en c #

Je dois insérer "Sélectionner" en haut après que la zone de liste déroulante est liée à l'ensemble de données.J'ai essayé ceci mais cela ne fonctionne pas.Erreurs d'erreur "L'ensemble de données n'a pas de définition pour le casting". Je pense que je Je ne l'utilise pas correctement.Le code commenté est la partie que j'ai essayée mais qui ne fonctionne pas.

cmbCategory.DataSource = dsCat.Tables[0];
cmbCategory.DisplayMember = "CategoryName";
cmbCategory.ValueMember = "ID";
// cmbCategory.Items.Add("Select");
// cmbCategory.SelectedText = "Select";
// cmbCategory.DataSource =(new object[] { "Select" }).Concat(this.liveReportingDalc.GetCategoriesByType(CategoryType.RegistrationType).Cast<object>()); 
16
vatsal

Vous devez insérer dans l'objet vers lequel vous effectuez la liaison de données plutôt que dans la zone de liste déroulante. Vous ne pouvez pas insérer directement dans la zone de liste déroulante.

Vous pouvez utiliser ceci:

DataTable dt = new DataTable();

dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("CategoryName");

DataRow dr = dt.NewRow();
dr["CategoryName"] = "Select";
dr["ID"] = 0;

dt.Rows.InsertAt(dr, 0);

cmbCategory.DisplayMember = "CategoryName";
cmbCategory.ValueMember = "ID";
cmbCategory.DataSource = dt;
cmbCategory.SelectedIndex = 0;

Ceci est un exemple très simple.

26
Vishal Suthar

Vous ne pouvez pas ajouter d'éléments à un ComboBox après l'avoir lié à une source de données. Pour ajouter ou supprimer des éléments d'un ComboBox avec une source de données liée, vous devez le faire via la source de données elle-même.

Vous pouvez insérer un DataRow dans votre table et il sera automatiquement ajouté à votre ComboBox. Essayez ce qui suit:

 DataRow dr = dsCat.Tables[0].NewRow();
 dr["CategoryName"] = "Select";
 dr["ID"] = 123;// Some ID
 dsCat.Tables[0].Rows.Add(dr);
7
Asif Mushtaq
// cmbCategory.DataSource =(new object[] { "Select" }).Concat(this.liveReportingDalc.GetCategoriesByType(CategoryType.RegistrationType).Cast<object>()); 

Vous pourrez peut-être le faire, mais votre syntaxe est incorrecte d'une manière ou d'une autre.

Vous pouvez peut-être le diviser jusqu'à ce que vous le compreniez, puis le compresser à nouveau en fonctions en ligne.

List <object> catData = new List <object> { "Select" };

DataSet catByType = this.liveReportingDalc.GetCategoriesByType(CategoryType.RegistrationType);

foreach(DataRow oRow in catByType.Tables[0].Rows)
{ catData.Add(oRow.ItemArray[0]); }

Mais pour que cela fonctionne, vous devez consolider votre compréhension des données provenant de la fonction GetCategoriesByType. Les objets seront-ils du texte comme "Sélectionner"?.

0
Andyz Smith