通常,数据绑定winform只会触发与文本框,网格等匹配的属性的getter
但是当我浏览一个集合(通过BindingNavigator NextItem / PreviousItem)时,我发现如果我将一个数据网格的DataSource设置为一个属性,然后将其删除,那么此属性getter会继续触发,即使网格上有表格是空白的,不会要求提供数据。
这困扰我们的唯一原因是,如果在任何给定记录上第一次触发,则getter必须返回到数据层(这是一个小的性能命中)。我们的表单在不同的标签下有几个网格。因此,如果当前未选中的选项卡上的网格将其数据源设置为空,那么我们认为这将是一项改进。然而,吸气剂仍在射击(一旦选项卡及其网格至少被选中一次)......这与我们假设的性能提升有关。
简化示例:
说我有通过“国家/地区”记录卡的页面。在表格上我有两个网格:
第一个网格是针对该国的“城市” 第二个网格是国家的“河流”
默认情况下,城市网格绑定到Country.Cities 默认情况下,河流网格不是数据绑定并保持空白。
如果我浏览了我的五个测试国家(美国,英国,法国,德国,意大利),我的Country.Cities集合将被访问。 未访问Country.Rivers。正如你所料。每次Country.Cities或Country.Rivers我都会写入控制台 被访问,所以输出读取:
Country.Cities访问
访问的Country.Cities
访问的Country.Cities
访问的Country.Cities
访问过Country.Cities
忍受我。
如果在观看英国时我将Rivers网格手动绑定(例如通过虚拟按钮)到Country.Rivers集合, 然后将页面转到法国并手动取消绑定(例如,再次显式地通过按钮),然后继续寻呼到 意大利我看到的是:
Country.Cities访问
访问的Country.Cities
国家。河流访问
访问的Country.Cities
国家。河流访问
访问的Country.Cities
国家。河流访问< - ???
访问的Country.Cities
国家。河流访问< - ???
为什么德国&意大利仍然要求河流?
这是两个按钮下的代码:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RiversGrid.DataSource = Me.CountryBindingSource
RiversGrid.DataMember = "Rivers"
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
RiversGrid.DataSource = Nothing
RiversGrid.DataMember = ""
RiversGrid.Dispose()
End Sub
答案 0 :(得分:0)
不知道为什么吸气剂会发射,但如果吸气剂只是返回属性值,为什么还要打扰你呢。