2016-10-31 1 views
0

は、私はコンボボックス(selectLaborCat)を作成したいと思っていますロードコンボボックスセット - 私のアプリケーションで

public class LaborCategory 
{ 
    public int Id { get; set; } 

    [MaxLength(10)] 
    public string Code { get; set; } 

    [MaxLength(50)] 
    public string Name { get; set; } 
    public decimal Rate { get; set; } 
    public decimal OnSite { get; set; } 
    public decimal OffSite { get; set; } 
} 

モデルを持っている「DataSourceプロパティが設定されている場合、Itemsコレクションを変更することはできません」最初のオプションを持っています「Add New Labor Category」(これはインデックス0になります)、次にリストの残りの部分(selectLaborCat.Value = dataSet.IdとselectLaborCat.Text = dataSet.Code)

私はそれに参加していると思う使用して修正する

 var categories = _context.LaborCategories.OrderBy(c => c.Code).ToArray(); 

     selectLaborCat.DisplayMember = "Code"; 
     selectLaborCat.ValueMember = "Id"; 

     selectLaborCat.DataSource = categories; 

これは私が期待するようにこれをコンボボックスに描画します。 DataSourceプロパティが

に設定されている場合

しかし、私は、私はアイテムの収集を行うことができないと言ってselectLaborCat.Items.Insert(0, "Add New Labor Category");それ誤りを試してみる場合は、変更することはできませんどのように私は、インデックス0としての「新労働党カテゴリを追加」で入手できますか?私は、データセットのレコードとして "Add New Category"を追加しようとしましたが、データセットをどのようにソートするかにかかわらず、常にcomboBoxのインデックス0にします。

データセットをリストとして取得し、新しいリストを作成し、デフォルトの「Add New Category」を最初の要素として追加し、データセットリストを新しいリストにコピーし、そのようなコンボボックスをバインドします。

 var categories = _context.LaborCategories.OrderBy(c => c.Code).ToList(); 
     var comboBoxElements = new List<LaborCategory>(); 

     var laborCategory = new LaborCategory(); 
     laborCategory.Id = 0; 
     laborCategory.Code = "Add New Labor Category"; 
     comboBoxElements.Add(laborCategory); 


     foreach (var category in categories) 
     { 
      comboBoxElements.Add(category); 
     } 

     selectLaborCat.DisplayMember = "Code"; 
     selectLaborCat.ValueMember = "Id"; 

     selectLaborCat.DataSource = comboBoxElements; 

またはそれ以上の方法がありますか?

+0

'comboBoxElements.Add(新しいLaborCategory {ID = 0、コード=「新労働党カテゴリを追加」});' –

+0

を使用すると、最初の項目の挿入など、コードや表示順リストを維持したい場合他のコードよりもアルファベット順に低いプロンプトを追加しようとするとよいでしょう。たとえば、_(新規を追加...)_ – Steve

+0

アイテムを追加するには、 'ComboBox'の近くにあるボタンを使用します。 –

答えて

0

リストボックスに.DataSourceを追加すると、datasourceComboBoxに設定した後、挿入/削除例外をスローするとListBox.Itemsコレクションを変更できなくなります。回避策は、DataSourceの代わりにListBoxに直接アイテムを追加することができます。その後、それらを直接操作することができます。

DataSourceを設定したい場合は、データソースを準備し、別のオプションをBindingListにすることができます。

Futhermore、あなたはするBindingListオブジェクトを使用することができます。

  • データはそのするBindingListオブジェクトへ

  • リストボックスのデータソースを追加します。あなたの

  • リスト項目をバインドして、あなたの最初の項目を使用してするBindingListを作成します。リストボックスからではなく、BindingListから アイテムを削除します。

参考:Microsoft Link

関連する問題