DataGridのソートイベントを取得するには?

解決


GOUF  2005-04-20 19:27:51  No: 89485

環境はVB.NET2003です。

DataGridの上部の見出し部分をクリックするとソートされますよね。
そのイベントを取得する方法というのはあるのでしょうか?どのようにすればいいのかわかりませんでした。

ソートだけでは内容の変更とはとらえないので、change系のイベントは発生しないようでしたし、単にクリックイベントだと、クリック直後のソートされる前にイベントを取得してしまい、目的の動きはできませんでした。

ご教授、よろしくお願いします。


ささ  2005-04-20 20:17:55  No: 89486

>目的の動きはできませんでした

目的の動きを説明したほうが、解決は早そうだと思います。


GOUF  2005-04-20 21:33:31  No: 89487

さささん
ありがとうございます。

>目的の動きを説明したほうが、解決は早そうだと思います。

目的の動きとは、見出し部分をクリックしソートが行われた直後のイベントをキャッチすることです。

ソート直後にメッセージボックスで「OK」等と出すことができれば目的達成です。

こんな感じでわかりますか?


ささ  2005-04-20 22:09:25  No: 89488

ソート完了後に、メッセージを表示したい。
ということでOKだと思います。

参考リンクを見つけたのでどぞ
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11209&forum=7


ささ  2005-04-20 22:11:24  No: 89489

上記リンクの ぞのぞの さんの発言と、
その中にあるリンク先を参考にしてもらえれば・・・。
解決できそうな予感


GOUF  2005-04-21 17:22:50  No: 89490

さささんありがとうございます。

とりあえず
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つでも成功すれば、それで私の希望は達成します。

どこか記述が悪いところがあるのでしょうがわかりません。
ご指摘よろしくお願いします。


GOUF  2005-04-23 20:13:13  No: 89491

ようやく解決できました。
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)

それにしても…この辺の操作は難しいですね…
さささんありがとうございました。


ささ  2005-04-24 04:36:43  No: 89492

ん〜、解決して何より。
自分このあたりで処理を考えてた時、
2晩ほど泊り込んだ時がありました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加