Ada*_*oss 4 c# data-binding datagridview winforms
我想我会发布这个,因为在花了几个小时试图解决之后我一无所获。首先,我充分意识到 WinForms 中的数据绑定并不是最好的。也就是说,它在大多数情况下都有效。
在我的场景中,我有一个绑定源,它是我的表单的主源。用于此绑定源的对象有一些简单的属性和两个绑定列表作为属性。该类和绑定列表的类类型都实现 INotifyPropertyChanged。在我的表单上,我有两个 DataGridView 用于显示绑定列表属性的内容。
这也是通过设计时的数据绑定来完成的。我有两个绑定源,每个绑定源使用主绑定源作为数据源,然后使用各自的绑定列表属性作为数据成员。
到目前为止,我认为这是相当标准的。
为了更新这些列表中的内容,我使用按钮来显示创建新项目的表单,然后使用 BindingList.Add() 将其添加到列表中。
现在在代码中,如果您进行调试,这些项目将位于列表中,但是网格不会更新。但是,如果我向仅使用列表绑定源之一的表单添加一个列表框,则两个网格都会按预期开始刷新。
如果有任何不清楚的地方,我深表歉意,我已尽力对令人困惑的情况进行解释。
任何想法都会有帮助,因为我真的不想使用隐藏列表框。
这段代码对我来说效果很好
BindingList<Foo> source; // = ...
private void Form1_Load(object sender, EventArgs e)
{
this.dataGridView1.DataSource = new BindingSource { DataSource = source };
this.dataGridView2.DataSource = new BindingSource { DataSource = source, DataMember = "Children" };
}
private void button1_Click(object sender, EventArgs e)
{
source.Add(new Foo { X = Guid.NewGuid().ToString() });
}
private void button2_Click(object sender, EventArgs e)
{
source[0].Children.Add(new FooChild { Y = Guid.NewGuid().ToString() });
}
Run Code Online (Sandbox Code Playgroud)
与模型
public class Foo : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
string x;
public string X
{
get { return x; }
set
{
x = value;
this.NotifyPropertyChanged();
}
}
BindingList<FooChild> children;
public BindingList<FooChild> Children
{
get { return children; }
set
{
children = value;
this.NotifyPropertyChanged();
}
}
}
public class FooChild : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
string y;
public string Y
{
get { return y; }
set
{
y = value;
this.NotifyPropertyChanged();
}
}
}
Run Code Online (Sandbox Code Playgroud)
两个网格都会刷新。
我希望这可以帮助你
编辑
我改变了Form1_Load impl
归档时间: |
|
查看次数: |
23649 次 |
最近记录: |