16

从数据集绑定组合框后,我必须在顶部插入“选择”。我试过了,但它不起作用。抛出错误“数据集没有任何强制转换定义”。我认为我没有正确使用它。评论代码是我尝试过但不起作用的部分。

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

3 回答 3

26

您必须插入到要绑定数据的对象而不是组合框。您不能直接插入组合框。

你可以使用这个:

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;

这是一个非常直接的例子。

于 2012-07-07T13:16:50.533 回答
8

ComboBox将项目绑定到数据源后,您无法将项目添加到其中。要从ComboBox绑定数据源中添加或删除项目,您必须通过数据源本身来完成。

您可以将 a 插入DataRow到您的表格中,它将自动添加到您的ComboBox. 尝试以下操作:

 DataRow dr = dsCat.Tables[0].NewRow();
 dr["CategoryName"] = "Select";
 dr["ID"] = 123;// Some ID
 dsCat.Tables[0].Rows.Add(dr);
于 2012-07-07T12:21:45.193 回答
0
// cmbCategory.DataSource =(new object[] { "Select" }).Concat(this.liveReportingDalc.GetCategoriesByType(CategoryType.RegistrationType).Cast<object>()); 

您也许可以做到这一点,但是您的语法在某种程度上是错误的。

也许您可以将其拆分直到弄清楚,然后将其压缩回内联函数。

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

但要使其发挥作用,您需要巩固对从GetCategoriesByType函数返回的数据的理解。对象会是像“选择”这样的文本吗?

于 2012-07-07T14:13:06.543 回答