This is a migrated thread and some comments may be shown as answers.

RadScheduler1_AppointmentDataBound error on page post back

3 Answers 88 Views
Scheduler
This is a migrated thread and some comments may be shown as answers.
Francesco
Top achievements
Rank 1
Francesco asked on 21 Mar 2011, 04:18 PM
I have make a scheduler based on your exemple. It Wok well, his is my method to inizialize object and dataBound
http://localhost:8301/radcontrols_aspnetajax/scheduler/examples/bindtolist/defaultcs.aspx

private void InitializeResources()
        {
  
            ResourceType resType = new ResourceType("User", false);
  
            resType.ForeignKeyField = "UserID";
            resType.Name = "User";
  
            RadScheduler1.ResourceTypes.Add(resType);
  
            //add uer
            DataView listUser = (DataView)ObjectDataSourceFilterContatti.Select();
  
            foreach (DataRow user in listUser.Table.Rows)
            {
                int key = Convert.ToInt32(user["idAnagrafica"]);
                string value = user["Nome"].ToString();
  
                Resource r = new Resource("User", key, value);
                RadScheduler1.Resources.Add(r);
            }
                 }
protected void RadScheduler1_AppointmentDataBound(object sender, SchedulerEventArgs e)
        {
            //recupero l'utente collegato all'appuntamento
            Resource userRes = e.Appointment.Resources.GetResourceByType("User");
            if (userRes != null)
            {
                string key = userRes.Key.ToString();
                   //DO SOMETHING...............
            }                    
}
now, if I change the InitializeResources() method in this way
ResourceType resType = new ResourceType("User", false);
            resType.DataSourceID = "ObjectDataSourceFilterContatti";
            resType.ForeignKeyField = "UserID";
            resType.KeyField = "idAnagrafica";
            resType.TextField = "Nome";
            resType.Name = "User";
            RadScheduler1.ResourceTypes.Add(resType);

it work on page load (the combo box User is populated correctly) but in past back during the method RadScheduler1_AppointmentDataBound in this row

Resource userRes = e.Appointment.Resources.GetResourceByType("User");

the userRes object is always null, why?

3 Answers, 1 is accepted

Sort by
0
Veronica
Telerik team
answered on 21 Mar 2011, 04:51 PM
Hi Francesco,

I tried to reproduce the issue but to no avail.
I am interested where did you call the InitializeResources() method? Did you call it in the OnInit event? Could you please send me your full code so I can inspect it and help you?

Greetings,
veronica Milcheva
the Telerik team
0
Francesco
Top achievements
Rank 1
answered on 21 Mar 2011, 05:27 PM

yes I paste my full code, verry thanks...

<%@ Page Title="" Language="C#" AutoEventWireup="true" CodeBehind="WebForm4.aspx.cs"
    Inherits="Trilance.SalesNet.Web.Pages.WebForm4" EnableTheming="True" %>
  
<asp:content id="Content1" contentplaceholderid="head" runat="server">
</asp:content>
<asp:content id="Content5" contentplaceholderid="TrilanceMasterContent" runat="server">
  
 <!-------------------------------------------------------------------
 -------------------------- CONFIGURAZIONE RAD AJAX PANEL ------------
 -------------------------------- INIZIO ----------------------------->
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" RequestQueueSize="10">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="RadAjaxPanel1">
            </telerik:AjaxSetting>            
        </AjaxSettings>
    </telerik:RadAjaxManager>    
<telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" Runat="server" Skin="Default"></telerik:RadAjaxLoadingPanel>
<!----------------------------------- FINE ----------------------------->
    <!-- [ MAIN ]  -->
    <div id="boxMainWrap">
   
            <!-- [ CONTENT ]  -->
            <div id="boxMainContent" class="">
   
                <!-- [ CONTENT > BODY ]  -->
                <div id="boxMainContentBody" class="page_controls dataentry">               
                <!-- CONTENT CONTENT CONTENT CONTENT CONTENT CONTENT CONTENT CONTENT CONTENT -->        
                <telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" width="100%" height="100%" 
                        LoadingPanelID="RadAjaxLoadingPanel1">
                    <table id="table1" cellpadding="10" cellspacing="0" width="100%">
                        <tr>
                            <td width="200px" height="100px" valign="top">
                                <telerik:RadCalendar ID="RadCalendar1" Runat="server" EnableMultiSelect="False" 
                                    onselectionchanged="RadCalendar1_SelectionChanged" AutoPostBack="True">
                                </telerik:RadCalendar>
                            </td>
                            <td rowspan="2" valign="top" width="100%">
                                <div>
                                     <telerik:RadScheduler runat="server" ID="RadScheduler1" 
                                        DataKeyField="ID" DataSubjectField="Subject" DataStartField="Start" DataEndField="End"
                                        DayStartTime="07:00:00" DayEndTime="20:00:00" TimeZoneOffset="03:00:00" 
                                        OnAppointmentInsert="RadScheduler1_AppointmentInsert"
                                        OnAppointmentUpdate="RadScheduler1_AppointmentUpdate" 
                                        OnAppointmentDelete="RadScheduler1_AppointmentDelete"                                        
                                        DataRecurrenceField="RecurrenceRule" 
                                        DataRecurrenceParentKeyField="RecurrenceParentId" Height="100%" 
                                        onappointmentdatabound="RadScheduler1_AppointmentDataBound" 
                                        ondatabound="RadScheduler1_DataBound" Culture="Italian (Italy)" 
                                         EditFormTimeFormat="HH.mm" FirstDayOfWeek="Monday" HoursPanelTimeFormat="HH" 
                                         SelectedView="WeekView" StartInsertingInAdvancedForm="True" 
                                         onformcreating="RadScheduler1_FormCreating">
                                         <DayView DayEndTime="20:00:00" DayStartTime="07:00:00" 
                                             WorkDayEndTime="20:00:00" WorkDayStartTime="07:00:00" />
                                         <AdvancedForm Modal="true" TimeFormat="HH.mm" />
                                         <TimelineView UserSelectable="false" />
                                         <WeekView DayEndTime="20:00:00" DayStartTime="07:00:00" 
                                             WorkDayEndTime="07:00:00" WorkDayStartTime="20:00:00" />
                                         <TimeSlotContextMenuSettings EnableDefault="true" />
                                         <AppointmentContextMenuSettings EnableDefault="true" /> 
                                        <%-- <ResourceTypes>
                                             <telerik:ResourceType KeyField="idAnagrafica" Name="Agente" TextField="Nome" ForeignKeyField="idAnagrafica"
                                                 DataSourceID="ObjectDataSourceFilterContatti" />
                                         </ResourceTypes>--%>
                                     </telerik:RadScheduler>
                                 </div>
                            </td>
                        </tr>
                        <tr>
                            <td height="100%" valign="top">
                                <telerik:RadListBox ID="RadListBox1" runat="server" 
                                    DataSourceID="ObjectDataSourceFilterContatti" DataTextField="Nome" 
                                    DataValueField="idAnagrafica" Width="100%" 
                                    AutoPostBack="True" CheckBoxes="True" EnableDragAndDrop="True" 
                                    onitemcheck="RadListBox1_ItemCheck">
                                </telerik:RadListBox>
                            </td>                           
                        </tr>
                    </table>   
                </telerik:RadAjaxPanel>                      
            </div>
        </div>
    </div>
      
    
   <asp:ObjectDataSource ID="ObjectDataSourceFatture" runat="server" 
          OldValuesParameterFormatString="original_{0}" 
          SelectMethod="SearchPagedFatturaEntity" 
          TypeName="Trilance.WEB.Helper.FatturaEntityHelper" 
            CacheExpirationPolicy="Sliding" CacheKeyDependency="Fatture" 
            EnableCaching="True" EnableViewState="False">
        <SelectParameters>
            <asp:Parameter DefaultValue="idAnagrafica = '100001'" Name="strSearchCriteria" Type="String" />
            <asp:Parameter Name="strOrderBy" Type="String" />
            <asp:Parameter DefaultValue="1" Name="intStartIndex" Type="Int32" />
            <asp:Parameter DefaultValue="15" Name="intPageSize" Type="Int32" />
            <asp:Parameter Direction="Output" Name="intTotal" 
                Type="Int32" />
        </SelectParameters>
      </asp:ObjectDataSource>
        
      <asp:ObjectDataSource ID="ObjectDataSourceFilterContatti" runat="server" 
            OldValuesParameterFormatString="original_{0}" 
            SelectMethod="SearchPagedContattoEntity" 
            TypeName="Trilance.WEB.Helper.ContattoEntityHelper">
            <SelectParameters>
                <asp:Parameter DefaultValue="Nome like '%mar%'" Name="strSearchCriteria" Type="String" />
                <asp:Parameter DefaultValue="Nome" Name="strOrderBy" Type="String" />
                <asp:Parameter DefaultValue="1" Name="intStartIndex" Type="Int32" />
                <asp:Parameter DefaultValue="15" Name="intPageSize" Type="Int32" />
                <asp:Parameter Direction="InputOutput" Name="intTotal" Type="Int32" />
            </SelectParameters>
       </asp:ObjectDataSource>
</asp:content>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using Trilance.SalesNet.Web.Class.Base;
using System.Data;
  
namespace Trilance.SalesNet.Web.Pages
{
    public partial class WebForm4 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Request.Form["Calendar1"];
  
            //Control placeHolder = PreviousPage.Form.FindControl("TrilanceMasterContent");
            //RadPanelBar RadPanelBarLeft = (RadPanelBar)placeHolder.FindControl("RadPanelBarLeft");
            //RadCalendar Calendar1 = (RadCalendar)RadPanelBarLeft.FindItemByValue("pnlCalendar").FindControl("Calendar1");
  
            //RadScheduler1.SelectedDate = Calendar1.SelectedDate;            
        }
  
        private const string AppointmentsKey = "Telerik.Web.Examples.Scheduler.BindToList.CS.Apts";
  
        private List<TrilanceScheduleBase> Appointments
        {
            get
            {
                List<TrilanceScheduleBase> sessApts = Session[AppointmentsKey] as List<TrilanceScheduleBase>;
                if (sessApts == null)
                {
                    sessApts = new List<TrilanceScheduleBase>();
                    Session[AppointmentsKey] = sessApts;
                }
  
                return sessApts;
            }
        }
  
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
  
            if (!IsPostBack)
            {
                Session.Remove(AppointmentsKey);
  
                InitializeResources();
                InitializeAppointments();
  
                //set dafult date
                //if (RadCalendar1.SelectedDate == null)
                //{
                RadCalendar1.SelectedDate = DateTime.Now;
                //}
            }
            //InitializeResources();            
            RadScheduler1.DataSource = Appointments;
        }
  
        protected void RadScheduler1_AppointmentInsert(object sender, SchedulerCancelEventArgs e)
        {
            Appointments.Add(new TrilanceScheduleBase(e.Appointment));
            //metto il check!
            Resource UserRes = e.Appointment.Resources.GetResourceByType("Agente");
            string key = UserRes.Key.ToString();
  
            //lo cerco nella listbox e verifico se è checcato o meno!
            RadListBoxItem item = RadListBox1.FindItemByValue(key);
            item.Checked = true;
        }
  
        protected void RadScheduler1_AppointmentUpdate(object sender, AppointmentUpdateEventArgs e)
        {
            TrilanceScheduleBase ai = FindById(e.ModifiedAppointment.ID);
            ai.CopyInfo(e.ModifiedAppointment);
        }
  
        protected void RadScheduler1_AppointmentDelete(object sender, SchedulerCancelEventArgs e)
        {
            Appointments.Remove(FindById(e.Appointment.ID));
        }
  
        private void InitializeResources()
        {
  
            ResourceType resType = new ResourceType("Agente", false);
  
            //resType.DataSourceID = "ObjectDataSourceFilterContatti";
            //resType.DataSource = ObjectDataSourceFilterContatti.Select();
  
            resType.ForeignKeyField = "UserID";
  
            //resType.KeyField = "idAnagrafica";
            //resType.TextField = "Nome";
            //resType.Name = "User";
  
            RadScheduler1.ResourceTypes.Add(resType);
  
            //add uer
            DataView listUser = (DataView)ObjectDataSourceFilterContatti.Select();
  
            foreach (DataRow User in listUser.Table.Rows)
            {
                int key = Convert.ToInt32(User["idAnagrafica"]);
                string value = User["Nome"].ToString();
  
                Resource r = new Resource("Agente", key, value);
                RadScheduler1.Resources.Add(r);
            }
  
            /*
            RadScheduler1.Resources.Add(new Resource("User", 1, "Alex"));
            RadScheduler1.Resources.Add(new Resource("User", 2, "Bob"));
            RadScheduler1.Resources.Add(new Resource("User", 3, "Charlie"));
            */
        }
  
        private void InitializeAppointments()
        {
            /*
            DateTime start = DateTime.UtcNow.Date;
            start = start.AddHours(6);
            Appointments.Add(new TrilanceScheduleBase("Take the car to the service", start, start.AddHours(1), string.Empty, null, 1));
            Appointments.Add(new TrilanceScheduleBase("Meeting with Alex", start.AddHours(2), start.AddHours(3), string.Empty, null, 2));
  
            start = start.AddDays(-1);
            DateTime dayStart = RadScheduler1.UtcDayStart(start);
            Appointments.Add(new TrilanceScheduleBase("Bob's Birthday", dayStart, dayStart.AddDays(1), string.Empty, null, 1));
            Appointments.Add(new TrilanceScheduleBase("Call Charlie about the Project", start.AddHours(2), start.AddHours(3), string.Empty, null, 2));
  
            start = start.AddDays(2);
            Appointments.Add(new TrilanceScheduleBase("Get the car from the service", start.AddHours(2), start.AddHours(3), string.Empty, null, 1));
            */
  
        }
  
        private TrilanceScheduleBase FindById(object ID)
        {
            foreach (TrilanceScheduleBase ai in Appointments)
            {
                if (ai.ID.Equals(ID))
                {
                    return ai;
                }
            }
  
            return null;
        }
  
        protected void RadCalendar1_SelectionChanged(object sender, Telerik.Web.UI.Calendar.SelectedDatesEventArgs e)
        {
            if (RadCalendar1.SelectedDates.Count > 0)
            {
                RadScheduler1.SelectedDate = RadCalendar1.SelectedDate;
            }
        }
  
        protected void RadListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //RadScheduler1.Rebind();
        }
  
        protected void RadScheduler1_DataBound(object sender, EventArgs e)
        {
        }
  
        protected void RadScheduler1_AppointmentDataBound(object sender, SchedulerEventArgs e)
        {
            //recupero l'utente collegato all'appuntamento
            Resource UserRes = e.Appointment.Resources.GetResourceByType("Agente");
            //if (UserRes != null)
            //{
            string key = UserRes.Key.ToString();
  
            //lo cerco nella listbox e verifico se è checcato o meno!
            RadListBoxItem item = RadListBox1.FindItemByValue(key);
            if (item.Checked)
            {
                e.Appointment.Visible = true;
            }
            else
            {
                e.Appointment.Visible = false;
            }
            //}
        }
  
        protected void RadListBox1_ItemCheck(object sender, RadListBoxItemEventArgs e)
        {
            RadScheduler1.Rebind();
        }
  
        protected void RadScheduler1_FormCreating(object sender, SchedulerFormCreatingEventArgs e)
        {
            //se selezionato a sx User lo assegno quell'User come default nella combo!
            string UserKey = RadListBox1.SelectedValue;
  
            if (!string.IsNullOrEmpty(UserKey))
            {
                int key = Convert.ToInt32(UserKey);
                //ricerco la risorsa nella lista dello scadenziario
                Resource UserRes = RadScheduler1.Resources.GetResource("Agente", key);
                //la assegno all'appuntamento in questione
                e.Appointment.Resources.Add(UserRes);
            }
        }
    }
}

I don't Understand how to use ForeignKeyField property, If I made a new ResourceType "Agente" object it work correctly if and only if the ForeignKeyField = "UserID" if I change this property to "MyID" I have a javascript generic error. I am very confused. I hope you can help me, thank a lot

0
Veronica
Telerik team
answered on 22 Mar 2011, 09:13 AM
Hi Francesco,

Unfortunately I am not able to see what is the problem without debugging your code.
Could you please open a new support thread and attach the full code in a .zip file so I can inspect it and help you?

Thank you!

Best wishes,
Veronica Milcheva
the Telerik team
Tags
Scheduler
Asked by
Francesco
Top achievements
Rank 1
Answers by
Veronica
Telerik team
Francesco
Top achievements
Rank 1
Share this question
or