RadScheduler1_AppointmentDataBound error on page post back

4 posts, 0 answers
  1. Francesco
    Francesco avatar
    16 posts
    Member since:
    Mar 2011

    Posted 21 Mar 2011 Link to this post

    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?
  2. Veronica
    Admin
    Veronica avatar
    1213 posts

    Posted 21 Mar 2011 Link to this post

    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
  3. Francesco
    Francesco avatar
    16 posts
    Member since:
    Mar 2011

    Posted 21 Mar 2011 Link to this post

    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

  4. Veronica
    Admin
    Veronica avatar
    1213 posts

    Posted 22 Mar 2011 Link to this post

    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
Back to Top