【问题标题】:Datagridview checkboxcolumn validationDatagridview 复选框列验证
【发布时间】:2011-01-21 20:33:21
【问题描述】:

DatagridView 中,我有 databound checkboxcolumns。但是,如果我选中或取消选中多个复选框,则不会保存所有更改。 (它不会全部触发属性 Set 方法,可能每 2 次触发一次)。但是,如果我在每次单击复选框后,在下一个复选框之前单击另一个单元格(列),那么所有操作都将触发 Set 方法。因此,单元格验证似乎不适用于每个单元格,而是基于每列(对于复选框列)。那么你如何解决这个问题呢?

【问题讨论】:

    标签: c# vb.net validation datagridview datagridviewcheckboxcell


    【解决方案1】:

    找到答案:DataGridView with CheckBox cell problem

    但可能更简单的选择是放入保存按钮方法:

    DataGridView.EndEdit();
    

    【讨论】:

      【解决方案2】:

      目前还不清楚您尝试了什么,什么不起作用。我假设您有一个 Winform 应用程序并使用 SqlDataSource 将 SQL-Server 表绑定到您的网格。数据库中有一个布尔(位)字段,因此网格会自动生成一个 DataGridViewCheckBoxColumn。您正在尝试保存用户在单击保存按钮时所做的所有更改。

      所有这些猜测都正确吗?

      您所要做的就是使用数据适配器更新您的数据集/数据表。

      Private Sub BtnSaveChanges_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSaveChanges.Click
          Me.FooTableAdapter.Update(DataSet1.Foo)
      End Sub
      

      MSD 示例:http://msdn.microsoft.com/en-use/library/fbk67b6z.aspx

      如果更改要直接保存到数据库,可以处理BindingSource的CurrentItemChanged-event

      Private Sub FooBindingSource_CurrentItemChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles FooBindingSource.CurrentItemChanged
           Dim thisDataRow As DataRow = DirectCast(DirectCast(sender, BindingSource).Current, DataRowView).Row
           If thisDataRow.RowState = DataRowState.Modified Then
               Me.FooTableAdapter.Update(thisDataRow)
           End If
      End Sub
      

      【讨论】:

      • 谢谢!我认为更多细节无关紧要。但;我在 datagridview 中显示实体类的对象(来自 Linq-to-Sql dbml 文件)。所以该属性是此类中的布尔属性。我不自动生成列,但我使用 Columns.Add(DataGridViewCheckBoxColumn) 指定。问题是,我在属性的 Set 方法上放置了一个断点(在 dbml 文件中),所以我注意到它何时被调用。问题是,如果您紧随其后单击两个复选框。仅调用其中一个(第一个)的 set 方法,而在 datagridview 中,这两个操作都会导致选中标记。
      • 抱歉,我没有完全确认您的所有问题:这是一个 Winforms 应用程序,Sql Server Express 数据源。我在绑定导航器上有一个保存按钮,它调用存储库以保存到数据库。但我相信这个问题与 sql/database 问题并没有真正的关系。但只是通过 DataGridViewCheckBoxColumn 更新任何布尔属性的方式。 (至少在我看来是这样)
      • 更清晰的描述:如果我有 5 个空复选框,则检查所有复选框,最后一个后点击保存按钮。 “最后一个”复选框不会保存为选中状态。但是,如果在最后一个复选框和保存按钮之间,我单击另一个单元格(其他列或确切复选框正方形之外的任何复选框单元格),那么最后一次检查也将是保存的一部分。所以问题是在选中该框时没有调用该属性,而是在 DataGridView 上的 NEXT 操作上调用该属性。但是,如果下一个操作在该控件之外,则不会保存检查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多