vb.net wpf datagrid - 如何立即保存更新的行

时间:2016-06-07 19:32:47

标签: wpf vb.net datagrid

我有一个DataGrid,它绑定到一个可观察的clsActivity对象集合。

我想找到用户修改行的时间,然后更新后端数据库。

我已尝试使用gridview的SelectionChanged和RowEditEnding事件,但RowEditEnding不会显示更新的更改,只显示原始行内容。

我已经看过使用可观察集合的OnCollectionChanged但是当它处理添加/删除时,它不处理更改。另外看看使用INotifyPropertyChanged,但这看起来我必须监视每一行中的每个属性及其一个大的DataGrid。

是否有一种检测和捕获连续变化的简单方法?

是否有替代(免费)DataGrid控件可以处理更新?

这在winforms中很容易做到(并在几年前访问!)

我的DataGrid

  <DataGrid x:Name="dataGridActivities" HorizontalAlignment="Left" Margin="10,51,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.608,-2.219" Height="285" Width="411" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding activityStart, StringFormat=\{0:dd/MM/yyyy\}}" Header="Date" />
    <DataGridTextColumn Binding="{Binding activityStartTime}" Header="Start Time"/>
      <DataGridTextColumn Binding="{Binding activityEndTime}" Header="End Time"/>
      <DataGridTextColumn Binding="{Binding notes}" Header="Notes" Width="*"/>
    </DataGrid.Columns>
  </DataGrid>

我的dataGrid事件代码

'This picks up the original contents of the row fine.  I was hoping to store this and compare against the new contents in the next sub
Private Sub dataGridActivities_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles dataGridActivities.SelectionChanged
  Dim myActivity As New clsActivity
  myActivity = CType(dataGridActivities.SelectedItem, clsActivity)

  Debug.Print("SelectionChanged: " & CType(dataGridActivities.SelectedItem, clsActivity).ID)
  Debug.Print("Proj ID:" & myActivity.projectID & ", userID: " & myActivity.userID &
        ", notes:" & myActivity.notes)
End Sub

'This code just doesn't seem to pick up any changed data.
Private Sub dataGridActivities_RowEditEnding(sender As Object, e As DataGridRowEditEndingEventArgs) Handles dataGridActivities.RowEditEnding
  Dim myActivity As New clsActivity
  myActivity = CType(dataGridActivities.SelectedItem, clsActivity)

  Debug.Print("RowEditEnding for row: " & CType(dataGridActivities.SelectedItem, clsActivity).ID)
  Debug.Print("Proj ID:" & myActivity.projectID & ", userID: " & myActivity.userID &
    ", notes:" & myActivity.notes)
'Was hoping to pick up the new contents of the row, then process them back to the database
End Sub

0 个答案:

没有答案