gpt4 book ai didi

c# - DataGridView 和 List<> 与 BindingSource 的数据绑定(bind)

转载 作者:太空狗 更新时间:2023-10-30 00:36:28 25 4
gpt4 key购买 nike

我正在尝试弄清楚数据如何与 BindingSource 绑定(bind)应该工作我想要一个 DataGridView填充 List<> 的内容名单更新后。

我可以看到 List当我检查调试器时,它会增长并验证它是否被填充。我以为 BindingSource List 时会触发一个事件被改变了。但是没有可用的被解雇。当基础列表更改时,我如何收到通知?

我按照说明进行操作并获得以下测试代码:

    Data d;
BindingSource bs;

public Form1()
{
InitializeComponent();
bs = new BindingSource();
d = new Data();
}

private void Form1_Load(object sender, EventArgs e)
{
bs.DataSourceChanged += new EventHandler(bs_DataSourceChanged);
bs.ListChanged += new ListChangedEventHandler(bs_ListChanged);
bs.DataMemberChanged += new EventHandler(bs_DataMemberChanged);
bs.CurrentChanged += new EventHandler(bs_CurrentChanged);
bs.CurrentItemChanged += new EventHandler(bs_CurrentItemChanged);

bs.DataSource = d.list;
dataGridView1.DataSource = bs;
}
// ... all the handling methods caught with a break point in VS.

private void button1_Click(object sender, EventArgs e)
{
d.addOneItem();
}

最佳答案

List<T>不支持变更事件; BindingList<T>将是支持这种情况的一个很好的替代品,如果您输入 T,它还支持项目级更改事件。工具 INotifyPropertyChanged .

3.0及以上版本还有 ObservableCollection<T> , 其作用类似于 BindingList<T> .这一切都归结为 IBindingList 等接口(interface), IBindingListView


来自评论;对于添加 Find 的 2.0/3.0 示例至 BindingList<T> :

public class MyBindingList<T> : BindingList<T>
{
public T Find(Predicate<T> predicate)
{
if (predicate == null) throw new ArgumentNullException("predicate");
foreach (T item in this)
{
if (predicate(item)) return item;
}
return default(T);
}
}

请注意,在 3.5 中(或在带有 LINQBridge 和 C# 3.0 的 .NET 2.0/3.0 中)您不需要这个 - 任何 LINQ 扩展方法都可以做同样的事情。

关于c# - DataGridView 和 List<> 与 BindingSource 的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1846464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com