[NullReferenceException: Object reference not set to an instance of an object.] Telerik.Web.UI.TreeListItemDecorator.PrepareDataItemsServiceCells(RadTreeList owner) +534 Telerik.Web.UI.RadTreeList.PrepareRows() +215 Telerik.Web.UI.RadTreeList.Render(HtmlTextWriter writer) +29 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +208 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8 System.Web.UI.Control.Render(HtmlTextWriter writer) +10 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27 System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +100 System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +208 System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +8 System.Web.DynamicData.DynamicControl.Render(HtmlTextWriter writer) +154 ...
Here is the code:
<%@ Control Language="C#" CodeBehind="ManyToMany_Edit.ascx.cs" Inherits="Ctp.U.Web.ResidentPortal.Forms.ManyToMany_EditField" %><%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><telerik:RadTreeList ID="_radTreeList1" runat="server" OnDataBound="_radTreeList1_DataBound"></telerik:RadTreeList>using System;using System.Collections;using System.ComponentModel;using System.Data.Objects;using System.Data.Objects.DataClasses;using System.Web.DynamicData;using System.Web.UI;using System.Web.UI.WebControls;using Telerik.Web.UI;namespace Ctp.U.Web.ResidentPortal.Forms{ public partial class ManyToMany_EditField : System.Web.DynamicData.FieldTemplateUserControl { public void Page_Load(object sender, EventArgs e) { // Register for the DataSource's updating event EntityDataSource ds = (EntityDataSource)this.FindDataSourceControl(); // This field template is used both for Editing and Inserting ds.Updating += new EventHandler<EntityDataSourceChangingEventArgs>(DataSource_UpdatingOrInserting); ds.Inserting += new EventHandler<EntityDataSourceChangingEventArgs>(DataSource_UpdatingOrInserting); } void DataSource_UpdatingOrInserting(object sender, EntityDataSourceChangingEventArgs e) { MetaTable childTable = ChildrenColumn.ChildTable; // Comments assume employee/territory for illustration, but the code is generic // Get the collection of territories for this employee RelatedEnd entityCollection = (RelatedEnd)Column.EntityTypeProperty.GetValue(e.Entity, null); // In Edit mode, make sure it's loaded (doesn't make sense in Insert mode) if (Mode == DataBoundControlMode.Edit && !entityCollection.IsLoaded) { entityCollection.Load(); } // Get an IList from it (i.e. the list of territories for the current employee) // REVIEW: we should be using EntityCollection directly, but EF doesn't have a // non generic type for it. They will add this in vnext IList entityList = ((IListSource)entityCollection).GetList(); // Go through all the territories (not just those for this employee) foreach (object childEntity in childTable.GetQuery(e.Context)) { // Check if the employee currently has this territory bool isCurrentlyInList = entityList.Contains(childEntity); // Find the checkbox for this territory, which gives us the new state string pkString = childTable.GetPrimaryKeyString(childEntity); //ListItem listItem = CheckBoxList1.Items.FindByValue(pkString); TreeListDataItem radItem = null; foreach (TreeListDataItem item in _radTreeList1.Items) { if (item["Id"].Text == pkString) radItem = item; } if (radItem == null) continue; // If the states differs, make the appropriate add/remove change if (radItem.Selected) { if (!isCurrentlyInList) entityList.Add(childEntity); } else { if (isCurrentlyInList) entityList.Remove(childEntity); } } } protected void DataBound() { MetaTable childTable = ChildrenColumn.ChildTable; // Comments assume employee/territory for illustration, but the code is generic IList entityList = null; ObjectContext objectContext = null; if (Mode == DataBoundControlMode.Edit) { object entity; ICustomTypeDescriptor rowDescriptor = Row as ICustomTypeDescriptor; if (rowDescriptor != null) { // Get the real entity from the wrapper entity = rowDescriptor.GetPropertyOwner(null); } else { entity = Row; } // Get the collection of territories for this employee and make sure it's loaded RelatedEnd entityCollection = Column.EntityTypeProperty.GetValue(entity, null) as RelatedEnd; if (entityCollection == null) { throw new InvalidOperationException(String.Format("The ManyToMany template does not support the collection type of the '{0}' column on the '{1}' table.", Column.Name, Table.Name)); } if (!entityCollection.IsLoaded) { entityCollection.Load(); } // Get an IList from it (i.e. the list of territories for the current employee) // REVIEW: we should be using EntityCollection directly, but EF doesn't have a // non generic type for it. They will add this in vnext entityList = ((IListSource)entityCollection).GetList(); // Get the current ObjectContext // REVIEW: this is quite a dirty way of doing this. Look for better alternative ObjectQuery objectQuery = (ObjectQuery)entityCollection.GetType().GetMethod( "CreateSourceQuery").Invoke(entityCollection, null); objectContext = objectQuery.Context; } // Go through all the territories (not just those for this employee) foreach (object childEntity in childTable.GetQuery(objectContext)) { _radTreeList1.DataKeyNames = new string[] { "Id" }; _radTreeList1.ParentDataKeyNames = new string[] { "ParentId" }; TreeListDataItem radItem = new TreeListDataItem(_radTreeList1 , TreeListItemType.Item , _radTreeList1.Items.Count , true); radItem.DataItem = childEntity; // Make it selected if the current employee has that territory if (Mode == DataBoundControlMode.Edit) { radItem.Selected = entityList.Contains(childEntity); } _radTreeList1.Items.Add(radItem); } } protected void _radTreeList1_DataBound(object sender, EventArgs e) { DataBound(); } public override Control DataControl { get { return _radTreeList1; } } }}
<radA:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <radA:AjaxSetting AjaxControlID="dgproductGroups"> <UpdatedControls> <radA:AjaxUpdatedControl ControlID="dgProducts" LoadingPanelID = "loadProducts" /> <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" /> </UpdatedControls> </radA:AjaxSetting> <radA:AjaxSetting AjaxControlID="dgProducts"> <UpdatedControls> <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" /> </UpdatedControls> </radA:AjaxSetting> <radA:AjaxSetting AjaxControlID="dgFileList"> <UpdatedControls> <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" /> </UpdatedControls> </radA:AjaxSetting> <radA:AjaxSetting AjaxControlID="btnShowObsolete"> <UpdatedControls> <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" /> </UpdatedControls> </radA:AjaxSetting> <radA:AjaxSetting AjaxControlID="btnObsolete"> <UpdatedControls> <radA:AjaxUpdatedControl ControlID="dgFileList" LoadingPanelID = "loadFileDetails" /> </UpdatedControls> </radA:AjaxSetting> </AjaxSettings> <ClientEvents OnResponseReceived = "OnAjaxDataReceived" OnRequestStart = "OnAjaxDataSentStart"/> </radA:RadAjaxManager> <radA:AjaxLoadingPanel id="loadProducts" style="width:320px;padding-top:30px;" runat="server"> <asp:Image ID="Image2" ImageUrl="~/RadControls/AJAX/Skins/Default/MSN_Blue.gif" AlternateText="Loading" BorderWidth="0px" Runat="server"> </asp:Image> </rada:AjaxLoadingPanel> <radA:AjaxLoadingPanel id="loadFileDetails" style="width:320px;padding-top:130px;" runat="server"> <asp:Image ID="Image3" ImageUrl="~/RadControls/AJAX/Skins/Default/MSN_Blue.gif" AlternateText="Loading" BorderWidth="0px" Runat="server"> </asp:Image> </rada:AjaxLoadingPanel>function OnAjaxDataReceived() { if(dgProductsDisabled = true) { EnableGrid('ctl00_CntPlHolder_dgProducts'); dgProductsDisabled = false; } EnableGrid('ctl00_CntPlHolder_dgproductGroups'); } function OnAjaxDataSentStart() { //PRODUCTS DATAGRID WILL NOT BE DISABLED WHEN THE PRODUCT GROUPS GRID's ROW IS SELECTED if(dgProductsDisabled = true) { DisableGrid('ctl00_CntPlHolder_dgProducts'); } //DISABLING THE PRODUCT GROUPS DATAGRID UNTIL THE DATA IS RECIEVED FROM THE SERVER THROUGH RAD AJAX DisableGrid('ctl00_CntPlHolder_dgproductGroups'); } function EnableGrid(gridClientID) { window[gridClientID].AjaxRequest("dgproductGroups", ""); } function DisableGrid(gridClientID) { try { gridCtrl = window[gridClientID]; gridCtrl.Control.disabled = "disabled"; gridCtrl.ClientSettings.Selecting.AllowRowSelect = false; gridCtrl.ClientSettings.Resizing.AllowColumnResize = false; gridCtrl.ClientSettings.Resizing.AllowRowResize = false; gridCtrl.ClientSettings.AllowColumnsReorder = false; gridCtrl.ClientSettings.AllowDragToGroup = false; gridCtrl.ClientSettings.EnablePostBackOnRowClick = false; var links = gridCtrl.Control.getElementsByTagName("a"); var images = gridCtrl.Control.getElementsByTagName("img"); var inputs = gridCtrl.Control.getElementsByTagName("input"); var sortButtons = gridCtrl.Control.getElementsByTagName("span"); for(var i = 0; i < links.length; i++) { links[i].href = ""; links[i].onclick = function() { return false; } } for(var i = 0; i < images.length; i++) { images[i].onclick = function() { return false; } } for(var i = 0; i < sortButtons.length; i++) { sortButtons[i].onclick = function() { return false; } } for(var i = 0; i < inputs.length; i++) { switch(inputs[i]. type) { case "button": inputs[i].onclick = function() { return false; } break; case "checkbox": inputs[i].disabled = "disabled"; break; case "radio": inputs[i].disabled = "disabled"; break; case "text": inputs[i].disabled = "disabled"; break; case "password": inputs[i].disabled = "disabled"; break; case "image": inputs[i].onclick = function() { return false; } break; case "file": inputs[i].disabled = "disabled"; break; default: break; } } var scrollArea = document.getElementById(gridCtrl.ClientID + "_GridData"); if(scrollArea) { scrollArea.disabled = "disabled"; } } catch(e) { alert(e); } }
function isRoomOccupied(scheduler, start, end, slot, appointment)
{
//get the "Room" resource associated with the time slot
var currentRoom = slot.get_resource();
//get all appointments for this "room" in the specified period
var appointmentsForThisRoom = getAppointmentsInRangeByResource(scheduler, start, end, currentRoom, appointment);
//if the list of appointments is not empty there are other appointments in this slot
return appointmentsForThisRoom.get_count() > 0;
}
I am not sure what I am doing wrong. Thanks.
function isRoomOccupied(scheduler, start, end, slot, appointment)
{
//get the "Room" resource associated with the time slot
var currentRoom = slot.get_resource();
//get all appointments for this "room" in the specified period
var appointmentsForThisRoom = getAppointmentsInRangeByResource(scheduler, start, end, currentRoom, appointment);
//if the list of appointments is not empty there are other appointments in this slot
return appointmentsForThisRoom.get_count() > 0;
}
function warnIfOccupied(start, end, sender, args)
{
var slot = args.get_targetSlot();
var appointment = args.get_appointment();
if (isRoomOccupied(sender, start, end, slot, appointment))
{
alert(
"This room is not available in this time period.");
args.set_cancel(
true);
}
appointment.get_element().style.border =
"";
}
function onAppointmentResizeEnd(sender, args)
{
var start = args.get_appointment().get_start();
var end = args.get_targetSlot().get_endTime();
warnIfOccupied(start, end, sender, args);
}
function onAppointmentMoveEnd(sender, args)
{
var start = args.get_targetSlot().get_startTime();
var end = new Date(start.getTime() + args.get_appointment().get_duration());
warnIfOccupied(start, end, sender, args);
}
function onAppointmentInserting(sender, args)
{
var slot = args.get_targetSlot();
var start = slot.get_startTime();
var end = slot.get_endTime();
if (isRoomOccupied(sender, start, end, slot))
{
alert(
"This room is not available in this time period.");
args.set_cancel(
true);
}
}
<
telerik:RadScheduler runat="server" ID="RadScheduler1" OnClientAppointmentEditing="AppointmentEditing"
OnClientAppointmentInserting="AppointmentInserting" EnableCustomAttributeEditing="true"
SelectedDate="2009-07-26" DataSourceID="EventsDataSource" DataKeyField="MeetingID"
DataSubjectField="Description" DataStartField="Start" DataEndField="End" SelectedView="WeekView"
FirstDayOfWeek="Sunday" LastDayOfWeek="Saturday" Skin="Vista" ShowResourceHeaders="false"
CustomAttributeNames="Description,HostedBy,Room" Height="100%" Localization-ConfirmDeleteText="Are you sure you want to delete this meeting?"
TimelineView-UserSelectable="false" OnClientAppointmentMoveEnd="onAppointmentMoveEnd"
OnClientAppointmentResizeEnd="onAppointmentResizeEnd">
<ResourceTypes>
<telerik:ResourceType KeyField="Room" Name="Room" TextField="Room" ForeignKeyField="Room"
DataSourceID="RoomsDataSource" />
</ResourceTypes>
<AppointmentTemplate>
<div style="color: Maroon;">
<%
#Eval("Description")%></div>
<%
-- <br />--%>
<div style="color: Teal;">
</font>Host: <%#Eval("HostedBy")%></div>
<%
-- <br />--%>
<div style="color: Fuchsia;">
Room:
<%#Eval("Room")%></div>
</AppointmentTemplate>
</telerik:RadScheduler>
<asp:Button ID="btnGo" runat="server" Text="Go" Visible="false" />
<asp:SqlDataSource ID="SqlDataSource1" runat="server"></asp:SqlDataSource>
<asp:SqlDataSource ID="EventsDataSource" runat="server" ProviderName="System.Data.SqlClient"
ConnectionString="<%$ ConnectionStrings:MCHPEVENTS %>" SelectCommand="SELECT [MeetingID], [Description], [Start], [End], [Room], [HostedBy], [Food], [Beverages], [Projector], [Easel], [Flipchart], [Microphone], [HotelAVSupplies], [Comments] FROM [Meetings]"
InsertCommand="INSERT INTO [Meetings] ([Description], [Start], [End], [Room]) VALUES (@Description, @Start, @End, @Room)"
UpdateCommand="UPDATE [Meetings] SET [Description] = @Description, [Start] = @Start, [End] = @End, [Room] = @Room WHERE (MeetingID = @MeetingID)"
DeleteCommand="DELETE FROM [Meetings] WHERE [MeetingID] = @MeetingID">
<DeleteParameters>
<asp:Parameter Name="MeetingID" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="MeetingID" Type="Int32" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Start" Type="DateTime" />
<asp:Parameter Name="End" Type="DateTime" />
<asp:Parameter Name="Room" Type="String" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="Start" Type="DateTime" />
<asp:Parameter Name="End" Type="DateTime" />
<asp:Parameter Name="Room" Type="String" DefaultValue="TBD" />
</InsertParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="RoomsDataSource" runat="server" ProviderName="System.Data.SqlClient"
ConnectionString="<%$ ConnectionStrings:MCHPEVENTS %>" SelectCommand="SELECT DISTINCT([Room]) FROM [Meetings]">
</asp:SqlDataSource>
'This is my WCF service <OperationContract()> _ Public Function GetdataSelect(ByVal startRowIndex As Integer, ByVal maximumRows As Integer, ByVal sortExpression As String, ByVal filterExpression As String) As MyData Dim data As GridBindingData = RadGrid.GetBindingData("LinqToSql.DataClassesDataContext", "TrnApproval", startRowIndex, maximumRows, sortExpression, filterExpression) Dim result As New MyData() Dim db As New DataClassesDataContext result.Data = From c In db.TrnApprovals Select c.TrnID, c.ApproverID result.Count = data.Count Return result End Function