2011-01-21 106 views
0

DatagridView我有数据绑定checkboxcolumns。但是,如果我选中或取消选中多个复选框,则不会保存所有更改。 (它不会触发所有的Set属性方法,也可能每隔2秒)。但是,如果我在每个复选框之后单击,则在下一个复选框之前单击另一个单元格(列),然后所有操作都将触发Set方法。所以看起来单元格验证不是基于每个单元格的,而是基于每列的(对于复选框列)。那么你如何解决这个问题呢?Datagridview复选框列验证

回答

0

这是不是真的很清楚你试过什么,什么是不行的。我假设你有一个Winform应用程序并使用SqlDataSource将SQL-Server表绑定到你的网格。数据库中有一个布尔(位)字段,因此网格会自动生成一个DataGridViewCheckBoxColumn。您试图保存用户单击保存按钮时所做的所有更改。

所有这些猜测都正确吗?

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

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 
+0

谢谢!我认为更多的细节是不相关的。但;我在一个datagridview中显示了一个实体类的对象(来自Linq-to-Sql的dbml文件)。所以这个属性是这个类中的布尔属性。我不自动生成列,但我用Columns.Add(DataGridViewCheckBoxColumn)指定。问题是,我在属性的Set方法上放置了一个断点(在dbml文件中),所以我注意到它何时被调用。问题是如果你在海誓山盟之后单击两个复选框。只有其中一个(第一个)的设置方法被调用,而在datagridview中可视化时,这两个操作都会导致复选标记。 – bretddog

+0

对不起,我没有确认所有问题:这是一个Winforms应用程序,Sql Server Express数据源。在绑定导航器上有一个保存按钮,用于调用存储库以保存到数据库。但我相信这个问题并没有真正与sql /数据库问题有关。但简单地说,任何布尔属性由DataGridViewCheckBoxColumn更新的方式。 (至少看起来对我来说) – bretddog

+0

有点清楚的描述:如果我有5个空的复选框,然后检查所有的复选框,并在最后一个命中保存按钮后。 “最后”复选框将不会保存为选中状态。然而,如果在最后一个复选框和保存按钮之间,我点击另一个单元格(其他列或复选框正方形以外的任何复选框单元格),那么这最后一个检查也将成为保存的一部分。所以问题在于在检查框时不调用该属性,而是在DataGridView的NEXT操作上调用该属性。但是,如果下一个操作在该控件的外部,则不会保存该检查。 – bretddog