gpt4 book ai didi

C# DataGridView 处理泛型类 setter 异常而不是 DataError

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:46 26 4
gpt4 key购买 nike

好吧,首先我已经搜索了大约一段时间,但没有找到任何指向我的问题的答案。

我有这种情况:

  • 我有一个 DataGridView它有一个 BindingList<Person>作为DataSource .
  • DataGridView可以直接在DataGridViewCell上编辑.

class Person我有一个属性高度:

public int Height
{
get { return _height; }
set
{
if (!int.TryParse(value.ToString(), out _height))
throw new InvalidCastException("Invalid value.");
}
}

我的问题:

当我直接在网格上编辑单元格并为该字段输入无效值(除 int 之外的任何值)时,DataGridView提出 Exception在它通过属性 setter 传递值之前。但是,如果我传递一个有效值,它将通过属性 setter ,但它永远不会引发 Exception。因为...它是有效的。

我如何告诉 DataGridViewException我想扔的是二传手 Exception我的class

最佳答案

当您使用 int 属性时,您不需要这样的验证:

set 
{
if (!int.TryParse(value.ToString(), out _height))
throw new InvalidCastException("Invalid value.");
}

因为值总是int。

当您的属性为 int 时,传递的值始终为 int,并且在 DatGridView 中输入的字符串永远不会传递给您的 int 属性。所以你的二传手从来没有到过这个地方。

当你在那个单元格中写入字符串时DataGridView会抛出格式异常,你可以处理DataError DatGridView

事件
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
//Hanlde exception and perform what you need for example show your custom message:
MessageBox.Show("Invalid value.")
}

您可以使用 DataGridViewDataErrorEventArgs 的属性:

  • Cancel:获取或设置一个值,指示是否应取消事件。
  • ColumnIndex:获取发生事件的单元格的列索引。
  • Context:获取有关发生错误时 DataGridView 状态的详细信息。
  • Exception:获取表示错误的异常。
  • RowIndex:获取发生事件的单元格的行索引。
  • ThrowException:获取或设置一个值,指示在 DataGridViewDataErrorEventHandler 委托(delegate)完成后是否抛出异常。

例如,假设您在 setter 中有一个字符串属性,您检查传递值的长度是否大于 10,您将抛出“一些友好的消息”。在这种情况下,输入的数据将传递给属性,您的验证将执行。

作为另一个例子,假设你有一个整数属性,并且在 setter 中你将检查值是否小于 0 然后将抛出“一些其他友好的消息。”,在这种情况下,如果用户输入“blahblah”,它不会t 到达您的 setter 并且 DataError 将捕获它,但是如果用户输入 -5 或 10 将到达 setter 并且对于 -5 将引发异常。

关于C# DataGridView 处理泛型类 setter 异常而不是 DataError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com