- PR -

GridViewデータの並べ替え

投稿者投稿内容
mtg
常連さん
会議室デビュー日: 2006/07/07
投稿数: 42
投稿日時: 2006-09-07 13:34
初心者です。
visualstudio2005でwebプログラムを開発中です。
質問ですが、データベースからGridViewに取り込んだデータをある項目を元に並べ替えたい
のですが、出来ますでしょうか。

1 2 3
-----
a b c
d e f
g h i



1 2 3
-----
a b c
g h i
d e f

というふうに
たとえば、上記の1を基準にして昇順・降順ではなく、aは1番目、gは2番目、dは三番目
という並べ替えを行いたいです。

教えてください。よろしくお願いいたします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-09-07 16:16
DataView の Sort プロパティでは対応できないと思うので、

地道に DataTable から DataRow を取り出して、
条件を元に新しい DataTable を作っていくしかないのかなー
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-09-07 16:34
こんにちは。

引用:

mtgさんの書き込み (2006-09-07 13:34) より:

たとえば、上記の1を基準にして昇順・降順ではなく、aは1番目、gは2番目、dは三番目
という並べ替えを行いたいです。


「aは1番目、gは2番目、dは三番目」というのはわかりますが、どういった基準
で「aが1番目」で「gが2番目」になるのかがわからないと難しいかもしれません
ね。
基本的にはかるあさんの案と同じになりますが、元の DataTable にソート用
のカラムを追加して、それでソートした結果を新しい DataTable に設定するの
ではどうでしょう。

コード:

1 2 3 4
---------
a b c 1
d e f 3
g h i 2

(4)列でソートして
1 2 3 4
---------
a b c 1
g h i 2
d e f 3


こんな感じで。
(4) 列は DB から取得する際は null で取得しておいて、あとから何らかの基準
(私にはわかりませんが)で値付けをしたのちにソートしてあげる感じです。
コードで書くと以下のようになります(検証はしていませんが)。

コード:

      DataTable oldTable = [DB から取り出したデータ]

      foreach (DataRow r in oldTable.Rows)
      {
        r["(4)"] = [何らかの基準で値を設定];
      }
      oldTable.DefaultView.Sort = "(4)";
      DataTable newTable = oldTable.DefaultView.ToTable();


_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
mtg
常連さん
会議室デビュー日: 2006/07/07
投稿数: 42
投稿日時: 2006-09-07 17:49
回答ありがとうございます。

並び替えの基準は、
データベースの値を元にGridViewを表示する前に
GridView項目のtextを変更して表示しています。

GridView.Rows(X).Cells(Y).Text = "あ"

それを基準にしたいのですが...

回答を参考にやってみます。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-09-07 19:36
引用:

mtgさんの書き込み (2006-09-07 17:49) より:

並び替えの基準は、
データベースの値を元にGridViewを表示する前に
GridView項目のtextを変更して表示しています。



プログラムから直接GridViewに書き込んでるデータで並び替えるんですか?
このデータはどういう基準でGridViewに書き込むのでしょうか。
そして、それをどういう基準で並び替えるのでしょうか。
すくなくともここででている話だけではプログラムに記述できそうにないのですが。。。
ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2006-09-08 08:47
頂いている情報だけでは、並び替えの規則が見えてきませんね。。。
SQLのOrder区では指定できそうにない並び替えのようにも見えますが
実際のところはどうなんでしょうね?

GridViewに表示する前に並び替えて構わないのであれば、
SQL文にUnionとか使ったらどうです?
mtg
常連さん
会議室デビュー日: 2006/07/07
投稿数: 42
投稿日時: 2006-09-08 13:44
回答が送れてすいません。

回答ありがとうございます。
説明不足ですいません。
やりたいのは、データベースからデータを取得するのですが、
フォーム上にSqlDataSourceを配置してあり、GridViewはそれをデータソースとしています。
プログラムを実行するとプログラム内でSQLを記述していて、SqlDataSource.SelectCommandに代入します。Page_PreRenderCompleteの後にGridViewのある項目を見て1なら"処理中"
2なら"処理済"、空なら"未処理"とGridViewの内容を書き換えています。
その後GridViewを表示する前に"処理中"、"未処理"、"処理済"の順番で並べ替えを
行いたいと思っています。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-09-08 14:53
データベースからデータを持ってくる時点で、
項目の値が1のもの
項目の値が空のもの
項目の値が2のもの
という順番になるようにSQL文を工夫するのがいいんじゃないかと思います。
そうすれば自分で並べ替えなんてする必要ないですよね。

スキルアップ/キャリアアップ(JOB@IT)