8,756
社区成员




//数据库使用Northwind示例数据库
//ListView控件和另一个ComboBox控件关联
//两个表,EF框架中通过SupplierID关联了Suppliers和Products两张表
//设置ComboBox的DataContext的代码,northwindDB是窗体的字段,类型是NorthwindEntities,NorthwindEntities是由EF向导生成的DBContext对象
northwindDB = new NorthwindEntities();
northwindDB.Suppliers.Load();
cmbSupplierList.DataContext = northwindDB.Suppliers.Local;
//当选择了ComboBox中的项目后设置ListView控件中的DataContext的代码,sp是窗体字段,类型是EF生成的Supplier类,productList是一个定义为List<Product>的集合,也是窗体字段。
sp = cmbSupplierList.SelectedItem as Supplier;
productList = sp.Products.ToList<Product>();
lsvProductList.DataContext = this.productList;
//到此为止,显示一切正常
//下面是更新数据的代码,ProductForm是一个编辑产品信息的窗口,显示为模态,用户编辑完成后单击确定按钮,相关的校验在该窗口完成
private void editProduct(Product prod)
{
ProductForm pf = new ProductForm();
pf.Title = "编辑产品信息";
pf.txtProductName.Text = prod.ProductName;
pf.txtQuantityPerUnit.Text = prod.QuantityPerUnit;
pf.txtUnitPrice.Text = prod.UnitPrice.ToString();
if(pf.ShowDialog().Value)
{
prod.ProductName = pf.txtProductName.Text;
prod.QuantityPerUnit = pf.txtQuantityPerUnit.Text;
prod.UnitPrice = decimal.Parse(pf.txtUnitPrice.Text);
btnSaveChanges.IsEnabled = true;
//如果没有下面这三句,ListView控件就不能反应实时更新了
sp = cmbSupplierList.SelectedItem as Supplier;//这一句可以不需要,ComboBox控件的状态并没有变化
productList = sp.Products.ToList<Product>();
lsvProductList.DataContext = productList;
}
}
sp = cmbSupplierList.SelectedItem as Supplier;
productList = new ObservableCollection<Product>(sp.Products);
lsvProductList.DataContext = productList;
其他的代码不变!