简体   繁体   中英

insert item in combobox after binding it from a Dataset in c#

I have to insert "Select" at top after combobox is bound from dataset.i tried this but it isn't working.Throws error "dataset doesn't have any definition for cast".I think i am not using it properly.Commented code is the part i tried but not working.

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>()); 

You have to Insert to the object you are databinding to rather than to the combobox. You can't insert directly into the combobox.

You can use this:

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;

This is very straight forward example.

You cannot add items to a ComboBox after binding it to a data source. To add or remove items from a ComboBox with a bound data source, you have to do it through data source itself.

You can insert a DataRow into your table and it will be automatically added to your ComboBox . Try the following:

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

You might be able to do this, but your syntax is wrong somehow.

Maybe you can split it up until you figure it out and then compress it back into in-line functions.

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]); }

But for this to work you need to consolidate your understanding of the data coming back from the GetCategoriesByType function. Will the objects be text like "Select"?.

You can use dsCat.Rows.Add method.

dsCat.Rows.Add(0, "Other"); // this will add row
cmbCategory.DataSource = dsCat.Tables[0];
cmbCategory.DisplayMember = "CategoryName";
cmbCategory.ValueMember = "ID";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM