2005.07.15

DataGridの列数を変化させる方法1

 まだ明確になっていない部分もあるのですが、
 備忘として動的にDataGridの列数を変化させる方法について書き留めておきます。
 
■列数を可変にする
 大きく分けて、方法は3つあります。
 
1.AutoGenerateColumns = true にする
 実行時に自動的に列を作成するようにしておき、
 SELECT文で調節します。
 
2.Repeater、DataList等の組み合わせで代用
 DataGridでは常に縦方向ですが、
 Repeaterなどでは横方向にも出力できます。
 入れ子にしたり、カスタムコントロールを作成するなどで
 同様の処理を実現可能だと思われます。
 ですが、この方法は私は未検証です。すみません。
 
3.列をコードで足す
 デザインではBoundColumnを設定せず、
 コード側で足してあげるようにします。
 今回はこの方法が主題です。

※動的にコントロールを生成する場合の注意事項
 DataGridに限らず、
 ただ生成しただけであると、PostBack時にコントロールが消えてしまいます。
 そのため、Page_Initでコントロールを生成する(関数を呼び出す)必要があります。
 
--------------------------------------
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
' CODEGEN: このメソッド呼び出しは Web フォーム デザイナで必要です。
' コード エディタを使って変更しないでください。
InitializeComponent()
'データグリッドの枠組み作成
Me.CreateGridColumns()

End Sub


'データグリッドの枠組み作成
'(データグリッドの列数を可変にする)
Private Sub CreateGridColumns()

For iIdx As Integer = 1 To 50
Dim bc As New BoundColumn
With bc
.DataField = "ColumnName" & iIdx.ToString("00")
.ItemStyle.Width = Unit.Pixel(10)
.ItemStyle.Height = Unit.Pixel(50)
.ItemStyle.Wrap = False
.ItemStyle.CssClass = "SampleCss"
.ReadOnly = True
End With
Me.dg.Columns.Add(bc)
Next

End Sub

--------------------------------------

 ただ、この方法ですと
 テキストボックスなどのコントロールが含まれる場合には対応できません。
 その対応方法について次回、書きます。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
admin