我有一个带有 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/