[英]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.