BindingSource如何确定绑定数据结构类型?PolicyNumber改String后报Double转换错
问题排查与解决方案
补充说明:WinForms绑定引擎处理数值类型的输入转换时,默认会将输入字符串先转换为Double类型再转成目标数值类型,所以该报错中的Double是转换中间类型,不代表绑定引擎推断的目标属性类型为Double,本质原因还是绑定逻辑读取到的PolicyNumber属性类型仍然是旧的数值类型。
排查方向如下:
- 首先确认外部DLL的引用是否更新:如果Audit类所在的外部DLL修改属性类型后没有重新编译,或者WinForms项目引用的仍是旧版本DLL,绑定引擎读取到的属性元数据还是原来的Integer类型,就会触发数值转换校验。可以右键项目引用的对应DLL,查看版本和修改时间确认是否为最新版本。
- 检查绑定代码的显式格式配置:如果当初绑定PolicyNumber时手动指定了数值格式字符串,或者配置了
Parse事件做数值转换,哪怕属性类型修改,旧的转换逻辑仍然会生效。可搜索对应文本框的绑定声明,排查是否存在类似如下的旧代码,删除其中的数值格式配置即可:// 旧数值绑定示例,需移除末尾的数值格式字符串"N0" txtPolicyNumber.DataBindings.Add("Text", bindingSource, "PolicyNumber", true, DataSourceUpdateMode.OnValidation, "", "N0"); - 检查设计器自动生成的绑定代码:如果是通过WinForms设计器配置的绑定,修改属性类型后设计器生成的
InitializeComponent代码不会自动同步,仍会缓存旧的属性类型配置。可打开对应窗体的.Designer.cs文件,搜索PolicyNumber相关的绑定逻辑,删除旧绑定后重新在设计器中配置,或者手动修改绑定代码移除类型转换限制。 - 确认中间数据源的类型配置:如果绑定流程中用到了强类型DataSet、DataTable作为中间数据源,需要检查对应DataColumn的
DataType属性是否同步修改为typeof(string),旧的数值类型字段会触发默认的类型转换校验。 - 检查是否存在全局类型转换逻辑:如果项目中注册了全局的
Binding.Parse事件处理逻辑,或者给PolicyNumber属性关联了自定义的TypeConverter,旧的转换器逻辑仍会将输入内容往数值类型转换,需要同步更新转换器规则。
内容的提问来源于stack exchange,提问作者dirtebird
相关产品推荐
相关产品推荐

