環境はVB.NET2003です。
DataGridの上部の見出し部分をクリックするとソートされますよね。
そのイベントを取得する方法というのはあるのでしょうか?どのようにすればいいのかわかりませんでした。
ソートだけでは内容の変更とはとらえないので、change系のイベントは発生しないようでしたし、単にクリックイベントだと、クリック直後のソートされる前にイベントを取得してしまい、目的の動きはできませんでした。
ご教授、よろしくお願いします。
>目的の動きはできませんでした
目的の動きを説明したほうが、解決は早そうだと思います。
さささん
ありがとうございます。
>目的の動きを説明したほうが、解決は早そうだと思います。
目的の動きとは、見出し部分をクリックしソートが行われた直後のイベントをキャッチすることです。
ソート直後にメッセージボックスで「OK」等と出すことができれば目的達成です。
こんな感じでわかりますか?
ソート完了後に、メッセージを表示したい。
ということでOKだと思います。
参考リンクを見つけたのでどぞ
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11209&forum=7
上記リンクの ぞのぞの さんの発言と、
その中にあるリンク先を参考にしてもらえれば・・・。
解決できそうな予感
さささんありがとうございます。
とりあえず
CurrencyManager.ItemChanged
DataView.ListChanged
で試してみました。
Dim myCurrencyManager As CurrencyManager
Dim bc As BindingContext
Private Shared Sub OnSort(ByVal sender As Object, ByVal args As System.ComponentModel.ListChangedEventArgs)
Console.WriteLine("OnSort!" + Now)
End Sub
Private Shared Sub OnSort2(ByVal sender As Object, ByVal args As System.Windows.Forms.ItemChangedEventArgs)
Console.WriteLine("OnSort2!" + Now)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler dv.ListChanged, New System.ComponentModel.ListChangedEventHandler(AddressOf OnSort)
' tsv形式のファイルを読み込みDataTableを作成するメソッド
makeDataSet(vbTab)
myCurrencyManager = CType(Me.BindingContext(DataGrid1.DataSource), CurrencyManager)
AddHandler myCurrencyManager.ItemChanged, New System.Windows.Forms.ItemChangedEventHandler(AddressOf OnSort2)
End Sub
こんな感じのソースです。
しかしデータ読み込み時とカラムの変更時に[onsort!]は表示されますが
ソート時には表示されません。
また、[onsort2!]はどんなときも表示されませんでした。
(ちなみにBindingContext.CurrentChangedはBindingContextの取得方法が
わからなかったために試せていません。)
3種のイベントが発生しているとこのとですが、
どれか1つでも成功すれば、それで私の希望は達成します。
どこか記述が悪いところがあるのでしょうがわかりません。
ご指摘よろしくお願いします。
ようやく解決できました。
BindingContextの取得方法もしくは取得先がよくなかったようです。
検索用に結果を記述しておきます。
以下のソースで、DataGridの「何か」(ソート、カレント行、内容等)
が変化するとそのイベントを取得する事ができました。
Private Sub OnSort(ByVal sender As Object, ByVal args As EventArgs)
Console.WriteLine("OnSort!" + Now)
End Sub
AddHandler BindingContext(DataGrid.DataSource, "FileDataSet").CurrentChanged, New EventHandler(AddressOf OnSort)
もしくは
AddHandler BindingContext(DataGrid.DataSource, "FileDataSet").PositionChanged, New EventHandler(AddressOf OnSort)
それにしても…この辺の操作は難しいですね…
さささんありがとうございました。
ん〜、解決して何より。
自分このあたりで処理を考えてた時、
2晩ほど泊り込んだ時がありました。
ツイート | ![]() |