如何正确显示列表<;类>;在组合框中,并使值成员指向选定的类对象
本文关键字:成员 对象 lt 列表 显示 何正确 gt 组合 | 更新日期: 2023-09-27 18:00:53
我正在使用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,并且为了避免每次添加项目时在数据库中插入新的类别,我应该传递一个Guid与数据库中保存的Guid相同的类别对象,所以我使用了如上所示的linq查询,即查询从数据库中检索的所有类别列表,我认为这是一种糟糕的方法。
是否建议将allCategories List直接绑定到comboBox,在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;