我有一个 DataGridView 和一个从 SQL 表填充的一些对象的列表。我曾使用两种方法将列表绑定(bind)到网格。
1.直接使用列表到数据源
grdSomeList.DataSource = GetListSomeObjects();
2.通过绑定(bind)源使用
_bsSomeList = new BindingSource();
_bsSomeList .DataSource = GetListSomeObjects();
grdSomeList.DataSource = _bsSomeList ;
绑定(bind)数据源的最佳实践是什么?这两者背后有什么具体原因吗?
最佳答案
如果是单向绑定(bind),则使用第一种方式。
如果是双向绑定(bind),则使用第二种方式,这意味着当用户更改 DataGridView 单元格时,更改将保留/持久保存在 GetListSomeObjects()
数据源中。
您没有指定这是 WPF、Winforms 还是 Web,但您可以在 BindingSource's 上阅读更多内容和 One, Two & etc Way Binding :
双向
导致对源属性或目标属性的更改自动更新另一个。这种类型的绑定(bind)适用于可编辑表单或其他完全交互的 UI 场景。
单向
当绑定(bind)源(source)改变时更新绑定(bind)目标(target)属性。如果被绑定(bind)的控件是隐式只读的,则这种类型的绑定(bind)是合适的。例如,您可以绑定(bind)到一个来源,例如股票代码。或者您的目标属性可能没有提供用于更改的控制界面,例如表格的数据绑定(bind)背景颜色。如果不需要监听目标属性的变化,使用OneWay绑定(bind)方式可以避免TwoWay绑定(bind)方式的开销。
一次性
在应用程序启动或数据上下文更改时更新绑定(bind)目标。如果您正在使用适合使用当前状态快照或数据真正静态的数据,则这种类型的绑定(bind)是合适的。如果您想使用源属性中的某个值初始化目标属性并且事先不知道数据上下文,则这种类型的绑定(bind)也很有用。这本质上是一种更简单的单向绑定(bind)形式,可在源值不变的情况下提供更好的性能。
OneWayToSource
在目标属性更改时更新源属性。 Default 使用绑定(bind)目标的默认 Mode 值。每个依赖属性的默认值各不相同。通常,用户可编辑的控件属性(例如文本框和复选框的属性)默认为双向绑定(bind),而大多数其他属性默认为单向绑定(bind)。一种确定依赖项属性默认是单向绑定(bind)还是双向绑定(bind)的编程方法是使用 GetMetadata 获取属性的属性元数据,然后检查 BindsTwoWayByDefault 属性的 bool 值。
关于c# - DataGridView 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15490908/