C#初心者です。
datagridviewを使用して、ヘッダーが行ヘッダーとなる表を作成しようとしております。
完成させる表は簡単ですが、下記のイメージです。
h1,h2,h3がヘッダになります。
h1 | v00 | v01 |
---|---|---|
h2 | v10 | v11 |
---- ---- ---- | ||
h3 | v20 | v21 |
---- ---- ---- |
しかし、下記のようなソースコードで実行しているのですが、うまく表が作れません。
ちなみに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がヘッダになります。
h1 | v00 | v01 |
---|---|---|
h2 | v10 | v11 |
---- ---- ---- | ||
h3 | v20 | v21 |
---- ---- ---- |
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。