- - PR -
ASP.NET DataGridでソート後の選択について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-10-22 23:29
ASP.NETでXMLをDatasetに読み込み、DataGridに表示、選択されると中身をTextBoxに表示するコードを書いています。
http://www.atmarkit.co.jp/fdotnet/dotnettips/076reversedg/reversedg.html を参考に(コピペですが)双方向ソートを付けたのですが、ソート後に 選択(SelectedIndexChanged)を行ってもソート前の項目が選択されてしまいます。 ソース(C#)は DataView getXML() { this.dataSet1.ReadXml(Server.MapPath(@"hoge.xml")); this.DataGrid1.DataSource = this.dataSet1.Tables["hoge"]; DataView dv = this.dataTable1.DefaultView; dv.Sort = (string)ViewState["sort order"]; return dv; } private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e) { this.DataGrid1.DataSource = getXML(); this.TextBox1.Text = this.dataTable1.Rows[this.DataGrid1.SelectedItem.DataSetIndex]["subject"].ToString(); this.DataGrid1.SelectedItemStyle.Font.Bold = true; this.DataGrid1.DataBind(); } また、DataGrid1_SortCommandの最後に ViewState["sort order"] = dv.Sort; を加えてあります。 また、Page_load時は何もしていません。 よろしくお願いします。 | ||||||||
|
投稿日時: 2004-10-23 05:45
Webアプリケーションの場合、プログラムが走るときには都度都度、新しいオブジェクトが作られます。ということを、いつも念頭に置いてください。
ソートイベントでソートしても、セレクトイベントで毎回ファイルから読み込んで、ソートしていないのでは、「ソート前」の結果になるのは当然ですよね。 #ソースをステップごとに「何をしているか」確認しましょう _________________ | ||||||||
|
投稿日時: 2004-10-23 11:01
private void DataGrid1_SelectedIndexChanged
で this.DataGrid1.DataSource = getXML(); する時点でソートされた状態がセットされていると自分では思っていたのですが。 選択ボタンをクリックしてもDataGrid自体にはソートされた状態で表示されているので いけてるかなと。 最初DataView getXML() の中でソートしてないときは 選択を押すたびにDataGridの表示自体がソート前に戻っていたので ご指摘いただいた点を考慮して今のソースにしました。 | ||||||||
|
投稿日時: 2004-10-23 11:26
あ、失礼。読み間違ってましたね。
#見る人にソースから「何をしているか」解かせるのではなく、 #「こういう手順でこうしている」ことを示しませんか?
DataTableからDataViewを導き出していますが、このDataViewは、DataTableから独立しています。DataViewのソート順を変更しても、DataTableの順序は変わっていません。DataViewからアクセスしましょう。 [追記] 「独立」というのは間違っているなぁ。適切な言葉が思い浮かばないのでそのままにしておきますが、意図は「DataViewのソート順を変更しても、DataTableの順序は変わっていません」のところです。 [/追記] _________________ Microsoft MVP for Visual Developer - ASP/ASP.NET on 2004 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-10-23 11:39 ] | ||||||||
|
投稿日時: 2004-10-24 00:10
Jittaさん何度もありがとうございます。
DataViewもDataSourceに指定できるのでDataTableと同列だと思い込んでました。 dataTableではなく直接DataGridのCellを参照すれば中身は取れそうですね。 ソートされた後でDataGridで選ばれたものが DataTableの何行目にあたるのかを見るには何か方法があるのでしょうか? 質問ばかりですいません。 | ||||||||
|
投稿日時: 2004-10-24 09:22
この場合、DataSource に設定した DataView を用いて、
として DataRow を取得するのがいいかと。 | ||||||||
|
投稿日時: 2004-10-24 17:41
にしざきさんありがとうございました。
でいけました。 この場合は
にするとちゃんとdataTableへTextBoxでの変更が反映されるんですね。 ありがとうございました。 |
1