Ресурсы, не выбранные в диалоге редактирования Telerik Scheduler - PullRequest
1 голос
/ 26 сентября 2011

Я реализовал Telerik планировщик на временной шкале. Я разрешаю отношения M: M между моим ресурсом по оси Y (адвокатами) и Встречами. Вот как выглядит мой планировщик:

Timeline View

Когда я дважды щелкаю один из экземпляров собрания, появляется диалоговое окно расширенного редактирования. Однако здесь ни один из адвокатов не выбран в качестве участников собрания:

Advocate Resources - edit meeting dialog

Есть ряд адвокатов, для которых эта встреча появляется на временной шкале. Почему они не отображаются так, как они выбраны в форме редактирования?

На этом проблема не заканчивается. У меня есть второй тип ресурсов (законодатели), который также имеет отношения M: M со Встречами. Здесь есть похожая проблема - у меня есть определенные отношения для этой встречи и 4 законодателя, но проверен только первый законодатель (а остальные три остаются без проверки):

Legislator Resources - edit meeting dialog

Мне нужно добавить два других типа ресурсов (опять же, каждый будет M: M с Meetings), и я ожидаю, что у меня возникнет проблема, аналогичная тем, которые я уже добавил.

Мне удалось визуально проверить, изменив группировку моего планировщика и с помощью SQL-запросов, что отношения в базе данных действительны. Итак, почему я не могу увидеть каждый из этих связанных ресурсов проверен? Мой код планировщика выглядит следующим образом:

<telerik:RadScheduler runat="server" ID="RadScheduler1" 
    AdvancedForm-Enabled="true"
    AllowEdit="true" 
    AllowInsert="true" 
    DataEndField="End"
    DataKeyField="ID" 
    DataSourceID="EventsDataSource" 
    DataStartField="Start"
    DataSubjectField="Subject" 
    DayEndTime="17:00:00" 
    DayStartTime="07:00:00" 
    EnableAdvancedForm="true"
    Localization-HeaderMultiDay="Work Week" 
    OverflowBehavior="Expand" 
    OnAppointmentDelete="OnAppointmentDelete"
    OnAppointmentInsert="OnAppointmentInsert" 
    OnAppointmentUpdate="OnAppointmentEdited"
    OnNavigationComplete="RadScheduler1_NavigationComplete"
    SelectedDate="9/20/2011" 
    SelectedView="TimelineView" 
    >
        <AppointmentContextMenuSettings EnableDefault="true" />     
    <AdvancedForm Modal="true" />
    <ResourceTypes>
        <telerik:ResourceType KeyField="Adv_AdvocateID" AllowMultipleValues="true" Name="Advocate" TextField="Adv_FullName" ForeignKeyField="Adv_AdvocateID"
            DataSourceID="AdvocatesDataSource" />
    </ResourceTypes>
    <ResourceTypes>
        <telerik:ResourceType KeyField="Leg_LegID" Name="Legislator" AllowMultipleValues="true" TextField="Leg_FullName" ForeignKeyField="Leg_LegID"
            DataSourceID="LegislatorsDataSource" />
    </ResourceTypes>
    <TimelineView UserSelectable="true" GroupBy="Advocate" GroupingDirection="Vertical" />
    <MultiDayView UserSelectable="false" />
    <DayView UserSelectable="false" />
    <WeekView UserSelectable="false" />
    <MonthView UserSelectable="false" />
</telerik:RadScheduler>

Я надеюсь, что кто-то может пролить свет на то, как правильно отображать выбранные ресурсы в диалоговом окне редактирования встречи, и заранее благодарю вас за вашу помощь.

1 Ответ

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

Я смотрел на эту форму ранее, ту, которую вы только что нашли, и это то, что побудило меня спросить. Приведенные ниже методы, кажется, являются теми, на которых я фокусируюсь больше всего, так как кажется, что они отвечают за заполнение флажка и проверку каждой записи.

Дело в том, что то, что у вас есть сейчас, хорошо, вам просто нужно заменить свой флажок в коде, а не создавать его, как они делают.

РЕДАКТИРОВАТЬ: я прошел через программу , чтобы увидеть, что называется в порядке , так что вы можете настроить их в соответствии с вашими данными.

protected void Page_Load(object sender, EventArgs e)
{
    SemanticCheckBoxList resourceValue = new SemanticCheckBoxList();
    resourceValue.ID = "ResourceValue";
    ResourceValuesPlaceHolder.Controls.Add(resourceValue);

    if (resourceValue.Items.Count == 0)
    {
        PopulateResources();
        MarkSelectedResources();
    }
}


private void PopulateResources()
{
    foreach (Resource res in GetResources(Type))
    {
        ResourceValue.Items.Add(new ListItem(res.Text, SerializeResourceKey(res.Key)));
    }
}

private IEnumerable<Resource> GetResources(string resType)
{
    List<Resource> availableResources = new List<Resource>();
    IEnumerable<Resource> resources = Owner.Resources.GetResourcesByType(resType);

    foreach (Resource res in resources)
    {
        if (IncludeResource(res))
        {
            availableResources.Add(res);
        }
    }

    return availableResources;
}

private bool IncludeResource(Resource res)
{
    return res.Available || ResourceIsInUse(res);
}

private string SerializeResourceKey(object key)
{
    LosFormatter output = new LosFormatter();
    StringWriter writer = new StringWriter();
    output.Serialize(writer, key);
    return writer.ToString();
}

private void MarkSelectedResources()
{
    foreach (Resource res in Appointment.Resources.GetResourcesByType(Type))
    {
        ResourceValue.Items.FindByValue(SerializeResourceKey(res.Key)).Selected = true;
    }
}

Я думаю, что код через загрузку страницы не будет использоваться в вашем, вам просто нужно вызвать методы внутри условного оператора if.

...