- 締切済み
GridViewにグループ化して表示させたい
ASP.NETの勉強のためにチームのメンバーを管理する ページを作っています。 VisualWebDeveloper2008のVBで作っています。 DBにはチーム名とチームの所属メンバーとメンバー一覧の3テーブルがあります。 これらをJOINしてGridViewに表示させたいと思います。 検索結果ではAチームに3人いる場合、3レコード取得されます。 画面に表示させるときには1レコードでメンバーの列だけ3行にしたいと思います。 Templateを指定するとできそうな気がするのですが、メンバーを検索するデータソースの条件にその行のチームコードを指定する方法が分かりません。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- natsu_0124
- ベストアンサー率0% (0/0)
GridViewにBindする前に、クエリの結果を格納したDatatableをいじってから Bindを行えば 1行目| Aチーム | AAA | | BBB | | CCC 2行目| Bチーム | DDD という表示は可能な気がします。 方法としては単純に For i as integer = 0 to datatable.rows.count -1 if i > 0 then if datatable.rows(i)("チーム名").Tostring.equals(datatable.rows(i-1)("チーム名").Tostring) then datatable.rows(i)("チーム名") = String.Empty end if end if Next i (Aチーム、Bチームも同様の処理を行う) この後、GridViewにバインドを行う。 といった感じに、前の行と今の行が同一の文字列なら空文字を入れる という処理で解決できないでしょうか? 的を射ていない回答であれば申し訳ないですが・・。
- natsu_0124
- ベストアンサー率0% (0/0)
>> 画面に表示させるときには1レコードでメンバーの列だけ3行にしたいと思います。 この部分が少しわかりません・・。 SELECT [メンバー一覧].[メンバー名] FROM [チーム名] LEFT JOIN [チームの所属メンバー] ON [チーム名].[チーム名の主キー] = [チームの所属メンバー].[チームの所属メンバーの主キー] LEFT JOIN [メンバー一覧] ON [チーム名].[チーム名の主キー] = [メンバー一覧].[メンバー一覧の主キー] WHERE <検索条件> で、検索条件に合致したチームメンバー名が SELECTの結果として3件返ってきたとします。 クエリーの結果 AAAA BBBB CCCC それをGridViewでは1レコードで3行(3列?)で AAAA|BBBB|CCCC|・・・・ としたいということでしょうか? >>メンバーを検索するデータソースの条件にその行のチームコードを指定する方法が分かりません。 データソースの条件というかSQLクエリに対する条件に チームコード(恐らくチーム名テーブルの主キー?)を指定する方法が わからないということでしょうか? 検索をどのように行うのかイメージをお伝え頂ければもう少しお力になれるかもしれません。 例えば (1)画面上にはチーム名を入れるテキストボックスがあり、 そこにチーム名を入力すると、該当するチームが表示される。 (2)画面上のGridに表示されたチームをラジオボタン等で選択、 またはボタン等を押下すると画面が遷移し、チームの詳細が閲覧できる。 また、画面上にチームの主キーを表示するかどうかで 内部的に値を持たせるか画面上から主キーを拾って表示するか等で めんどくささが変わってくると思います。 ##DBのレイアウトですが、チーム所属メンバーとメンバー一覧は分けなくても良いのではないでしょうか? チーム所属メンバーテーブルに チームの主キー |メンバーの主キー(2)|メンバーの情報 所属メンバーテーブルとメンバー一覧を分ける意図はあるのでしょうか?
補足
ありがとうございます。 画面のイメージは チーム名 | メンバー 1行目| Aチーム | AAA | | BBB | | CCC 2行目| Bチーム | DDD ・・・ のようにしたいです。テーブルのSELECTは合っています。 GridViewにメンバーがいるか?といわれるといらない気もしますが これはGridViewの勉強なのでデータの意味はあまり問題にしていません。 現行のシステムで、VBScriptでこのような見栄えを作っているので 移植できるかどうかを試しています。 テーブル構造ですが、 「メンバーはそれぞれ情報をもっていて複数のチームに所属できる」 として、正規化したら3つに分かれました。
補足
ありがとうございます。 挑戦します。