- - PR -
DataGridでソート後の選択行を取得したい
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-18 12:29
IDとNameという2つカラムを持ったDataTableをひとつ持ったDataSetをDataGrid(名前はdgDataSet)のDataSourceに設定しています。
ID Name 1 名前1 2 名前2 3 名前3 これをIDでソートして (DataGridのID列をクリックしてソート) ID Name 3 名前3 2 名前2 1 名前1 と並び替えてから、最初の行(DataGridのID=3の行)をクリックすると ID=1、Name=名前1 の行が選択されてしまいます・・ 選択行を取得するコードは以下を使用しています。 DataGrid.HitTestInfo info = ((DataGrid)sender).HitTest(e.X, e.Y); int selectedIndex = info.Row; 一応 DataView view = ((DataSet)this.dgSample.DataSource).Tables[0].DefaultView; int result = (int)view[selectedIndex]["ID"]; と記述して確認したのですが、やはり並び替え前の値(ID=1)が取得されてしまいます・・ ソート後に行を選択して、正しい値を取得するにはどうしたら良いのでしょうか? VisualStudio2003 Pro + Win2000 ServerでWindowsフォームで開発しています。 宜しくお願いいたします。 | ||||||||
|
投稿日時: 2004-11-18 12:52
としてしまうと、並べ替える前のビューに対して操作していますよね。
じゃだめですか? | ||||||||
|
投稿日時: 2004-11-18 12:57
にしざきさん、レスありがとうございます。
DataGridのDataSourceにDataSetを設定して、DataMemberでDataTable名を指定している為、 view = (DataView)this.dgSample.DataSource; ではキャストエラーが出てしまいます・・ ここでふと思ったのですが、DataSourceにDataViewを渡さないと、ソート後の選択行は取得できないのでしょうか? | ||||||||
|
投稿日時: 2004-11-18 13:14
あ、本当だ。なら、
でどうでしょうか。 | ||||||||
|
投稿日時: 2004-11-18 14:56
BindingContextを使う方法でもやはりダメでした・・
DataSourceにDataSetではなく、DataViewを渡してやってみます。 | ||||||||
|
投稿日時: 2004-11-18 15:10
Osです。
確認ですが、ソート後の現在選択されているセルまたは行のDataRowが取得できればいいのであれば、以下の方法でカレントレコードが取得できるかと思います。 CurrencyManager cm = (CurrencyManager)this.BindingContext this.dgSample.DataSource]; DataRow dr = ((DataRowView).Current).Row; | ||||||||
|
投稿日時: 2004-11-18 16:24
結局
DataRow row = ((DataRowView)dgSample.BindingContext[dgSample.DataSource, dgSample.DataMember].Current).Row; というコードを当初のMouseDownイベントではなくて、CurrentCellChangedイベントに記述することで希望通りの処理を行うことができました。 みなさん、本当にありがとうございました。 | ||||||||
1
