【问题标题】:WinForms, BindingSource, prevent CurrentItem changeWinForms, BindingSource, 防止 CurrentItem 改变
【发布时间】:2009-09-09 16:04:03
【问题描述】:

如何防止 bindingSource 当前项目发生变化? (取消参数没有更改事件...)

这是场景:

  • 我有一个 dataGridView 和同一个表单上的文本框。
  • 我正在使用文本框来更改数据源中的值(使用标准数据绑定)
  • 绑定是手动写入的(点击保存按钮后)

  • 当用户使用 DataGridView 选择另一行时,bindingSource.Current 属性会发生更改,并且文本框会使用所选行中的值进行更新。用户输入的更改将丢失。

有什么办法可以防止这个问题吗?

我可以防止 bindingSource.Current 属性发生变化吗?

有没有更好的选择来防止这种行为?

(很遗憾,禁用 dataGridView 不是一个选项)

【问题讨论】:

    标签: c# winforms data-binding focus


    【解决方案1】:

    听起来您不想不更改bindingSource.Current,而是希望在更改当前行之前保存文本框的内容?如果您已将 集合 绑定到 bindingSource,那么文本框不是引用该集合中当前元素的属性吗?

    我不太确定您要做什么,但在黑暗中的尝试可能是将相同的 DataSource 绑定到两个不同的 BindingSource 对象,如下所示:

    gridBindingSource.DataSource = theDataSource;
    textBoxBindingSource.DataSource = theDataSource;
    myDataGrid.DataSource = gridBindingSource;
    firstNameTextBox.Bindings.Add (new Binding ("Text", textBoxBindingSource, "FirstName"));
    

    但这会很奇怪,因为如果theDataSource 适合网格控件,那么它就是具有FirstName 属性的事物的集合。也许如果你的问题更具体。


    ETA:如果要将文本框内容保存到当前行,请在 bindingSource.Current 属性更改之前调用容器上的 ValidateChildren ()

    【讨论】:

    • 您的回答绝对让我对我的问题有了新的认识。这很容易解决我的问题。
    • 这是我将实施的解决方案。它比简单地禁用网格更复杂,但它为我提供了更多功能(用户可以在添加新记录的同时浏览网格,例如用于参考目的)
    【解决方案2】:

    我有一个有点相似的框架,网格和文本框都在同一个表单上。当用户单击编辑按钮(或添加)时,我只是禁用了 gridview 控件本身...

    MyDataGrid.Enabled = false;

    继续编辑..

    然后在SAVE中,如果一切正常,

    MyDataGrid.Enabled = true;

    【讨论】:

    • 禁用 datagridview 会让最终用户感到困惑吗?您是否调整了禁用的网格外观?
    • +1。我也可能将 BackColor 设置为 Control 或 Butonface
    • 最简单的答案就是启用/禁用网格。如果你想变得更漂亮,可以改变颜色、字体或其他东西。我什至在其他线程中看到人们如何创建一个“形状”对象,该对象可以具有柔和的灰色阴影或其他视觉指示器,并根据其位置/坐标直接与整个网格重叠。然后在启用/禁用网格时分别显示/隐藏该控件,以向用户提供已禁用的视觉指示。
    猜你喜欢
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多