.NET中如何将隐藏绑定控件对应的BindingSource值设为null或DBNull
解决方案
你提出的需求完全可以直接通过操作Binding对象实现,无需手动维护每个控件与数据源字段的映射关系,比你提到的备选方案扩展性和可维护性更好。
核心实现思路
你当前的场景是通过BindingSource绑定DataTable,可以直接通过Binding对象获取绑定的数据源实例、当前数据行、绑定字段名,直接给对应字段赋值即可,不需要操作控件属性,也规避了不同控件属性的类型兼容问题。
完整修改后代码
foreach (System.Windows.Forms.Control c in tablelayout.Controls) { if (!c.Visible && c.DataBindings.Count > 0) { Binding binding = c.DataBindings[0]; // 适配BindingSource绑定DataTable的场景 if (binding.DataSource is BindingSource bs && bs.Current is DataRowView drv) { string bindField = binding.BindingMemberInfo.BindingField; drv[bindField] = DBNull.Value; } // 其他数据源类型可在此处拓展分支逻辑 } }
补充说明
- 如果需要兼容其他数据源场景,可以使用通用实现:先给控件的绑定属性设置对应空值,再调用
binding.WriteValue()手动触发值回写到数据源,注意处理bool等值类型属性的空值兼容即可。 - 如果你的绑定配置了
DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged,设置控件属性后会自动回写数据源,不需要手动调用WriteValue,手动调用的兼容性更强,不受原有绑定更新模式的影响。
内容的提问来源于stack exchange,提问作者Me3nTaL
相关产品推荐
相关产品推荐

