I am adding a working example here. I wish they would let you upload zip files to the forums.
<%@ Page Title="" Language="C#" MasterPageFile="~/Shared/Master/Site.Master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="RadControlsDynamicTabStrip.Grid" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script type="text/javascript">
function onTabSelecting(sender, args) {
if (args.get_tab().get_pageViewID()) {
args.get_tab().set_postBack(false);
}
}
</script>
<style type="text/css">
.viewWrap
{
padding: 5px;
background: #e0e0e0;
}
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<telerik:RadGrid ID="RadGrid1" runat="server" AllowSorting="true" Width="100%" GridLines="None"
AutoGenerateColumns="False" AllowAutomaticDeletes="True" OnItemDataBound="RadGrid1_ItemDataBound"
OnNeedDataSource="RadGrid1_NeedDataSource">
<PagerStyle Mode="NextPrevAndNumeric" />
<MasterTableView Width="100%" CommandItemDisplay="None" DataKeyNames="Id" HorizontalAlign="NotSet"
AutoGenerateColumns="False">
<NestedViewTemplate>
<asp:Panel runat="server" ID="InnerContainer" CssClass="viewWrap">
<telerik:RadAjaxLoadingPanel runat="server" ID="LoadingPanel1" />
<telerik:RadAjaxManagerProxy runat="server" ID="RadAjaxManagerProxy1">
<AjaxSettings>
<telerik:AjaxSetting AjaxControlID="RadTabStrip1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="RadTabStrip1" />
<telerik:AjaxUpdatedControl ControlID="RadMultiPage1" LoadingPanelID="LoadingPanel1" />
</UpdatedControls>
</telerik:AjaxSetting>
<telerik:AjaxSetting AjaxControlID="RadMultiPage1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="RadMultiPage1" LoadingPanelID="LoadingPanel1" />
</UpdatedControls>
</telerik:AjaxSetting>
</AjaxSettings>
</telerik:RadAjaxManagerProxy>
<telerik:RadTabStrip OnClientTabSelecting="onTabSelecting" ID="RadTabStrip1" SelectedIndex="0"
Width="100%" runat="server" MultiPageID="RadMultiPage1" OnTabClick="RadTabStrip1_TabClick"
Orientation="HorizontalTop" CausesValidation="false">
</telerik:RadTabStrip>
<telerik:RadMultiPage ID="RadMultiPage1" runat="server" SelectedIndex="0" OnPageViewCreated="RadMultiPage1_PageViewCreated" />
</asp:Panel>
</NestedViewTemplate>
<Columns>
<telerik:GridEditCommandColumn ButtonType="ImageButton" ItemStyle-CssClass="cursorPointer" />
<telerik:GridBoundColumn DataField="Id" UniqueName="Id" SortExpression="Id" HeaderText="Id"
ReadOnly="true" ItemStyle-Width="35px" />
<telerik:GridBoundColumn DataField="FirstName" UniqueName="FirstName" SortExpression="FirstName"
HeaderText="First Name" MaxLength="128" />
<telerik:GridBoundColumn DataField="LastName" UniqueName="LastName" SortExpression="LastName"
HeaderText="Last Name" MaxLength="128" />
<telerik:GridButtonColumn Text="Delete" CommandName="Delete" ConfirmText="Are you sure you want to delete this application?"
ItemStyle-CssClass="cursorPointer" ButtonType="ImageButton" />
</Columns>
</MasterTableView>
<ClientSettings>
<Selecting AllowRowSelect="true" />
</ClientSettings>
</telerik:RadGrid>
</asp:Content>
using System;
using System.Data;
using System.Web.UI;
using Telerik.Web.UI;
namespace RadControlsDynamicTabStrip
{
public partial class Grid : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void RadGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", Type.GetType("System.Int32"));
dt.Columns.Add("FirstName", Type.GetType("System.String"));
dt.Columns.Add("LastName", Type.GetType("System.String"));
for (int x = 1; x <= 5; x++)
{
DataRow dr = dt.NewRow();
dr["ID"] = x;
dr["FirstName"] = string.Format("Joe {0}", x);
dr["LastName"] = string.Format("Smith {0}", x);
dt.Rows.Add(dr);
RadGrid1.DataSource = dt;
}
}
protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridNestedViewItem)
{
RadTabStrip radTabStrip1 = (RadTabStrip)e.Item.FindControl("RadTabStrip1");
RadMultiPage radMultiPage1 = (RadMultiPage)e.Item.FindControl("RadMultiPage1");
if (radTabStrip1 != null)
{
AddTab(radTabStrip1, "Personal Info");
AddTab(radTabStrip1, "License Info");
AddTab(radTabStrip1, "HERA");
AddTab(radTabStrip1, "HERA Diversity Certificates");
AddPageView(radMultiPage1, radTabStrip1.FindTabByText("Personal Info"));
}
}
}
private void AddTab(RadTabStrip radTabStrip1, string tabName)
{
var tab = new RadTab { Text = tabName };
radTabStrip1.Tabs.Add(tab);
}
protected void RadMultiPage1_PageViewCreated(object sender, RadMultiPageEventArgs e)
{
//The file name is the tab name with any spaces removed.
string userControlName = "~/Shared/Control/" + e.PageView.ID.Replace(" ", "") + ".ascx";
Control userControl = Page.LoadControl(userControlName);
userControl.ID = e.PageView.ID + "_userControl";
e.PageView.Controls.Add(userControl);
}
private void AddPageView(RadMultiPage radMultiPage1, RadTab tab)
{
var pageView = new RadPageView { ID = tab.Text.Replace(" ", "") };
radMultiPage1.PageViews.Add(pageView);
pageView.CssClass = "pageView";
tab.PageViewID = pageView.ID;
tab.Selected = true;
}
protected void RadTabStrip1_TabClick(object sender, RadTabStripEventArgs e)
{
AddPageView(((RadTabStrip)sender).MultiPage, e.Tab);
e.Tab.PageView.Selected = true;
}
}
}
Above is the default.aspx page and code behind which is using a master page.
Below is the code behind for one of the user controls: