Как я могу обновить radSchedule после изменений в связанном наборе данных? - PullRequest
1 голос
/ 31 августа 2011

У меня возникли некоторые проблемы с RadSchedular.

У меня есть radSchedular, который я связываю с набором данных.

Я ожидал, что radSchedular обновится, когда я изменю набор данных. Но я не понимаю этого.

Мой вопрос Как обновить отображение radSchedular при обновлении набора данных?

Пример кода:

Как я связываю: -

        private void BindToDataSet()
    {                

        //Map fields for Appointments
        AppointmentMappingInfo appointmentMappingInfo = new AppointmentMappingInfo();

        appointmentMappingInfo.Start = "appointments_Start";
        appointmentMappingInfo.End = "appointments_End";      //LOTS OF THESE SO I CUT THE REST OUT OF THIS EXAMPLE


        datasource.EventProvider.Mapping = appointmentMappingInfo;
        datasource.EventProvider.DataSource = dsSchedule.Tables[0];   //MY DATASET IS GENERATED FROM AN XML FILE WITH A SCHEMA

        //Bind
        radScheduler1.DataSource = datasource;
    }

Как мне получить события измененного набора данных: -

private void BindEvents(){
// RowChanged event handler.
dsSchedule.Tables[0].RowChanged += new DataRowChangeEventHandler(RowChanged);

// Add a RowDeleted event handler.
dsSchedule.Tables[0].RowDeleted += new DataRowChangeEventHandler(RowDeleted);}

Метод события: -

private void RowChanged(object sender, DataRowChangeEventArgs e){
StoreToXML();
BindEvents();}

Как я храню данные и, как мне показалось, обновляю radSchedular: -

private void StoreToXML(){

//remove the dataset change deligates as we are about to change the Dataset and we don't want a loop
UnBindEvents();

foreach (DataRow rowAppointments in dsSchedule.Tables["Appointments"].Rows)
{
    string currentResource = rowAppointments["appointments_ResourceID"].ToString();

    foreach (DataRow rowResources in dsSchedule.Tables["Resources"].Rows)
    {
    if (rowResources["resources_ID"].ToString() == currentResource)
    {
        rowAppointments["appointments_Location"] = rowResources["resources_Name"];  //THIS IS WHY I WANT THE radSCHEDULAR TO UPDATE. 
    }                                       //I WANT TO SEE THE RESOURCE IN THE LOCATION FIELD
    }
}


StreamWriter myStreamWriter = new StreamWriter(@"E:\My .NET\Hardware_Scheduler_Application\stdData.xml");
dsSchedule.WriteXml(myStreamWriter, XmlWriteMode.WriteSchema);
myStreamWriter.Close();
BindToDataSet();   //I THOUGHT THAT THIS WOULD REFRESH THE radSCHEDULAR

//rebind the changed events
BindEvents()}

1 Ответ

0 голосов
/ 06 октября 2017

Я смог решить эту проблему для себя, поместив эти две строки кода ниже в конце событий RadScheduler1_AppointmentInsert и RadScheduler1_AppointmentDelete.Две строки:

Appointments.Clear();
InitializeAppointments();

Это будет работать только для вас, если вы настроите свою сетку, следуя примеру, приведенному на сайте Telerik.Вы можете найти ссылку здесь: https://demos.telerik.com/aspnet-ajax/scheduler/examples/overview/defaultcs.aspx

...