簡體   English   中英

如何正確顯示清單 <class> 在ComboBox中,並使值成員指向所選的類對象?

[英]How to properly display List<class> in ComboBox, and make the value member point to the selected class object?

我正在使用C#winform和Nhibernate作為ORM開發概念的簡單證明,

添加一個項目非常簡單。 每個項目都有一個“類別的外鍵”表。

抱歉,我無法為課程圖上傳圖片,但是我還不允許上傳圖片。 所以課程是

public class Category
{
    public virtual Guid Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string NameArabic { get; set; }

    public static bool AddCategory(Category category)
    {
        using (var session=NhibernateHelper.OpenSession())
        {
            using (var transaction=session.BeginTransaction())
            {
                session.SaveOrUpdate(category);
                transaction.Commit();
            }
            return true;
        }
    }

    public static IList<Category> GetAll()
    {
        using (var session=NhibernateHelper.OpenSession())
        {
            return session.QueryOver<Category>().List<Category>();
        }
    }
}

public class Item
{
    public virtual Guid Id { get; set; }
    public virtual string Description { get; set; }

    public virtual Category Category { get; set; }

    public static bool AddItem(Item item)
    {
        using (var session = NhibernateHelper.OpenSession())
        {
            using (var transaction = session.BeginTransaction())
            {
                session.SaveOrUpdate(item);
                transaction.Commit();
            }
            return true;
        }
    }
}

用戶單擊插入項目按鈕時,應執行以下代碼

    private void insertItem_Click(object sender, EventArgs e)
    {           
         Model.Item item = new Item
        {
         // allCategories is IList<Category> contain all categories retrieved from Database
            Category = (from category in allCategories 
                        where category.Id == Guid.Parse(comboBox1.SelectedValue.ToString())
                       select category).FirstOrDefault(),
            Description = textBox1.Text // the name text box
          };

        if (Model.Item.AddItem(item))
            MessageBox.Show("Transaction Completed");
    }

我的問題是,由於我正在使用Nhibernate並避免每次添加item時都在數據庫中插入新類別,因此我應該傳遞一個Guid類別對象,該類別對象與數據庫中保存的類別相同,因此我使用linq查詢為如上所示,對所有類別的查詢都從數據庫中檢索出來,我認為這是一種不好的方法。

是否有建議將allCategories List直接綁定到comboBox,在其中我可以使用特定屬性指向當前在comboBox中列出的派生對象Guid。

類映射

    public CategoryMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.NameArabic);
    }

    public ItemMap()
    {
        Id(x => x.Id);
        Map(x => x.Description);
        References(x => x.Category);
    }

謝謝,

用這個

YourComboBox.DataSource = YourList<Category>;
YourComboBox.DisplayMember = StringNameOfProperty;

填充您的組合框。 要獲得屬性值后面的商品,請使用:

var item = (Category) YourComboBox.SelectedItem;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM