我有一个客户端在 Windows 应用程序中遇到 DataGridView 问题。他们正在调用 CellValidated 事件,但他们希望对单元格进行不同的验证,如果它位于已经提交回数据源的行中,而不是第一次添加(但尚未提交(用户还没有离开该行。我尝试了 IsNewRow 属性,但是一旦您开始在该行中键入内容,就会添加另一个“新行”,因此您正在使用的行不再被视为新行。我知道该行尚未提交,因为您可以按 Esc 取消编辑,整行都会消失。
有没有办法判断当前编辑的行是否实际上是尚未提交回数据源的“新行”?
最佳答案
我过去实现类似目标的一种方法是利用绑定(bind)到列表的对象的 id 属性。
例如,如果我有一个 BindingList<User>
用户是这样的:
public class Names
{
public string Name { get; set; }
public int id { get; set; }
}
然后我可以像这样绑定(bind)我的列表:
dataGridView1.AutoGenerateColumns = false;
_users = new BindingList<User>();
_users .Add(new Names() { Name = "joe", id=1 });
_users .Add(new Names() { Name = "pete", id = 2 });
bindingSource1.DataSource = _names;
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
col1.DataPropertyName = "Name";
dataGridView1.Columns.Add(col1);
dataGridView1.DataSource = _users;
然后,当 DataGridView 提供新行时,它的 id 将为 0(整数的默认值)。
来自数据库的每个对象都有一个非零 ID。
也许还有一种方法可以使用 BindingSources 来实现这一点,但我快速浏览了那里的属性,但没有想到什么。
关于C# DataGridView 添加行 - 验证时,我如何知道该行是新行且尚未提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190012/