I have a major client issue and I'm days away from UAT.
I'm using the code below to save the information back to the appointment object when I click Save on the Advanced Form. The problem is, when I open the appointment again, none of my changes persist.
I have a feeling that this is due to my scheduler not being tied to a datasource. Currently, I have a class that creates fake data and sends it to the scheduler on load. The scheduler is not tied to a datasource because I would like to manipulate the schedule and make many changes, then batch them up and send them to the database at one time. My plan is to iterate through the calendar and find any events that had changes and send them to my update/insert.
To recap, my problems are:
- The changes are not getting saved to my appointment object
- Is it possible to send all of the changes to the database at once, instead of every time save is pressed?
Let me know what other code you need to help.
I'm using the code below to save the information back to the appointment object when I click Save on the Advanced Form. The problem is, when I open the appointment again, none of my changes persist.
I have a feeling that this is due to my scheduler not being tied to a datasource. Currently, I have a class that creates fake data and sends it to the scheduler on load. The scheduler is not tied to a datasource because I would like to manipulate the schedule and make many changes, then batch them up and send them to the database at one time. My plan is to iterate through the calendar and find any events that had changes and send them to my update/insert.
To recap, my problems are:
- The changes are not getting saved to my appointment object
- Is it possible to send all of the changes to the database at once, instead of every time save is pressed?
Let me know what other code you need to help.
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!Page.IsPostBack)
{
ProductionRunMock productionRunBL =
new
ProductionRunMock();
List<ProductionRun> productionRuns = productionRunBL.GetProductionRuns();
schMasterScheduler.DataSource = productionRuns;
AddResourceTypes();
AddResources();
schMasterScheduler.GroupBy = ddlPlant.SelectedValue.ToString();
}
}
protected void schMasterScheduler_AppointmentUpdate(object sender, AppointmentUpdateEventArgs e)
{
//This event runs on click of save from the form. Therefore we need to check to see if it's an insert or update.
//moveAppointsRight(e.ModifiedAppointment, e.Appointment);
//pull all the controls out of session so we can find their values
//required
RadComboBox ddlMatereial = Session["ddlMaterial"] as RadComboBox;
RadTextBox txtBatchNumber = Session["txtBatchNumber"] as RadTextBox;
RadNumericTextBox txtBatchSize = Session["txtBatchSize"] as RadNumericTextBox;
RadComboBox ddlUnitOfMeasure = Session["ddlUnitOfMeasure"] as RadComboBox;
RadDateTimePicker dtpStartDateTime = Session["dtpStartDateTime"] as RadDateTimePicker;
RadNumericTextBox txtDuration = Session["txtDuration"] as RadNumericTextBox;
RadDateTimePicker dtpEndDateTime = Session["dtpEndDateTime"] as RadDateTimePicker;
ResourceControl ResVessel = Session["ResVessel"] as ResourceControl;
CheckBox cbNonProdTime = Session["cbNonProdTime"] as CheckBox;
//optional
RadDatePicker calShippingDate = Session["calShippingDate"] as RadDatePicker;
RadTextBox txtWashPrep = Session["txtWashPrep"] as RadTextBox;
RadComboBox ddlPriority = Session["ddlPriority"] as RadComboBox;
CheckBox cbWorkOff = Session["cbWorkOff"] as CheckBox;
CheckBox cbLocked = Session["cbLocked"] as CheckBox;
RadTextBox txtRawMaterialDependency = Session["txtRawMaterialDependency"] as RadTextBox;
RadTextBox txtComments = Session["txtComments"] as RadTextBox;
//conatinering
Repeater rtpContainering = Session["rptContainering"] as Repeater;
RadComboBox ddlContainerType = Session["ddlContainerType"] as RadComboBox;
RadTextBox txtContainerQuantity = Session["txtContainerQuantity"] as RadTextBox;
//write the values of the controls into the appointment object
e.ModifiedAppointment.Subject = ddlMatereial.SelectedValue;
e.ModifiedAppointment.Start = Convert.ToDateTime(dtpStartDateTime.SelectedDate);
e.ModifiedAppointment.End = Convert.ToDateTime(dtpEndDateTime.SelectedDate);
e.ModifiedAppointment.Attributes["BatchNumber"] = txtBatchNumber.Text;
e.ModifiedAppointment.Attributes["UnitOfMeasure"] = ddlUnitOfMeasure.SelectedValue;
e.ModifiedAppointment.Attributes["BatchSize"] = txtBatchSize.Text;
e.ModifiedAppointment.Attributes["NonProdTime"] = (cbNonProdTime.Checked) ? "true" : "false";
e.ModifiedAppointment.Attributes["ShipDate"] = Convert.ToDateTime(calShippingDate.SelectedDate).ToShortDateString();
e.ModifiedAppointment.Attributes["WashPrep"] = txtWashPrep.Text;
e.ModifiedAppointment.Attributes["Priority"] = ddlPriority.SelectedValue;
e.ModifiedAppointment.Attributes["WorkOff"] = (cbWorkOff.Checked) ? "true" : "false";
e.ModifiedAppointment.Attributes["RawMaterialDependency"] = txtRawMaterialDependency.Text;
e.ModifiedAppointment.Attributes["Comments"] = txtComments.Text;
e.ModifiedAppointment.Attributes["IsLocked"] = (cbLocked.Checked) ? "true" : "false";
e.ModifiedAppointment.Attributes["IsDirty"] = "true";
//e.Appointment.Resources[0] = Convert.ToInt32(e.Appointment.Resources.GetResourceByType(plantNumber.ToString()));
}
protected
void
schMasterScheduler_FormCreated(
object
sender, SchedulerFormCreatedEventArgs e)
{
//gets all of the fields
//required fields
RadComboBox ddlMaterial = e.Container.FindControl(
"ddlMaterial"
)
as
RadComboBox;
RadTextBox txtBatchNumber = e.Container.FindControl(
"txtBatchNumber"
)
as
RadTextBox;
RadNumericTextBox txtBatchSize = e.Container.FindControl(
"txtBatchSize"
)
as
RadNumericTextBox;
RadComboBox ddlUnitOfMeasure = e.Container.FindControl(
"ddlUnitOfMeasure"
)
as
RadComboBox;
RadDateTimePicker dtpStartDateTime = e.Container.FindControl(
"dtpStartDateTime"
)
as
RadDateTimePicker;
RadNumericTextBox txtDuration = e.Container.FindControl(
"txtDuration"
)
as
RadNumericTextBox;
RadDateTimePicker dtpEndDateTime = e.Container.FindControl(
"dtpEndDateTime"
)
as
RadDateTimePicker;
ResourceControl resVessel = e.Container.FindControl(
"ResVessel"
)
as
ResourceControl;
CheckBox cbNonProdTime = e.Container.FindControl(
"cbNonProdTime"
)
as
CheckBox;
Label lblError = e.Container.FindControl(
"lblError"
)
as
Label;
//optional fields
Panel pnlNonProdOrder = e.Container.FindControl(
"pnlNonProdOrder"
)
as
Panel;
RadDatePicker calShippingDate = e.Container.FindControl(
"calShippingDate"
)
as
RadDatePicker;
RadTextBox txtWashPrep = e.Container.FindControl(
"txtWashPrep"
)
as
RadTextBox;
RadComboBox ddlPriority = e.Container.FindControl(
"ddlPriority"
)
as
RadComboBox;
CheckBox cbWorkOff = e.Container.FindControl(
"cbWorkOff"
)
as
CheckBox;
CheckBox cbLocked = e.Container.FindControl(
"cbLocked"
)
as
CheckBox;
RadTextBox txtRawMaterialDependency = e.Container.FindControl(
"txtRawMaterialDependency"
)
as
RadTextBox;
RadTextBox txtComments = e.Container.FindControl(
"txtComments"
)
as
RadTextBox;
//containering
Repeater rptContainering = e.Container.FindControl(
"rptContainering"
)
as
Repeater;
RadComboBox ddlContainerType = e.Container.FindControl(
"ddlContainerType"
)
as
RadComboBox;
TextBox txtContainerQuantity = e.Container.FindControl(
"txtContainerQuantity"
)
as
TextBox;
//add the controls to session that we need in other places
//required
Session[
"ddlMaterial"
] = ddlMaterial;
Session[
"txtBatchNumber"
] = txtBatchNumber;
Session[
"txtBatchSize"
] = txtBatchSize;
Session[
"ddlUnitOfMeasure"
] = ddlUnitOfMeasure;
Session[
"dtpStartDateTime"
] = dtpStartDateTime;
Session[
"txtDuration"
] = txtDuration;
Session[
"dtpEndDateTime"
] = dtpEndDateTime;
Session[
"ResVessel"
] = resVessel;
Session[
"cbNonProdTime"
] = cbNonProdTime;
Session[
"lblError"
] = lblError;
//optional
Session[
"pnlNonProdOrder"
] = pnlNonProdOrder;
Session[
"calShippingDate"
] = calShippingDate;
Session[
"txtWashPrep"
] = txtWashPrep;
Session[
"ddlPriority"
] = ddlPriority;
Session[
"cbWorkOff"
] = cbWorkOff;
Session[
"cbLocked"
] = cbLocked;
Session[
"txtRawMaterialDependency"
] = txtRawMaterialDependency;
Session[
"txtComments"
] = txtComments;
//conatinering
Session[
"rptContainering"
] = rptContainering;
Session[
"ddlContainerType"
] = ddlContainerType;
Session[
"txtContainerQuantity"
] = txtContainerQuantity;
//load materials drop down
LoadMaterialsDropdown(ddlMaterial, plantNumber);
//fill the form out with the information from appointment object
if
(ViewState[
"mode"
].ToString() ==
"update"
)
{
//required
ddlMaterial.SelectedValue = e.Appointment.Subject;
txtBatchNumber.Text = e.Appointment.Attributes[
"BatchNumber"
];
txtBatchSize.Text = e.Appointment.Attributes[
"BatchSize"
];
ddlUnitOfMeasure.SelectedValue = e.Appointment.Attributes[
"UnitOfMeasure"
];
txtDuration.Text = e.Appointment.End.Subtract(e.Appointment.Start).TotalHours.ToString();
cbNonProdTime.Checked = (e.Appointment.Attributes[
"NonProdTime"
].ToLower() ==
"true"
) ?
true
:
false
;
//optional
calShippingDate.SelectedDate = DateTime.Parse(e.Appointment.Attributes[
"ShipDate"
]);
txtWashPrep.Text = e.Appointment.Attributes[
"WashPrep"
];
cbWorkOff.Checked = (e.Appointment.Attributes[
"WorkOff"
].ToLower() ==
"true"
) ?
true
:
false
;
cbLocked.Checked = (e.Appointment.Attributes[
"IsLocked"
].ToLower() ==
"true"
) ?
true
:
false
;
txtRawMaterialDependency.Text = e.Appointment.Attributes[
"RawMaterialDependency"
];
txtComments.Text = e.Appointment.Attributes[
"Comments"
];
ddlPriority.SelectedValue = e.Appointment.Attributes[
"Priority"
];
//enable/diable fields based on nonProdTime
NonProdTimeCheckedChanged();
//redo this part with the container information
//mock up the containers to fill the middle section of the popup
ContainersMock containerBL =
new
ContainersMock();
List<Container> containers = containerBL.GetContainers();
rptContainering.DataSource = containers;
rptContainering.DataBind();
}
else
if
(ViewState[
"mode"
].ToString() ==
"insert"
)
{
}
}