Telerik Scheduler с asp.net - Показать встречи Everyones на одном дисплее - PullRequest
3 голосов
/ 13 сентября 2011

Я работаю над созданием диаграммы со списком людей («адвокатов») и их собраний на определенный день, все в одном представлении.Я использую элемент управления RadScheduler от Telerik (Q2 2011) из пакета RadControls для ASP.NET AJAX.

У меня отношения M: M между адвокатами и собраниями.Таким образом, мои таблицы базы данных имеют имена GRS_Advocate, GRS_Meeting и GRS_AdvocateToMeeting.

. Я пытаюсь создать список адвокатов по оси Y и раз (в одном-час) в верхней части оси X.Самый близкий пример на веб-сайте Telerik, который я могу найти, это http://demos.telerik.com/aspnet-ajax/scheduler/examples/timelineview/defaultcs.aspx здесь, и это тот, который я пытаюсь имитировать с моими данными.

Вот визуальное представление того, что я хотел бы:

Desired look of scheduler control

Вот скриншот того, что я на самом деле получаю:

Actual scheduler control rendered from the code below (included below)

Эти две записи "Важного совещания"предназначены для того же совещания , в котором должны участвовать два разных Адвоката.Это собрание должно отображаться в двух разных строках, по одному разу для каждого Адвоката, на которого запланировано участие, как показано на первом рисунке.

Как мне добраться отсюда?Я подозреваю, что проблема может быть в теге <ResourceTypes>, который у меня есть в Grid.

Вот код, который я получил - я также поделюсь C #, хотя он, вероятно, не так важен здесь.

<telerik:RadScheduler runat="server" ID="RadScheduler1" SelectedView="TimelineView"
    DayStartTime="09:00:00" DayEndTime="19:00:00" DataSourceID="EventsDataSource"
    DataKeyField="ID" DataSubjectField="Subject" DataStartField="Start" DataEndField="End"
     OverflowBehavior="Expand"
    Localization-HeaderMultiDay="Work Week" OnNavigationComplete="RadScheduler1_NavigationComplete">
    <AdvancedForm Modal="true" />
    <ResourceTypes>
        <telerik:ResourceType KeyField="Adv_AdvocateID" Name="Advocate" TextField="Adv_FullName" ForeignKeyField="Adv_AdvocateID"
            DataSourceID="AdvocatesDataSource" />
    </ResourceTypes>
    <TimelineView UserSelectable="true" GroupBy="Adv_AdvocateID" GroupingDirection="Horizontal" />
    <MultiDayView UserSelectable="true" />
    <DayView UserSelectable="false" />
    <WeekView UserSelectable="false" />
    <MonthView UserSelectable="false" />
</telerik:RadScheduler>

</asp:Panel>
<asp:SqlDataSource ID="EventsDataSource" runat="server"
    ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:GRSConnectionString %>"
    SelectCommand="select m.[Id], m.[Room], m.[Start], m.[End], m.[Notes], m.[Subject], a.[Adv_AdvocateID], a.[Adv_FullName] from GRS_Meeting m join GRS_AdvocateToMeeting am on am.Meeting = m.Id join GRS_Advocate a on am.advocate = a.Adv_AdvocateID">
</asp:SqlDataSource>
<asp:SqlDataSource ID="AdvocatesDataSource" runat="server"
    ProviderName="System.Data.SqlClient" ConnectionString="<%$ ConnectionStrings:GRSConnectionString %>"
    SelectCommand="SELECT  [Adv_AdvocateID],[Adv_FullName] FROM [GRS_Advocate]">
</asp:SqlDataSource>

И код C #, если вам интересно:

private void Page_Load(object sender, EventArgs e)
    {
        if (RadScheduler1.SelectedView == SchedulerViewType.TimelineView)
        {
            RadScheduler1.TimelineView.SlotDuration = TimeSpan.Parse(DurationList.SelectedValue);
            RadScheduler1.TimelineView.TimeLabelSpan = int.Parse(TimeLabelSpan.SelectedValue);
            RadScheduler1.TimelineView.ColumnHeaderDateFormat = ColumnHeaderDateFormat.SelectedValue;
            RadScheduler1.TimelineView.NumberOfSlots = int.Parse(NumberOfSlotsList.SelectedValue);
            RadScheduler1.TimelineView.GroupingDirection = (GroupingDirection)Enum.Parse(typeof(GroupingDirection), GroupingDirection.SelectedValue);
        }
        else if (RadScheduler1.SelectedView == SchedulerViewType.MultiDayView)
        {
            RadScheduler1.MultiDayView.NumberOfDays = int.Parse(NumberOfDaysList.SelectedValue);
            RadScheduler1.FirstDayOfWeek = (DayOfWeek)int.Parse(FirstDayOfWorkWeekList.SelectedValue);
            RadScheduler1.SelectedDate = RadScheduler1.SelectedDate.AddDays((int)RadScheduler1.FirstDayOfWeek - (int)RadScheduler1.SelectedDate.DayOfWeek);

        }
    }
    protected void RadScheduler1_NavigationComplete(object sender, SchedulerNavigationCompleteEventArgs e)
    {
        if (RadScheduler1.SelectedView == SchedulerViewType.MultiDayView)
        {

            RadScheduler1.MultiDayView.NumberOfDays = int.Parse(NumberOfDaysList.SelectedValue);
            RadScheduler1.FirstDayOfWeek = (DayOfWeek)int.Parse(FirstDayOfWorkWeekList.SelectedValue);

            //SelectedDate adjustment to make a Work Week view from Multi-day view
            int WorkWeekAdjustmentTimeShift = (int)RadScheduler1.FirstDayOfWeek - (int)RadScheduler1.SelectedDate.DayOfWeek;
            if (e.Command == SchedulerNavigationCommand.NavigateToNextPeriod)
            {
                if (WorkWeekAdjustmentTimeShift < 0)
                    WorkWeekAdjustmentTimeShift += 7;

            }
            else if (e.Command == SchedulerNavigationCommand.NavigateToPreviousPeriod)
            {
                if (WorkWeekAdjustmentTimeShift > 0)
                    WorkWeekAdjustmentTimeShift -= 7;
            }
            RadScheduler1.SelectedDate = RadScheduler1.SelectedDate.AddDays(WorkWeekAdjustmentTimeShift);
        }
    }

Я уже некоторое время работаю над этим и просто не могу обойти этот вопрос.Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ

В комментариях было отмечено, что изображение выше на дневном обзоре, и я должен использовать временную шкалу.Это правильно;однако, когда я просматриваю Временную шкалу, моих адвокатов нет в списке.На самом деле на оси x нет ничего, кроме временной шкалы, где нет оси y, и нет сетки для отображения:

Timeline Scheduler

1 Ответ

1 голос
/ 14 сентября 2011

Чтобы имитировать имеющуюся демонстрацию, вам потребуется использовать «Timeline View», который можно выбрать в свойстве «SelectedView» самого планировщика.

Кроме того, для группировки по Adv_AdvocateID необходимо всегда ссылаться на поле «Имя», которое вы задаете в поле свойства «ResourceTypes».

-:)

...