using DevExpress.Utils; using DevExpress.Utils.Menu; using DevExpress.XtraScheduler; using DevExpress.XtraScheduler.Commands; using DevExpress.XtraScheduler.Drawing; using DevExpress.XtraScheduler.Services; using DevExpress.XtraScheduler.Xml; using HL_FristAidPlatform_DTO; using HL_FristAidPlatform_Public; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; namespace HL_FristAidPlatform_PreHospitalEmergency { public partial class Form_Roster : Form { public Form_Roster() { InitializeComponent(); } private void schedulerControl1_Click(object sender, EventArgs e) { //MessageBox.Show("点击事件"); } private void Form_Roster_Load(object sender, EventArgs e) { try { #region 设置默认样式 //schedulerControl1.OptionsCustomization.AllowAppointmentCreate = UsedAppointmentType.None; //schedulerControl1.OptionsCustomization.AllowAppointmentDelete = UsedAppointmentType.None; //schedulerControl1.OptionsCustomization.AllowAppointmentEdit = UsedAppointmentType.None; //schedulerControl1.OptionsCustomization.AllowAppointmentDrag = UsedAppointmentType.None; schedulerControl1.OptionsCustomization.AllowAppointmentMultiSelect = false; schedulerControl1.OptionsRangeControl.AllowChangeActiveView = false; schedulerControl1.MonthView.CompressWeekend = false; schedulerControl1.OptionsBehavior.ShowRemindersForm = false; //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO.Add(new Appointment()); //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].AllDay = false; //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].LabelId = 2; //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].Location = "Title"; //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].Start = DateTime.Now; //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].End = DateTime.Now.AddHours(1); //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].Subject = "Subject"; //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].StatusId = 1; //schedulerDataStorage1.T_Service_FristAid_UserAppointmentDTO[0].Description = "描述"; #endregion //3.自定义Tooltip //ToolTipController toolTipController1 = new ToolTipController(); //toolTipController1.AllowHtmlText = true; //toolTipController1.ShowBeak = true; //toolTipController1.BeforeShow += new ToolTipControllerBeforeShowEventHandler(toolTipController1_BeforeShow); //schedulerControl1.ToolTipController = this.toolTipController1;//与schedule绑定 schedulerControl1.Start = DateTime.Now; schedulerControl1.DataStorage.Appointments.ResourceSharing = true; DataBind(); } catch (Exception ex) { PublicClass.WriteErrorLog(this.Text, ex.Message); } } //2.右键菜单--自定义 //从数据库加载资源信息 private void DataBind() { try { string url = string.Format("api/service/T_Service_FristAid_UserAppointment?pageIndex={0}&pageSize={1}", 1, 100); DataSet ds = DBHelpClass.GetDataSet(url); DataTable ResultDT = ds.Tables["Data"]; schedulerDataStorage1.Appointments.Mappings.AppointmentId = "ID"; schedulerDataStorage1.Appointments.Mappings.AllDay = "AllDay"; schedulerDataStorage1.Appointments.Mappings.Description = "UserDescription"; schedulerDataStorage1.Appointments.Mappings.End = "EndDate"; schedulerDataStorage1.Appointments.Mappings.Label = "Label"; schedulerDataStorage1.Appointments.Mappings.Location = "Location"; if (schedulerControl1.ResourceSharing) { schedulerDataStorage1.Appointments.Mappings.ResourceId = "ResourceIds"; } else { schedulerDataStorage1.Appointments.Mappings.ResourceId = "ResourceId"; } schedulerDataStorage1.Appointments.Mappings.RecurrenceInfo = "RecurrenceInfo"; schedulerDataStorage1.Appointments.Mappings.ReminderInfo = "ReminderInfo"; schedulerDataStorage1.Appointments.Mappings.Start = "StartDate"; schedulerDataStorage1.Appointments.Mappings.Status = "UserStatus"; schedulerDataStorage1.Appointments.Mappings.Subject = "UserSubject"; schedulerDataStorage1.Appointments.Mappings.Type = "UserType"; schedulerDataStorage1.Appointments.DataSource = ResultDT; string urlAPP = string.Format("api/service/T_Service_FristAid_AppAppointment?pageIndex={0}&pageSize={1}", 1, 100); DataSet dataSet= DBHelpClass.GetDataSet(urlAPP); DataTable ResultDTAPP = dataSet.Tables["Data"]; schedulerDataStorage1.Resources.Mappings.Id = "ResourceId"; schedulerDataStorage1.Resources.Mappings.Caption = "ResourceName"; schedulerDataStorage1.Resources.Mappings.Color = "Color"; schedulerDataStorage1.Resources.Mappings.Image = "APPImage"; schedulerDataStorage1.Resources.DataSource = ResultDTAPP; schedulerControl1.RefreshData();//必须,每次修改需要刷新数据源,否则界面需要重新刷新 } catch (Exception e) { PublicClass.WriteErrorLog(this.Name, e.Message); } } private void schedulerControl1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) { //对日程的右键菜单进行修改 SchedulerControl control = schedulerControl1; if (e.Menu.Id == SchedulerMenuItemId.DefaultMenu) { //隐藏【视图更改为】菜单 SchedulerPopupMenu itemChangeViewTo = e.Menu.GetPopupMenuById(SchedulerMenuItemId.SwitchViewMenu); itemChangeViewTo.Visible = true; //删除【新建所有当天事件】菜单 e.Menu.RemoveMenuItem(SchedulerMenuItemId.NewAllDayEvent); //设置【新建定期日程安排】菜单为不可用 e.Menu.RemoveMenuItem(SchedulerMenuItemId.NewRecurringAppointment); //设置【新建定期日程安排】菜单为不可用 SchedulerMenuItem forItem = e.Menu.GetMenuItemById(SchedulerMenuItemId.NewRecurringEvent); if (forItem != null) forItem.Caption = "新建循环排班"; //改名【新建日程安排】菜单为自定义名称 SchedulerMenuItem item = e.Menu.GetMenuItemById(SchedulerMenuItemId.NewAppointment); if (item != null) item.Caption = "新建排班"; //创建一个新项,用内置的命令 ISchedulerCommandFactoryService service = (ISchedulerCommandFactoryService)control.GetService(typeof(ISchedulerCommandFactoryService)); SchedulerCommand cmd = service.CreateCommand(SchedulerCommandId.PrintPreview);//打印预览 SchedulerMenuItemCommandWinAdapter menuItemCommandAdapter = new SchedulerMenuItemCommandWinAdapter(cmd); DXMenuItem menuItem = (DXMenuItem)menuItemCommandAdapter.CreateMenuItem(DXMenuItemPriority.Normal); menuItem.BeginGroup = true; e.Menu.Items.Add(menuItem); ////创建一个新的自定义事件菜单 //DXMenuItem menuTest = new SchedulerMenuItem("排班"); //menuTest.Click += menuItem2_Click; //menuTest.BeginGroup = true; //e.Menu.Items.Add(menuTest); } } private void schedulerControl1_CustomDrawAppointment(object sender, DevExpress.XtraScheduler.CustomDrawObjectEventArgs e) { //try //{ // if (e.ObjectInfo.GetType() != typeof(AppointmentViewInfo) && e.ObjectInfo.GetType() != typeof(HorizontalAppointmentViewInfo)) // return; // AppointmentViewInfo viewInfo = e.ObjectInfo as AppointmentViewInfo; // Appointment app = viewInfo.Appointment as Appointment; // if (app == null) // return; // e.Cache.DrawString((viewInfo.Appointment, viewInfo.Appearance.Font, viewInfo.Bounds.Width).ToString(), // viewInfo.Appearance.Font, new SolidBrush(viewInfo.Appearance.ForeColor), // viewInfo.Bounds, // viewInfo.Appearance.TextOptions.GetStringFormat());//超出部分,做处理 // e.Handled = true;//不会执行默认操作 //} //catch (Exception ex) //{ // throw ex; //} } //重绘Header部分 private void schedulerControl1_CustomDrawDayHeader(object sender, DevExpress.XtraScheduler.CustomDrawObjectEventArgs e) { //try //{ // if (e.ObjectInfo.GetType() != typeof(MonthViewTimeCellHeader)) // return; // MonthViewTimeCellHeader header = (MonthViewTimeCellHeader)e.ObjectInfo; // SelectableIntervalViewInfo viewInfo = e.ObjectInfo as SelectableIntervalViewInfo; // Brush br = GetBrush(header.Interval.Start, DateTime.Now); // if (viewInfo.Selected) // { // br = new SolidBrush(Color.Bisque); //设置被选中时颜色 // } // e.Cache.FillRectangle(br, new Rectangle(e.Bounds.X + 1, e.Bounds.Y, e.Bounds.Width - 2, e.Bounds.Height - 1));//填充header部分 // StringFormat sf = header.Appearance.HeaderCaption.TextOptions.GetStringFormat(TextOptions.DefaultOptionsCenteredWithEllipsis); // e.Cache.DrawString(header.Interval.Start.ToString("MM月dd日"), schedulerControl1.MonthView.Appearance.HeaderCaption.Font, Brushes.Green, e.Bounds, sf);//自定义日期格式 // e.Handled = true; //} //catch (Exception ex) //{ // throw ex; //} } private void schedulerControl1_CustomDrawTimeCell(object sender, DevExpress.XtraScheduler.CustomDrawObjectEventArgs e) { //try //{ // if (e.ObjectInfo.GetType() != typeof(MonthSingleWeekCell)) // return; // MonthSingleWeekCell cell = ((MonthSingleWeekCell)(e.ObjectInfo)); // SelectableIntervalViewInfo selcell = e.ObjectInfo as SelectableIntervalViewInfo; // Brush br = GetBrush(cell.Interval.Start, DateTime.Now); // if (selcell.Selected) // { // br = new SolidBrush(Color.Green); // } // e.Cache.FillRectangle(br, new Rectangle(e.Bounds.X + 1, e.Bounds.Y, e.Bounds.Width - 2, e.Bounds.Height - 1));//填充图示2部分 // e.Handled = true; //} //catch (Exception ex) //{ // throw ex; //} } //自定义颜色 public static Brush GetBrush(DateTime inDate, DateTime currentYerestday) { Brush result = null; if (inDate <= currentYerestday) { result = Brushes.LightGray; } else if (inDate > currentYerestday && inDate < currentYerestday.AddHours(24)) { result = Brushes.LightBlue; } else { result = Brushes.LightGreen; } return result; } //新增 private void Storage_AppointmentInserting(object sender, PersistentObjectCancelEventArgs e) { Appointment apt = e.Object as Appointment; T_Service_FristAid_UserAppointmentDTO info = ConvertToAppoint(apt); List list = new List(); list.Add(info); string url = "api/service/T_Service_FristAid_UserAppointment"; ClientFactory httpClient = new HttpClientFactory(); Client client = httpClient.VisitFactory(); ListEntity t = client.Post(url, list); e.Cancel = !t.Success; if (t.Success) { DataBind(); } } //修改 private void Storage_AppointmentChanging(object sender, PersistentObjectCancelEventArgs e) { Appointment apt = e.Object as Appointment; T_Service_FristAid_UserAppointmentDTO info = ConvertToAppoint(apt); List list = new List(); list.Add(info); string url = "api/service/T_Service_FristAid_UserAppointment/Update"; ClientFactory httpClient = new HttpClientFactory(); Client client = httpClient.VisitFactory(); ListEntity t = client.Post(url, list); e.Cancel = !t.Success; } //删除 private void Storage_AppointmentDeleting(object sender, PersistentObjectCancelEventArgs e) { Appointment apt = e.Object as Appointment; if (apt != null && apt.Id != null) { if (MessageBox.Show("您确认要删除该记录吗?") == DialogResult.OK) { string url = "api/service/T_Service_FristAid_UserAppointment?ids=" + apt.Id; ClientFactory httpClient = new HttpClientFactory(); Client client = httpClient.VisitFactory(); var t = client.Delete(url); e.Cancel = !t; } } } private T_Service_FristAid_UserAppointmentDTO ConvertToAppoint(Appointment apt) { T_Service_FristAid_UserAppointmentDTO userAppointmentInfo = new T_Service_FristAid_UserAppointmentDTO(); try { if (!string.IsNullOrEmpty(apt.Id + "")) { userAppointmentInfo.ID = int.Parse(apt.Id + ""); } userAppointmentInfo.AllDay = apt.AllDay; switch (apt.Type.ToString()) { case "Pattern": userAppointmentInfo.UserType = 1;//int.Parse(AppointmentType.Pattern.ToString()); break; case "Normal": userAppointmentInfo.UserType = 0;//.Parse(AppointmentType.Normal.ToString()); break; case "Occurrence": userAppointmentInfo.UserType = 2;// int.Parse(AppointmentType.Occurrence.ToString()); break; case "ChangedOccurrence": userAppointmentInfo.UserType = 3;// int.Parse(AppointmentType.ChangedOccurrence.ToString()); break; case "DeletedOccurrence": userAppointmentInfo.UserType = 4;// int.Parse(AppointmentType.DeletedOccurrence.ToString()); break; default: userAppointmentInfo.UserType = 0;// int.Parse(AppointmentType.Normal.ToString()); break; } userAppointmentInfo.StartDate = apt.Start; userAppointmentInfo.EndDate = apt.End; userAppointmentInfo.QueryStartDate = apt.Start; userAppointmentInfo.QueryEndDate = apt.Start; userAppointmentInfo.UserSubject = apt.Subject; userAppointmentInfo.Location = apt.Location; userAppointmentInfo.UserDescription = apt.Description; userAppointmentInfo.UserStatus = int.Parse(apt.StatusKey + ""); userAppointmentInfo.Label = int.Parse(apt.LabelKey + ""); if (apt.ResourceId.ToString() == "DevExpress.XtraScheduler.EmptyResourceId") { userAppointmentInfo.ResourceId = 0; } else { userAppointmentInfo.ResourceId = int.Parse(apt.ResourceId + ""); } //多人资源的信息 if (apt.ResourceIds != null) { AppointmentResourceIdCollectionContextElement item = new AppointmentResourceIdCollectionContextElement(apt.ResourceIds); userAppointmentInfo.ResourceIds = item.ValueToString(); //第二种 //AppointmentResourceIdCollectionXmlPersistenceHelper helper = new AppointmentResourceIdCollectionXmlPersistenceHelper(apt.ResourceIds); //userAppointmentInfo.ResourceIds = helper.ToXml(); } //日程重复信息 if (apt.RecurrenceInfo != null) { userAppointmentInfo.RecurrenceInfo = apt.RecurrenceInfo.ToXml(); } //提醒信息 if (apt.Reminder != null) { userAppointmentInfo.ReminderInfo = ReminderCollectionXmlPersistenceHelper.CreateSaveInstance(apt).ToXml(); } userAppointmentInfo.TimeZoneId = apt.TimeZoneId; return userAppointmentInfo; } catch (Exception e) { PublicClass.WriteErrorLog(this.Name, e.Message); return userAppointmentInfo; } } private void schedulerControl1_EditAppointmentFormShowing_1(object sender, AppointmentFormEventArgs e) { SchedulerControl scheduler = ((SchedulerControl)(sender)); CustomAppointmentForm1 form = new CustomAppointmentForm1(scheduler, e.Appointment, e.OpenRecurrenceForm); try { e.DialogResult = form.ShowDialog(); e.Handled = true; } finally { form.Dispose(); } } } }