まだ明確になっていない部分もあるのですが、
備忘として動的に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
--------------------------------------
ただ、この方法ですと
テキストボックスなどのコントロールが含まれる場合には対応できません。
その対応方法について次回、書きます。