- - PR -
VB.NET DataGridのCurrentCellChangedでセル変更後の値の取得
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 |
|
投稿日時: 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