19

データソースにバインドされたコンボボックスがあります。このコンボボックスでは、インデックス 0 に空白のフィールドを追加する必要があります。

レコードを取得するための次のコードを作成しました。

 public List<TBASubType> GetSubType(int typ)
        {
            using (var tr = session.BeginTransaction())
            {
                try
                {
                    List<TBASubType> lstSubTypes = (from sbt in session.Query<TBASubType>()
                                                    where sbt.FType == typ
                                                    select sbt).ToList();


                    tr.Commit();
                    return lstSubTypes;
                }
                catch (Exception ex)
                {
                    CusException cex = new CusException(ex);
                    cex.Write();
                    return null;
                }
            }
        }

この後、以下のコードのようにデータバインディングソースでコンボボックスにバインドします。

M3.CM.BAL.CM CMobj = new M3.CM.BAL.CM(wSession.CreateSession());
                lstSubTypes = CMobj.GetSubType(type);
                this.tBASubTypeBindingSource.DataSource = lstSubTypes;
4

4 に答える 4

16

したがって、DataSource にバインドされている場合、項目を変更することはできません。空白行を追加する唯一のオプションは、データ ソースを変更することです。空のオブジェクトを作成し、データ ソースに追加します。Personたとえば、コンボボックスにバインドされたいくつかのエンティティのリストがある場合:

var people = Builder<Person>.CreateListOfSize(10).Build().ToList();
people.Insert(0, new Person { Name = "" });
comboBox1.DisplayMember = "Name";
comboBox1.DataSource = people;

Emptyクラスで静的プロパティを定義できます。

public static readonly Person Empty = new Person { Name = "" };

それを使用して、デフォルトの空白のアイテムを挿入します。

people.Insert(0, Person.Empty);

これにより、選択したアイテムがデフォルトのアイテムであるかどうかも確認できます。

private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    Person person = (Person)comboBox.SelectedItem;
    if (person == Person.Empty)
        MessageBox.Show("Default item selected!");
}    
于 2013-08-07T13:29:41.013 に答える