- PR -

DataGridのヘッダを2行にする方法

投稿者投稿内容
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-09-15 00:35
引用:

Controlsの数値だけではない?


DataGrid1.Controls(0).Controls.AddAt(0, item) の意味は、次のようになります。
DataGrid1.Controls(0)はDataGridTableを表します。これに全てのDataGridItemが属しますので、DataGrid1.Controls(0).Controlsで、DataGridItemの集合ということになります。この集合にAddAtで、0行目の位置に、新しく作成したDataGridItemを追加しています。0行目は一番上になりますので、既存のヘッダ行の上に新しいヘッダ行を追加することになります。

セルの結合はColumnSpanで行います。ColumnSpan=3とすれば、そのセルは1つで3列分の幅を取ることになります。
既存のヘッダ行が6列からなれば、セル1、セル2(ColumnSpan=2)、セル3(ColumnSpan=2)、セル4からなる新しいヘッダ行を追加した場合、イメージ的には以下のようになります。
コード:
+--------------------------------+ 
|aaaaa|bbbbbbbbbb|ccccccccc|ddddd| 
+-----+-----+----+----+----+-----+ 
|eeeee|fffff|gggg|hhhh|iiii|jjjjj| 
+--------------------------------+ 

ねっとふぁん
会議室デビュー日: 2005/09/09
投稿数: 5
投稿日時: 2005-09-15 11:56
丁寧な解説ありがとうございます。できました!!

If e.Item.ItemType = ListItemType.Footer Then
item = New DataGridItem(0, 0, ListItemType.Header)
cell = New TableCell()
cell.ColumnSpan = 1
item.Cells.Add(cell)
cell.Text = "aaa"
DataGrid1.Controls(0).Controls.AddAt(0, item)
cell = New TableCell()
cell.ColumnSpan = 2
item.Cells.Add(cell)
cell.Text = "bbb"
DataGrid1.Controls(0).Controls.AddAt(0, item)
cell = New TableCell()
cell.ColumnSpan = 2
item.Cells.Add(cell)
cell.Text = "ccc"
DataGrid1.Controls(0).Controls.AddAt(0, item)
cell = New TableCell()
cell.ColumnSpan = 1
item.Cells.Add(cell)
cell.Text = "ddd"
DataGrid1.Controls(0).Controls.AddAt(0, item)
End If

DataGrid1.Controls(0)はこのままでよかったのですね。
単にセル結合の記述を制御するだけでできました。
ホントよかったです。

最後にひとつだけ、この追加行でセル結合した項目を
center位置に配置したのですが、可能でしょうか??
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-09-15 23:22
考え方としては、以下のようになるはずです。

item = New DataGridItem(-1, -1, ListItemType.Header)

cell = New TableCell()
cell.ColumnSpan = 1
cell.Text = "aaa"
item.Cells.Add(cell)

cell = New TableCell()
cell.ColumnSpan = 2
cell.Text = "bbb"
item.Cells.Add(cell)

cell = New TableCell()
cell.ColumnSpan = 2
cell.Text = "ccc"
item.Cells.Add(cell)

cell = New TableCell()
cell.ColumnSpan = 1
cell.Text = "ddd"
item.Cells.Add(cell)

DataGrid1.Controls(0).Controls.AddAt(0, item)

>最後にひとつだけ、この追加行でセル結合した項目を
>center位置に配置したのですが、可能でしょうか??

cell.Attributes["align"] = "center"
でいけると思います。
ねっとふぁん
会議室デビュー日: 2005/09/09
投稿数: 5
投稿日時: 2005-09-16 13:19
コード記述していただき感謝します。
CENTER位置については、
cell.Attributes.Add("ALIGN", "CENTER")
で実現できました。
しかし項目にWIDTH指定を記述すると、CENTER位置に
ならないケースがあります。
とにかく目的のヘッダ2行記述ができました。
いろいろお手数おかけしました。
あらためましてお礼申し上げます。

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