質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

1358閲覧

[C#]下記について、教えてください。

henoheno

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2015/09/10 05:08

編集2015/09/10 08:44

C#初心者です。
datagridviewを使用して、ヘッダーが行ヘッダーとなる表を作成しようとしております。

完成させる表は簡単ですが、下記のイメージです。
h1,h2,h3がヘッダになります。


h1v00v01
h2v10v11
---- ---- ----
h3v20v21
---- ---- ----

しかし、下記のようなソースコードで実行しているのですが、うまく表が作れません。
ちなみにdataGridViewSは、dataGridViewを機能拡張しています。
基本的な使い方はdatagridviewと同じだとおもっております(他の人が作成)

##################### # ヘッダ設定 ##################### private enum headernames { h1, h2, h3 } ArrayList a = new ArrayList(); int rowNum = 0; foreach (headernames name in Enum.GetValues(typeof(headernames))) { a.Add(name); rowNum++; } string[,] b = new string[rowNum, 1]; for (int i = 0; i < b.GetLength(0); i++) { b[i, 0] = Convert.ToString(a[i]); } this.dataGridViewS.FixedRows = b.GetLength(0); this.dataGridViewS.FixedRowText = b; for (int i = 0; i < this.dataGridViewS.FixedRows; i++) { this.dataGridViewS.FixedRowMergeRow[i] = true; } for (int ix1 = 0; ix1 < this.dataGridViewS.RowCount; ix1++) { this.dataGridViewS.FixedRowMergeCol[ix1] = true; this.dataGridViewS.Columns[ix1].SortMode = DataGridViewColumnSortMode.NotSortable; } this.dataGridViewS.MergeCells = dataGridViewS.dataGridViewS.DataGridViewMergeCellsStyle.FixedOnly; dataGridViewS.FixedRowHeight[0] = 25; int flg1 = 0; for (int i = 0; i < b.Length; i++) { DataGridViewCell dgvCell = new DataGridViewTextBoxCell(); DataGridViewColumn e = new DataGridViewColumn(); e.Name = b[i, 0]; //表示テキストの設定 e.HeaderText = b[i, 0]; dgvCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft; e.CellTemplate = dgvCell; e.MinimumWidth = 200; e.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader; e.Frozen = true; if (flg1 == 0) { dataGridViewS.Columns.Add(e); flg1++; } dgvEx.FixedRowText[i, 0] = e.HeaderText; gMethod.dgvNewRow(dataGridViewS); } ##################### # ヘッダ以外の値設定 ##################### DataGridViewCell dgvCell = new DataGridViewTextBoxCell(); DataGridViewColumn e = new DataGridViewColumn(); dgvCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft; e.CellTemplate = dgvCell; e.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCellsExceptHeader; e.Frozen = true; dataGridViewS.Columns.Add(e); dataGridViewS.Rows[0].Cells[1].Value = "v00"; dataGridViewS.Rows[1].Cells[1].Value = "v10"; dataGridViewS.Rows[2].Cells[1].Value = "v20"

実行すると、下記のように表示されます。
2列×6行の結果となっております。
2列×3行がグレー色で塗られており、ここがいわゆるヘッダーになってしまっています。
4行目が青くなっているのは選択されているからです。

イメージ説明

作成するのは行ヘッダを含めて3×3の表なのですが、試行錯誤している中で上記のような状態に現在なっております。
本当は、ヘッダ以外の値設定のところで、v01,v11,v21を設定しなければならないのですが、v00,v10,v20
すら表示されないので、今はわざと設定してません。
二列目のグレー部が出ているのも試行錯誤しているためです。

また、ヘッダー(h1,h2,h3,h4・・・hN)を増やして試したりしているときに、下部の行を見たかったのですが、スクロールバー(垂直)
が表示されなかったため、スクロールすることができませんでした。
上記画像の状態から白い部分(4行目以下)が増える分にはスクロール(垂直)は出現しました。
ヘッダのみ増やしたときはスクロールは表示されないのでしょうか?

きれいさっぱりにして、全くの無からソースを書き直しても構いません。但し、ヘッダーやヘッダ以外の部分のフォントやセルの色などは可能な限り合わせていただきたいです。(ヘッダは選択できない。ヘッダ以外を選択すると行単位で青色になる。ダブルクリックしても編集できない。ヘッダ以外は、奇数行はうっすらと水色、偶数行は白色など)
シンプルで効率の良いやり方(記述)を具体的に教えていただけますでしょうか?

追記:

回答がないため、追記します。
色々書きましたが、まどろっこしいことなしに、下記に示すような表をdatagridviewで実現するための、具体的なソースコードを教えていただけますか?

h1,h2,h3がヘッダになります。


h1v00v01
h2v10v11
---- ---- ----
h3v20v21
---- ---- ----

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ちなみにdataGridViewSは、dataGridViewを機能拡張しています。
基本的な使い方はdatagridviewと同じだとおもっております(他の人が作成)

とありますので、DataGridViewと同じだと想定して以下を書いています。(「おもっております」という表現に一抹の不安はありますが……、これは質問者の方で作成された方にご確認いただくしかありません)

具体的なコードではないですが、ご質問で掲載されているコードを拝見して間違っていると思われる点を指摘させていただきます。

  • 行ヘッダの指定方法

ご質問の意図を酌むと、指定すべきなのは行ヘッダです。現状のコードではカラムヘッダを指定していますので、意図したとおりに表示されていないのだと思います。
ですので、行のデータをセットするコードを下記のようにしてみてください。

C#

1 // 配列bが{{ [ヘッダ],. [データ1], [データ2],...} , ..}という二次元配列と仮定しています。 2 for (int i = 0; i < b.Rank; i++) 3 { 4 // ヘッダ 5 this.dataGridViewS.Rows[i].HeaderCell.Value = b[i, 0]; 6 // データ 7 for (int j = 0; j < b.GetLength(i) - 1; j++) 8 { 9 this.dataGridViewS.Rows[i].Cells[j].Value = b[i, j + 1]; 10 } 11 }

投稿2015/09/19 13:46

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問