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

TextChangeイベントで

  • 題名: TextChangeイベントで
  • 著者: シュナイダー
  • 日時: 2006/03/30 9:55:04
  • ID: 15115
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[vb.net 2003, XP]
分類:[.NET]

DataGridのカラムが変更されたら"変更しました"という表示をするように
今開発しています。

↓のような事を試したのですが、うまく作動しません。

DataGridのカラムでTextChangeイベントを生成し、そこのカラムに変更があった行に("変更"というカラム)"変更ありました"という表示をするようにしています。

-----------------------------------------------------------------------

'' カラム対象のカラム

Dim DGTS_1 As DataGridTableStyle = DataGrid.TableStyles(0)
Dim DGTC_1 As DataGridTextBoxColumn = DGTS_1.GridColumnStyles("カラム1")

Dim TB_1 AS TextBox = DGTC_1.TextBox
AddHandler TB_1.TextChanged, AddressOf DataGrid_TextChanged

-----------------------------------------------------------------------

'' 変更された行

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

'' 変更ありましたの設定
DataView1(DataGrid.CurrentRowIndex).Item("変更") = "変更ありました"
End Sub

↑で実行したところ、カラム1に値を変更したら、変更カラムに"変更ありました"
は、表示されます。

ですが、カーソルを下行に移すと、変更していないのにそこの行の変更カラムに"変更ありました"が表示されてしまいます。

カラム1が変更した行だけを設定するにはどうしたらいいでしょうか?
アドバイスをお願いします。

※DataRowState.Modifiedは理由があって使用できません。
お世話になります。

■No15115に返信(シュナイダーさんの記事)
> DataGridのカラムが変更されたら"変更しました"という表示をするように
> 今開発しています。

現在の行が変わったときに変更したとみなすのであれば、
以下の様な方法もあるようです。

Private WithEvents m_myDataTable As DataTable

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Me.m_myDataTable = New DataTable("test001")
  Me.m_myDataTable.Columns.Add("test", GetType(String))
  Me.m_myDataTable.Columns.Add("変更", GetType(String))
  For i As Integer = 0 To 10
    Me.m_myDataTable.Rows.Add(New Object() {i.ToString(), ""})
  Next
  Me.DataGrid1.DataSource = Me.m_myDataTable

End Sub

Private Sub m_myDataTable_RowChanged(ByVal sender As Object, ByVal e As System.Data.DataRowChangeEventArgs) Handles m_myDataTable.RowChanged
  If e.Action = DataRowAction.Change Then
    e.Row.BeginEdit()
    e.Row.Item("変更") = "変更しました"
    e.Row.EndEdit()
  End If
End Sub
  • 題名: Re[2]: TextChangeイベントで
  • 著者: シュナイダー
  • 日時: 2006/03/30 16:57:34
  • ID: 15124
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
なおこ(・∀・) さん。ありがとうございます。

スイマセンです。言葉が足りませんでした。

現在の行で"特定のカラム"が変更された時に、"変更されました"と表示したいのです。現在の行どこか変更があったらではなくて、"特定のカラム"だけです。

それで、
-----------------------------------------------------------------------

'' カラム対象のカラム  ←変更カラムの間違いです(汗)

Dim DGTS_1 As DataGridTableStyle = DataGrid.TableStyles(0)
Dim DGTC_1 As DataGridTextBoxColumn = DGTS_1.GridColumnStyles("カラム1")

Dim TB_1 AS TextBox = DGTC_1.TextBox
AddHandler TB_1.TextChanged, AddressOf DataGrid_TextChanged

-----------------------------------------------------------------------

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