提问人:Tim 提问时间:2/17/2015 更新时间:7/21/2022 访问量:2400
在 DataGridView 中获取用户添加的行
Getting user added row in DataGridView
问:
我有以下绑定到 List 的 DataGridView:
List<Object> list = new List<Object>();
System.Windows.Forms.DataGridView dataGridView1;
dataGridView1.DataSource = new BindingSource(list, null);
dataGridView1.UserAddedRow += new System.Windows.Forms.DataGridViewRowEventHandler(this.dataGridView1_UserAddedRow);
void dataGridViewMilight_UserAddedRow(object sender, DataGridViewRowEventArgs e) {
// e.Row.DataBoundItem is always null?
}
如何获取已添加到列表中的对象?
答:
-2赞
Phil Wright
2/17/2015
#1
提供的 DataGridViewRowEventArgs 实例的 Row 属性是新创建的行。
void dataGridViewMilight_UserAddedRow(object sender,
DataGridViewRowEventArgs e)
{
DataGridViewRow newRow = e.Row;
}
评论
0赞
Tim
2/17/2015
我正在尝试访问该行对应的列表中的对象。为此,我尝试了 e.Row.DataBoundItem,但它似乎总是空的。
0赞
Phil Wright
2/17/2015
哦,我不确定。尝试在源列表中设置一个断点,以便在添加新对象时使用断点。然后运行代码,查看对象实例实际添加到源代码管理的时间点,并查看堆栈以查看它何时出现在网格中。这可能会提供一些线索。
2赞
Jean-Xavier Bardant
6/22/2018
#2
绑定到 DataView 的 DataGridView 也遇到了类似的问题。我想在创建 DataRow 时为隐藏(未绑定)字段提供默认值,但从未有任何绑定项。
我通过处理 DataView 引发的 ListChanged 事件(当事件的 ListChangedType 属性等于 ItemAdded 时)解决了这个问题。如果使用 BindingList 而不是列表或任何实现 IBindingList 的类,则可以处理相同的事件。
评论
1赞
Sal
8/6/2019
我建议使用 DefaultValuesNeeded 事件在新用户添加的行中预填充某些字段。
0赞
Jean-Xavier Bardant
7/21/2022
据我了解,如果您需要提供绑定到网格的值,DefaultValuesNeeded 是一个不错的选择。如果还需要为未绑定 DataGridViewColumn 的字段提供值,则需要处理源的 ListChanged 事件或使用隐藏列。无论如何,对于大多数用例来说,您的解决方案似乎更简单,因为它不依赖于数据源的性质。
评论