- - PR -
データグリッドテンプレート列の動的作成について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-06-09 15:56
vb.netでWebアプリケーションを開発しています。
プログラムから動的にデータグリッドの列を作成する際に、データ型を判断して、BoundColumnとTemplateColumnを作成する関数をつくったのですが、TemplateColumnの方だけ、値が入らないようで困っています。 Public Sub DataGridColumnAdd(ByVal dg As DataGrid, ByVal type As System.Type,_ ByVal strDataField As String, ByVal strHeaderText As String) Try Select Case True Case type Is GetType(Decimal) 'DataGridの列を設定 Dim tc As New TemplateColumn tc.HeaderTemplate = New Template.DataGridTemplateNum(ListItemType.Header, strHeaderText) tc.ItemTemplate = New Template.DataGridTemplateNum(ListItemType.Item, strDataField) dg.Columns.Add(tc) Exit Try End Select 'DataGridの列を設定 Dim bc As New BoundColumn bc.DataField = strDataField bc.HeaderText = strHeaderText dg.Columns.Add(bc) Catch ex As Exception Throw (ex) End Try End Sub Public Class Template Public Class DataGridTemplateNum Implements ITemplate Dim templateType As ListItemType Dim columnName As String Public Sub New(ByVal type As ListItemType, ByVal ColName As String) templateType = type columnName = ColName End Sub Sub InstantiateIn(ByVal container As Control) _ Implements ITemplate.InstantiateIn Dim lc As New Literal Select Case templateType Case ListItemType.Header lc.Text = columnName container.Controls.Add(lc) Case ListItemType.Item AddHandler lc.DataBinding, AddressOf TemplateControl_DataBinding Case ListItemType.EditItem Case ListItemType.Footer End Select End Sub Private Sub TemplateControl_DataBinding(ByVal sender As Object, ByVal e As System.EventArgs) Dim lc As Literal lc = CType(sender, Literal) Dim container As DataGridItem container = CType(lc.NamingContainer, DataGridItem) lc.Text = DataBinder.Eval(container.DataItem, columnName) End Sub End Class End Class AddHandlerは実行されていますが、TemplateControl_DataBindingでcolumnNameに直接リソースの列名を指定しても、lc.Textに文字列「aaa」を入れても空値になってしまいます。 どなたか分かる方、アドバイスよろしくお願いします。 |
|
投稿日時: 2006-06-09 16:56
私も少し前に、同じような質問をしました(^_^;)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31015&forum=7&1 #コードは、BBコードで囲むと見やすくなりますよ。 |
|
投稿日時: 2006-06-09 18:23
URLありがとうございます。
よく見てみたところ、AddHandlerの後にcontainer.Controls.Addが抜けていました。 お騒がせしてすみません〜。 Case ListItemType.Item AddHandler lc.DataBinding, AddressOf TemplateControl_DataBinding container.Controls.Add(lc) |
1