C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: Datagridviewの列の横軸展開


(過去ログ 52 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■28811 / inTopicNo.1)  Datagridviewの列の横軸展開
  
□投稿者/ オレンジネコ (1回)-(2008/12/01(Mon) 16:59:56)

分類:[.NET 全般] 

初めまして、オレンジネコと申します。

ここの掲示板に私と同じ質問をされている方がいましたので、その方の表をお借りしました。
ttp://bbs.wankuma.com/index.cgi?mode=al2&namber=4064&KLOG=4

開発環境:VB.net(2005pro)
DB:postgresql(ver1.8.2)

datagridview1
サイズ | カラー | サイズno| カラーno
-------------------------------------
1/1   |  A    |  1      | 1’
1/2   |  B    |  2      | 2’
1/2   |  A    |  3      | 3’
1/3   |  C    |  4      | 4’
1/4   |  A    |  5      | 5’
1/4   |  C    |  6      | 6’

↑上記を↓下記のように行いたいのです。 
   
サイズ\カラー| A    |   B  |  C   |
-------------------------------
1/1    | 1 1’|      |      | 
1/2      | 3 3' | 2 2' |      |
1/3      |      |      | 4 4’|
1/4      | 5 5’|      | 6 6’|

何か手段はありませんでしょうか?

色々と自分なりに調べたりしたのですが、参考になるような内容のものが
なかったので質問させて頂きました。

宜しくお願い致します。


引用返信 編集キー/
■28815 / inTopicNo.2)  Re[1]: Datagridviewの列の横軸展開
□投稿者/ みきぬ (253回)-(2008/12/01(Mon) 17:33:16)
とりあえず、素朴な方法をば。

1. こんな DataTable をこさえておく。

サイズ\カラー| Aサイズ| Aカラー | Bサイズ| Bカラー | Cサイズ| Cカラー 
--------------------------------------------------
1/1    |      |      |      |      |      |
1/2      |      |      |      |      |      |
1/3      |      |      |      |      |      |
1/4      |      |      |      |      |      |

2. ↓のレコードを1件ずつ、↑の DataTable にあてはめていく。

サイズ | カラー | サイズno| カラーno
-------------------------------------
1/1   |  A    |  1      | 1’
1/2   |  B    |  2      | 2’
1/2   |  A    |  3      | 3’
1/3   |  C    |  4      | 4’
1/4   |  A    |  5      | 5’
1/4   |  C    |  6      | 6’

引用返信 編集キー/
■28851 / inTopicNo.3)  Re[2]: Datagridviewの列の横軸展開
□投稿者/ オレンジネコ (2回)-(2008/12/02(Tue) 09:29:51)
No28815 (みきぬ さん) に返信

返信ありがとうございます。

テーブルはすでに作成していてデータも入ってしまっているので
テーブルの仕様変更という形は最終手段にしたいと考えています…。

それとわかりにくいですね・・すみません。
通常、レコードは縦に表示されますよね。
それを横に表示されていくようにしたいのです。

↓通常のdatagridview
サイズ | カラー |
-----------------
1/1  | A  |
1/2  | B  |
1/2  | A  |
1/3  | C  |
1/4  | A  |
1/4  | C  |


↓横に展開させたい。
サイズ\カラー| A | B | C |
-------------------------------
1/1    |
1/2 |
1/3 |
1/4 |

VB側でなんとかなりませんでしょうか?
引用返信 編集キー/
■28853 / inTopicNo.4)  Re[3]: Datagridviewの列の横軸展開
□投稿者/ みきぬ (255回)-(2008/12/02(Tue) 09:44:59)
No28851 (オレンジネコ さん) に返信
> ■No28815 (みきぬ さん) に返信
>
> 返信ありがとうございます。
>
> テーブルはすでに作成していてデータも入ってしまっているので
> テーブルの仕様変更という形は最終手段にしたいと考えています…。
>
いや別にDBのテーブルには何も変えなくていいのよ?
表示用に、DataTable クラスのインスタンスを用意するの。
で、DBのテーブルから取得したデータを、表示にあうように DataTable オブジェクトに入れてあげるの。
引用返信 編集キー/
■28867 / inTopicNo.5)  Re[4]: Datagridviewの列の横軸展開
□投稿者/ やじゅ (816回)-(2008/12/02(Tue) 13:00:31)
やじゅ さんの Web サイト
> ■No28851 (オレンジネコ さん) に返信
> いや別にDBのテーブルには何も変えなくていいのよ?
> 表示用に、DataTable クラスのインスタンスを用意するの。
> で、DBのテーブルから取得したデータを、表示にあうように DataTable オブジェクトに入れてあげるの。

案外、データテーブル作成する方法を知らない人が多いんだよね。

'データテーブル作成
Dim dtTest As DataTable = New DataTable

dtTest.Columns.Add("SizeAndColor", GetType(String))
dtTest.Columns.Add("A", GetType(String))
dtTest.Columns.Add("B", GetType(String))
dtTest.Columns.Add("C", GetType(String))


'データ作成 縦データを読んで横展開していく
Dim drAdd As DataRow

drAdd = dtTest.NewRow()
drAdd("SizeAndColor") = "1/1"
drAdd("A") = "1 1'"
drAdd("B") = ""
drAdd("C") = ""
dtTest.Rows.Add(drAdd)

'グリッドのDataSource に dtTest をセット
datagridview.DataSource = dtTest

引用返信 編集キー/
■28871 / inTopicNo.6)  Re[4]: Datagridviewの列の横軸展開
□投稿者/ オレンジネコ (4回)-(2008/12/02(Tue) 13:28:06)
No28853 (みきぬ さん) に返信

返信ありがとうございます。

言葉足らずですみません。
今回私がやりたいことでは、サイズ、カラーのところが可変なんです。

日付入力フォームで入力された値によってDBからもってくるサイズ、カラーの数が変わってくるようなものを作り
たいと思っています。
引用返信 編集キー/
■28876 / inTopicNo.7)  Re[5]: Datagridviewの列の横軸展開
□投稿者/ みきぬ (257回)-(2008/12/02(Tue) 13:57:02)
No28871 (オレンジネコ さん) に返信
> ■No28853 (みきぬ さん) に返信
>
> 返信ありがとうございます。
>
> 言葉足らずですみません。
> 今回私がやりたいことでは、サイズ、カラーのところが可変なんです。
>
> 日付入力フォームで入力された値によってDBからもってくるサイズ、カラーの数が変わってくるようなものを作り
> たいと思っています。

いやわかってますよ。だからこそ、この方法を提案したのですから。
ただ残念ながら、私の力ではオレンジネコさんに説明することは難しいようです。
引用返信 編集キー/
■28879 / inTopicNo.8)  Re[5]: Datagridviewの列の横軸展開
□投稿者/ 魔界の仮面弁士 (920回)-(2008/12/02(Tue) 14:09:30)
No28871 (オレンジネコ さん) に返信
> 今回私がやりたいことでは、サイズ、カラーのところが可変なんです。

可変と言っても、問い合わせた結果を数えていけば、それぞれの数は分かりますよね。

あとはそれらの個数に合わせて、格納先となる
>> dtTest.Columns.Add("B", GetType(String))
の列の数を増減させればよろしいかと。


もし PostgreSQL が、クロス集計やキューブのための SQL 構文を持っているのなら、DB 側だけで
処理できるでしょうけれども、そうした機能が無いという事であれば、 No28815 , No28867 案を用いて
VB 側で横展開させる必要があると思いますよ。(PostgreSQL の事は専門外なのでわかりません)
引用返信 編集キー/
■28906 / inTopicNo.9)  Re[5]: Datagridviewの列の横軸展開
□投稿者/ オレンジネコ (5回)-(2008/12/02(Tue) 16:21:00)
みなさんありがとうございます。
おかげさまでなんとか横表示はできました。
ですが縦の列がうまくできませんでした…

現在の状況
datagridview
   |カラー1|カラー2|カラー3|カラー4|…
------------------------------------------------
   |  赤 |  白 | 黄  |  茶 |
------------------------------------------------
   |    |    |    |    |
------------------------------------------------

↑これを↓このようにできたらいいと思っています。

    |カラー1|カラー2|カラー3|カラー4|…
------------------------------------------------
サイズ1|  赤 |  白 | 黄  |  茶 |
------------------------------------------------
サイズ2|    |    |    |    |
------------------------------------------------

以下に今現在のコードを乗せておきます。

Dim aatable As New Data.DataTable
        aatable.Columns.Add("カラー1")
        aatable.Columns.Add("カラー2")
        aatable.Columns.Add("カラー3")
        aatable.Columns.Add("カラー4")
        aatable.Columns.Add("カラー5")

Dim aarow2 As Data.DataRow
        aarow2 = aatable.NewRow
        aarow2.Item(0) = TestDataSet.Tables(0).Rows(0).Item("testcolor")
        aarow2.Item(1) = TestDataSet.Tables(0).Rows(1).Item("testcolor")
        aarow2.Item(2) = TestDataSet.Tables(0).Rows(2).Item("testcolor")
        aarow2.Item(3) = TestDataSet.Tables(0).Rows(3).Item("testcolor")
        aarow2.Item(4) = TestDataSet.Tables(0).Rows(4).Item("testcolor")

aatable.Rows.Add(aarow2)
        Me.DataGridView1.DataSource = aatable

よろしくお願いします。

引用返信 編集キー/
■28921 / inTopicNo.10)  Re[6]: Datagridviewの列の横軸展開
□投稿者/ 魔界の仮面弁士 (922回)-(2008/12/02(Tue) 17:09:16)
No28906 (オレンジネコ さん) に返信
> おかげさまでなんとか横表示はできました。
> ですが縦の列がうまくできませんでした…

No28811 の例で言うと:

まず、縦に並んでいる元データがあるのですよね。
>>> サイズ | カラー | サイズno| カラーno
で、それを横並びにした
>>> サイズ | A | B | C | …
という DataTable の枠を作るところまでは完成、という事で良いですか?

結果を格納するための横長テーブルまでは完成しているのであれば、
あとは、そこに順番に格納していけば OK 。イメージとしてはこうかな…。


'=======================================================

'格納先を見つけやすいよう、主キーを定義しておく
結果テーブル.PrimaryKey = New DataColumn() {結果テーブル.Columns("サイズ")}

'元データを列挙
For Each rowSrc As DataRow In 元テーブル.Rows
 Dim key As String = CStr(rowSrc("サイズ"))
 Dim col As String = CStr(rowSrc("カラー"))
 Dim sizeNo As String = CStr(rowSrc("サイズno"))
 Dim colNo  As String = CStr(rowSrc("カラーno"))

 '格納先となるレコードを探す
 Dim rowDst As DataRow = 結果テーブル.Rows.Find(key)
 If rowDst Is Nothing Then
  'まだ登録されていない行ならば、新行追加
  rowDst = 結果テーブル.NewRow()
  rowDst("サイズ") = key
  結果テーブル.Rows.Add(rowDst)
 End If

 'データ格納
 rowDst(col) = sizeNo & " " & colNo
Next

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -