我有一个自定义Order
类,其中的一组存储在List<Order>
和一个DataGridView中。我认为问题在于我的实现,所以这就是我如何使用它:
在封闭DataGridView
(作为OrdersDataGrid
)的表单中:
public partial class MainForm : Form
{
public static List<Order> Orders;
public MainForm()
{
// code to populate Orders with values, otherwise sets Orders to new List<Order>();
OrdersDataGrid.DataSource = Orders;
}
然后以另一种形式添加订单:
// Save event
public void Save(object sender, EventArgs e) {
Order order = BuildOrder(); // method that constructs an order object from form data
MainForm.Orders.Add(order);
}
从控制台我可以看出,这是成功添加的。我认为DataGrid会在Orders
发生变化之后自动更新 - 我有什么遗漏吗?
DataGrid接受该类,因为它从成员生成列。
答案 0 :(得分:1)
由于你不能在使用对象列表的DataGridView上使用DataBind,因为它的DataSource是我找到的解决方案:
首先将List<T>
替换为BindingList<T>
- 基本上是相同的,除了BindingList
行为,如DataBind()
。
将您的T
更改为实施System.ComponentModel.INotifyPropertyChanged
:
这涉及添加属性:
public event PropertyChangedEventHandler PropertyChanged;
添加到每个变量的set
块:
public string Name
{
get { return this.CustomerName; }
set {
this.CustomerName = value;
this.NotifyPropertyChanged("Name");
}
}
并添加另一种方法:
private void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
来源:Binding a DataGridView to a Collection,Info on converting List to BindingList
答案 1 :(得分:0)
您需要重新绑定DataGrid上的数据。
答案 2 :(得分:0)
在基础数据源更新后,您不应该重新绑定DataGrid吗?
使用代码:
OrdersDataGrid.DataSource = Orders;
OrdersDataGrid.DataBind();
答案 3 :(得分:-1)
您必须使用
将新数据绑定到数据网格Gridview1.DataBind();
请注意,每当您更新某个列表(绑定到gridview或任何其他演示者列表控件)时,它只会更新列表而不是gridview。
如果您真的不想重新使用.net 3.5中提供的物品使用IronPython