Custom control generation and using ContentTemplate
Context:
An AJAX Control Toolkit TabContainer, where each TabPanel is generated
with code behind, and contains a tab-specific GridView.
The custom control corresponds to the content of a TabPanel:
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="SampleGrid.ascx.cs" Inherits="WebGUI.Controls.SampleGrid" %>
<asp:ObjectDataSource ID="SampleDataSource" runat="server"
TypeName="WebGUI.ViewClasses.DetailViewer" SelectMethod="GetCollationData"
SelectCountMethod="GetCollationCount">
<SelectParameters>
<asp:Parameter Name="SampleId" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
<asp:GridView ID="SampleGrid" runat="server" AutoGenerateColumns="False"
DataSourceID="SampleDataSource" DataKeyNames="Id">
<Columns>
<asp:BoundField Visible="false" DataField="Id" />
<asp:BoundField HeaderStyle-HorizontalAlign="Center"
ItemStyle-HorizontalAlign="Right" DataField="Number"
HeaderText="Number" HtmlEncode="false" />
<!--- ... -->
</Columns>
</asp:GridView>
And code behind:
public partial class SampleGrid : UserControl, ITemplate
{
public int SampleId
{
set
{
SampleDataSource.SelectParameters["SampleId"].DefaultValue =
value.ToString();
}
}
public void InstantiateIn(Control container)
{
container.Controls.Add(this);
}
public override void DataBind()
{
SampleGrid.DataBind();
}
}
Creation:
private void FillSamplesPanel(Sample sample)
{
var sampleGrid = LoadControl("~/Controls/sampleGrid.ascx") as SampleGrid;
if (sampleGrid != null)
{
sampleGrid.SampleId = sample.Id;
sampleGrid.DataBind();
SamplesTabContainer.Tabs.Add(new TabPanel
{
HeaderText = "Sample1",
ContentTemplate = collationSampleGrid
});
}
}
The problem is I that while I can step through the actual data binding
process, the grid does not show. I figure I'm missing something in
InstantiateIn. How can I generate the custom control as a ContentTemplate
and display it?
No comments:
Post a Comment