DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridでのセルの値の察知

環境/言語:[Win2000 VB.Net Framework1.1]
分類:[.NET]

いつも参考にさせていただいております。

基本的なことだと思うのですが、よくわからないので質問させてください。

ある「abc.mdb」のテーブル「xyz」をDataGridに読み込んで表示させています。

行いたい処理:あるセル(例えば2,2)の値を書き換えたときにその入力された値を取得
して別のセルの値を書き換えたい。

おそらく、フォームロードしたときに、イベントハンドラを追加して、TextBoxの値を取得すれば良いと考えていますが、下記のソースで行うとDataGridTableStyleを指定する際にエラーが発生してしまいます。

対処方などご存知の方がいらっしゃいましたらアドバイスをお願い致します。

プログラム
===================================================================
Private cn As Data.OleDb.OleDbConnection
Private da As Data.OleDb.OleDbDataAdapter
Private cmd As Data.OleDb.OleDbCommand
Private prm As Data.OleDb.OleDbParameter
Private ds As DataSet

Private Sub frm_ReturnCard_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CreateDataSet() '← OledbのInsert/Update/Deleteを指定

'読み込み
Try
cn.Open()
ds.Clear()
da.Fill(ds, "xyz")
cn.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
    'DataGrid1に表示
DataGrid1.SetDataBinding(ds, "xyz")

'データグリッドのテキストの変更を察知するためにハンドルを追加する
Dim ts As DataGridTableStyle
ts = DataGrid1.TableStyles("xyz")
'tsがNothingになってしまう

'DataGridTextBoxColumnの取得
Dim cs As DataGridTextBoxColumn = _
CType(ts.GridColumnStyles(2), DataGridTextBoxColumn)
    '※↑ここでエラーが発生します
    '「System.NullReferenceException:オブジェクト参照がオブジェクト インスタンスに設定されていません」

'TextBoxの取得
Dim tb As TextBox = cs.TextBox
'TextChangedイベントハンドラを追加
AddHandler tb.TextChanged, AddressOf tb_TextChange

End Sub

Private Sub tb_TextChange(ByVal sender As Object, ByVal e As System.EventArgs)
'処理
End Sub
===================================================================
■No20329に返信(たけさんの記事)
> おそらく、フォームロードしたときに、イベントハンドラを追加して、TextBoxの値を取得すれば良いと考えていますが、下記のソースで行うとDataGridTableStyleを指定する際にエラーが発生してしまいます。

とりあえず下記URLの「DataGridTableStyleの使用法」をご覧ください。

DataGridの列の幅を変更する
http://dobon.net/vb/dotnet/datagrid/columnwidth.html
お返事ありがとうございます。
> とりあえず下記URLの「DataGridTableStyleの使用法」をご覧ください。
>
> DataGridの列の幅を変更する
> http://dobon.net/vb/dotnet/datagrid/columnwidth.html

上記を参考にして、エラーの発生がなくなり、無事にイベント追加できました。
ありがとうございました。

======================================================================
Dim dt As New DataTable("データテーブル")
Dim ts As New DataGridTableStyle
ts.MappingName = dt.TableName

Dim cs As DataGridTextBoxColumn
cs = New DataGridTextBoxColumn
cs.MappingName = "1"
cs.HeaderText = "1"
cs.Width = 100
ts.GridColumnStyles.Add(cs)

cs = New DataGridTextBoxColumn
cs.MappingName = "2"
cs.HeaderText = "2"
cs.Width = 100
ts.GridColumnStyles.Add(cs)

Dim tb As TextBox = cs.TextBox
AddHandler tb.TextChanged, AddressOf tb_TextChange

DataGrid1.TableStyles.Add(ts)


Private Sub tb_TextChange(ByVal sender As Object, ByVal e As System.EventArgs)

end sub
======================================================================
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板