- PR -

VB.NET DataGridのCurrentCellChangedでセル変更後の値の取得

1
投稿者投稿内容
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2006-08-18 12:17
VB.netでWindowsアプリケーション開発中です。

DataGridのCurrentCellChangedイベントにて
セルの変更後の値を取得するにはどうしたら良いでしょうか。

色々、調べたのですが、方法を見つけることができませんでした。

現在のフォーカスのデータ「drv("date")」を取得すると変更前の値です。

確かに、フォーカスが移動される前はデータテーブルに
反映されていないのかもしれませんが
画面上の入力した値を取得できる方法があれば教えてください。

以上、よろしくお願い致します。



Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
  Dim curCell As DataGridCell = DataGrid1.CurrentCell
  Dim i, end_flg As Integer
  Dim bm As BindingManagerBase = _
   DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember)
  Dim drv As DataRowView = CType(bm.Current, DataRowView)
  Dim dr As DataRow = drv.Row

  i = 0
  end_flg = 0

  While end_flg <> 1
   Try
    If ds.Tables("table").Rows(i).Item("no") <> drv("no") Then
     If ds.Tables("table").Rows(i).Item("cd") = drv("cd") Then
      ds.Tables("table").Rows(i).Item("date") = drv("date")
      '↑ここで変更後のデータで更新がしたい
     End If
    End If
    i += 1
   Catch ex As Exception
    end_flg = 1
   End Try
  End While
End Sub
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2006-08-23 10:38
他の方法で解決することができました。

DataGridのCurrentCellChangedで変更後の値を取得することはできたのですが
(DirectCast(date_Col, DataGridTextBoxColumn).TextBox.Textにて)

CurrentCellChanged時での現在の行は移動した後の行になってしまい
処理がどうしてもうまく行かなかったので
フォームロード時にTextChangedイベントハンドラを追加し、
TextChangedイベントとして処理させたらうまく行きました。


フォームロード時の処理
  'DataGridTextBoxColumnの取得
  Dim cs As DataGridTextBoxColumn = _
     CType(ts.GridColumnStyles(8), DataGridTextBoxColumn)
  'TextBoxの取得
  Dim tb As TextBox = cs.TextBox
  'TextChangedイベントハンドラを追加()
  AddHandler tb.TextChanged, AddressOf tb_TextChange

#Region " 「TextChange」イベントハンドラ "
 Private Sub tb_TextChange(ByVal sender As Object, ByVal e As System.EventArgs)

  Dim bm As BindingManagerBase = _
    DataGrid1.BindingContext(DataGrid1.DataSource, DataGrid1.DataMember)
  Dim drv As DataRowView = CType(bm.Current, DataRowView)
  Dim i, end_flg As Integer

  i = 0
  end_flg = 0

  While end_flg <> 1
   Try
    If ds.Tables("table").Rows(i).Item("cd") = drv("cd") Then
     If TypeOf date_Col Is DataGridTextBoxColumn Then
      ds.Tables("table").Rows(i).Item("date") = DirectCast(date_Col, DataGridTextBoxColumn).TextBox.Text
     Else
      ds.Tables("table").Rows(i).Item("date") = ""
     End If
    End If
    i += 1
   Catch ex As Exception
    end_flg = 1
   End Try
  End While
 End Sub
#End Region
1

スキルアップ/キャリアアップ(JOB@IT)