C# DataGridView 添加行 - 验证时,我如何知道该行是新行且尚未提交?

标签 c# winforms datagridview

我有一个客户端在 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/

相关文章:

c# - Visibility.Collapse 不会在 Win8 上完全折叠项目

c# - WebBrowser 控件不再显示 PDF

c# - 以编程方式启动 Windows 10 表情符号热键

c# - 从 DataGridView 单元格中删除填充/边距

c# - Datagridview 中的 UpdateCellValue()

c# - 具有多个键和每个键的多个值的字典

c# - Debug.WriteLine 什么都不显示

c# - 在 datepicker c# Winforms 上引发验证事件

vb.net 调用问题

c# - DataGridView AddRange,将 IEnumerable<object[]> 转换为 DataGridViewRow[](如果可能,使用 LINQ)