c# - 更改 DataGridViewCell 用户输入处理行为

标签 c# winforms datagridview timespan

我有一个带有 TimeSpan 列的 winform 应用程序,该列显示日期的小时/分钟部分。当用户输入文本时,使用 TimeSpan.TryParse() 将其转换为 TimeSpan。当用户输入“11:00”并将值设置为 11 小时时,这会按预期工作。问题是,如果用户输入“1100”,它被解析为 1100 天,这不是我想要的,也不是简单地在 CellValidating 事件中说“错误输入”令人满意的行为。

用户输入在只读属性 DataGridViewCellValidatingEventArgs.FormattedValue 中提供,因此我无法更改通过调用链传递的值。 DataGridViewTextBoxCell.EditedFormattedValue 也是只读的,我找不到任何其他可以覆盖默认行为的事件或属性。

这很令人沮丧。我可以通过可以处理多种用户输入格式并从每种格式获取预期值的验证器编写许多步骤;但除非我放弃框架提供的所有强类型数据绑定(bind),而是创建一个将所有值存储为字符串的垫片对象,否则似乎没有任何方法可以做到这一点。

最佳答案

在 DataGridView 的 100 亿个事件中,我以某种方式忽略了 CellParsing .覆盖它可以让我做我需要做的事情。

关于c# - 更改 DataGridViewCell 用户输入处理行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3662420/

相关文章:

c# - 使所有 datagridview 列可排序

.net - 多 "column"DataGridView C#

c# - 如何从非控制台ASP.Net应用程序捕获stdout

c# - 第一个字母数字字符处的子字符串

c# - 是否可以编写会导致编译时间过长的代码?

javascript - 如何在AJAX错误方法中检索DbContext SqlException?

c# - 文件名模式在 OpenFileDialog 中不起作用

.net - winforms关闭事件的不同原因

c# - Visual C# - 在哪里存储处理文件和工作而不是 C :\ProgramFiles?

c# - 防止对 DataGridView 中的特定行进行编辑