Custom Advanced Form

3 posts, 1 answers
  1. Jonathan
    Jonathan avatar
    14 posts
    Member since:
    Jan 2012

    Posted 11 Mar 2013 Link to this post

    Hello everyone.

    I have a need for a custom advanced form for scheduler and found that the current Advanced form is too rigid. I have no need for recurrence, but I need to have a lot of other properties in the form. I tried resources, again, too rigid for my taste. I also tried AdvancedFormTemplate, I didn't like it.

    I'd like to know if it's possible for me to have my own form in a RadWindow and upon New Appointment / Edit Appointment, my own RadWindow pops up instead. That way, I can have my own buttons, my own validation, my own properties easily. As I'm new to Scheduler, it'll be of great help if any kind souls could point me in the right direction.

    Thank you in advance.
  2. Answer
    Princy
    Princy avatar
    17421 posts
    Member since:
    Mar 2007

    Posted 12 Mar 2013 Link to this post

    Hello Jonathan,

    You can use the OnClientAppointmentEditing and OnClientAppointmentInserting events to replace the default edit form with one of your own.

    1. First you need to insert a RadScheduler into your desired page and bind it to a data source. Also Set its StartEditingInAdvancedForm property to False, so that the new custom edit form is not loaded unless the user clicks the "more" link.
    2. Drag a RadAjaxLoadingPanel from the toolbox onto your Web page. On the body of the loading panel, type the literal "Loading...".
    3. Drag a RadAjaxManager onto your Web page and choose "Configure Ajax Manager" from its smart tag. In the Property Builder, select the RadScheduler as a control that initiates a request and as the updated control by this request. Assign the RadAjaxLoadingPanel as the loading panel for this pair. Then select the RadAjaxManager as a control that initiates a request and select the RadScheduler as the updated control.
    4. Give the AJAX manager an AjaxRequest event handler to rebind the scheduler after an edit:
              
           C#:
          
    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        if (e.Argument == "RebindScheduler")
        {
            RadScheduler1.Rebind();
        }
    }

     5. Add the following JavaScript functions.

         JavaScript:
         
    function AppointmentEditing(sender, eventArgs)
       {
         var apt = eventArgs.get_appointment();
         window.radopen("AdvancedForm.aspx?Mode=Edit&AppointmentId=" + apt.ID, "AdvancedForm");
         eventArgs.set_cancel(true);
      }
     
      function AppointmentInserting(sender, eventArgs)
      {
         var start = formatDate(eventArgs.get_startTime());
         var isAllDay = eventArgs.get_isAllDay();
         // New appointment
         window.radopen("AdvancedForm.aspx?Mode=Insert&Start=" + start + "&IsAllDay=" + isAllDay, "AdvancedForm");  
         eventArgs.set_cancel(true);
      }
     
      function formatDate(date)
      {
       var year = padNumber(date.getUTCFullYear(), 4);
       var month = padNumber(date.getUTCMonth() + 1, 2);
       var day = padNumber(date.getUTCDate(), 2);
       var hour = padNumber(date.getUTCHours(), 2);
       var minute = padNumber(date.getUTCMinutes(), 2);
     
       return year + month + day + hour + minute;
      }
     
      function padNumber(number, totalDigits)
      {
       number = number.toString();
       var padding = '';
       if (totalDigits > number.length)
       {
         for (i = 0; i < (totalDigits - number.length); i++)
         {
           padding += '0';
         }
       }
     
       return padding + number.toString();
      }
     
      function refreshScheduler()
      {
         var ajaxManager = $find("RadAjaxManager1");
         ajaxManager.ajaxRequest('RebindScheduler');
      }

    6.  Set the OnClientAppointmentEditing property of your RadScheduler to "AppointmentEditing" and the       OnClientAppointmentInserting property to "AppointmentInserting". These two javascript functions are defined in the javascript   you added to your page. They call window.radopen() to open a RadWindow with content defined by AdvancedForm.aspx. AdvancedForm.aspx is a Web Form that takes information about the appointment from the URL. It uses four query parameters: Mode, which is "Insert" or "Edit" depending on whether the form is inserting a new appointment or editing an existing one; AppointmentId, which is the key for the appointment to edit; Start, which is the start time for an inserted appointment; and IsAllDay, which indicates whether an inserted appointment should begin as an all-day event. AdvancedForm.aspx has its own reference to the data source that the scheduler uses, and uses that data source to obtain information about the appointment to be edited, as well as to save any changes made by the user.

    7.Drag a RadWindowManager onto your page and add a window to the RadWindowManager.
       Set the ID property of the window to "AdvancedForm"

       Set the Title property to "Edit an Appointment"

       Set the ReloadOnShow property to True

       Set the Modal property to True

       Set the VisibleStatusBar property to False

       Set the Behaviors property to "Close"

       Set the OnClientClose property to the "refreshScheduler" function from the javascript you added to your page. The      refreshScheduler function causes the AJAX manager to trigger a rebind of the scheduler to reflect the changes made in the new edit form.

    Thanks,
    Princy.

  3. Jonathan
    Jonathan avatar
    14 posts
    Member since:
    Jan 2012

    Posted 12 Mar 2013 Link to this post

    Hello Princy, thank you very much for the detailed explanation. Although it's not exactly what I had in mind, but you pointed me to the right direction. I know how to proceed from here. I can't thank you enough :D

    Didn't think I could get this completed today, but it seems very likely now.

    Cheers
Back to Top