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には、データ ソース自体を介して行う必要があります。

をテーブルに挿入する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 に答える