I have a PanelBar that is databounded to a list via the code behind. Inside the PanelBar I want a template that has a control inside it and the control is databounded OnItemDataBound of the PanelBar by getting a value from the PanelBarItem. The issue I'm having is that I can't find the control to bind to it. The code throws a null reference exception on line 27 of the code behind below.
Here is the html markup
Code Behind
Here is the html markup
| <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TelerikTest._Default" %> | |
| <%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %> | |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
| <html xmlns="http://www.w3.org/1999/xhtml" > | |
| <head runat="server"> | |
| <title></title> | |
| </head> | |
| <body> | |
| <form id="form1" runat="server"> | |
| <div> | |
| <telerik:RadScriptManager ID="RadScriptManager1" Runat="server"> | |
| </telerik:RadScriptManager> | |
| <telerik:RadFormDecorator ID="RadFormDecorator1" Runat="server" /> | |
| <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> | |
| <AjaxSettings> | |
| <telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> | |
| <UpdatedControls> | |
| <telerik:AjaxUpdatedControl ControlID="PanelBar1" /> | |
| </UpdatedControls> | |
| </telerik:AjaxSetting> | |
| </AjaxSettings> | |
| </telerik:RadAjaxManager> | |
| <telerik:RadPanelBar | |
| ID="PanelBar1" | |
| runat="server" | |
| OnItemDataBound="PanelBar1_OnItemDataBound" | |
| Skin="Vista" | |
| DataTextField="Name" | |
| DataValueField="ID" | |
| ExpandMode="SingleExpandedItem" | |
| > | |
| <Items> | |
| <telerik:RadPanelItem Value="SubItem" runat="server"> | |
| <ItemTemplate> | |
| <asp:Repeater | |
| ID="SubItemList" | |
| runat="server"> | |
| <ItemTemplate> | |
| <asp:CheckBox | |
| id="uiItem" | |
| runat="server" | |
| Text='<%# DataBinder.Eval(Container.DataItem, "Name").ToString() %>' | |
| /> | |
| <br /> | |
| </ItemTemplate> | |
| </asp:Repeater> | |
| </ItemTemplate> | |
| </telerik:RadPanelItem> | |
| </Items> | |
| </telerik:RadPanelBar> | |
| </div> | |
| </form> | |
| </body> | |
| </html> | |
Code Behind
| using System; | |
| using System.Collections.Generic; | |
| using System.Linq; | |
| using System.Web; | |
| using System.Web.UI; | |
| using System.Web.UI.WebControls; | |
| namespace TelerikTest | |
| { | |
| public partial class _Default : System.Web.UI.Page | |
| { | |
| protected void Page_Load(object sender, EventArgs e) | |
| { | |
| List<ParentItem> pLst = new List<ParentItem>(); | |
| for (int i = 0; i < 10; i++) | |
| { | |
| pLst.Add(new ParentItem(i, string.Format("Parent {0}", i.ToString()))); | |
| } | |
| PanelBar1.DataSource = pLst; | |
| PanelBar1.DataBind(); | |
| } | |
| protected void PanelBar1_OnItemDataBound(object sender, Telerik.Web.UI.RadPanelBarEventArgs e) | |
| { | |
| Repeater subItem = (Repeater)e.Item.Items.FindItemByValue("SubItem").FindControl("SubItemList"); | |
| int ID = int.Parse(e.Item.Value); | |
| subItem.DataSource = GetItems(ID).Values; | |
| subItem.DataBind(); | |
| } | |
| private SortedList<int, CustomItem> GetItems(int ID) | |
| { | |
| SortedList<int, CustomItem> lst = new SortedList<int, CustomItem>(); | |
| for (int i = 0; i < 10; i++) | |
| { | |
| CustomItem item = new CustomItem(i, string.Format("Item {0}", i), ID); | |
| lst.Add(i, item); | |
| } | |
| return lst; | |
| } | |
| } | |
| public class CustomItem | |
| { | |
| public int ID { get; set; } | |
| public string Name { get; set; } | |
| public int ParentID { get; set; } | |
| public CustomItem(int id, string name, int parentID) | |
| { | |
| ID = id; | |
| Name = name; | |
| ParentID = parentID; | |
| } | |
| } | |
| public class ParentItem | |
| { | |
| public int ID { get; set; } | |
| public string Name { get; set; } | |
| public ParentItem(int id, string name) | |
| { | |
| ID = id; | |
| Name = name; | |
| } | |
| } | |
| } | |