I've implemented Telerik scheduler on timeline view. I am allowing a M:M relationship between my y-axis resource (advocates) and Meetings. Here is what my scheduler looks like:
When I double click one of the instances of the meeting, the advanced edit dialog appears. However, in here, none of the advocates are selected as participants in the meeting:
There are a number of advocates for whom this meeting appears in the timeline. Why do they not get displayed as selected in the edit form?
The problem doesn't end there. I have a second type of resources (legislators) that also has a M:M relationship with Meetings. There is a similar problem here - I have relationships defined for this meeting and 4 legislators, but only the first legislator is checked (and the other three remain unckecked):
I need to add two other types of resources (again, each will be M:M with Meetings), and I expect that I will have a similar problem to the two I have already added.
I have been able to verify visually by changing the grouping of my scheduler and through 开发者_StackOverflow社区SQL queries that the relationships in the database are valid. So, why am I unable to see each of these related resources checked? My scheduler code is as follows:
<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>
I'm hoping someone can shed some insight into how to correctly display the selected resources in the edit appointment dialog, and I thank you in advance for your help.
I was looking at that form earlier, the one you just found, which is what prompted me to ask. The methods below seem to be the ones I'm focusing on the most as it would seem they are responsible for the population of the check box and the checking of each entry.
The thing is, what you have now is good, you would just have to substitute your checkbox control into the code rather than create one like they do.
EDIT: I went through the Program to see what gets called in order, so that you may adjust them accordingly to fit your data.
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;
}
}
I'd think the code via the page load wouldn't be used in yours, you would just need to call the methods inside the conditional if statement.
精彩评论