在上篇小说《在Winform开发中利用日程序控制件XtraScheduler》中牵线了DevExpress的XtraScheduler日程序控制件的种种应用知识点,对于大家的话,日程序控制件不不熟悉,如OutLook里面就有日历的模块,然则这几个日程序控制件真的是很复杂的一个控件,要求健全明白大概须求成本很多的年月去询问,由于是技术斟酌,笔者一而再希望把它常用的机能剖析的愈加干净一些,后边小说也介绍了它的积存成效,把它依照实体类的法子存储在数据Curry面,但是介绍的还不够,本文继续上边包车型客车剧情,进行多少存款和储蓄方面包车型地铁介绍。

在查看了大气质感,以及一两日的潜入斟酌,总算把它的多少存款和储蓄和血脉相通熟识有八个相比较清晰的垂询。

① 、数据绑定及加载的处理回想

在上篇小说里面,小编总体性介绍了那一个控件的数量绑定,以及数额是怎么着保存到数据Curry面包车型客车,绑定到DevExpress的XtraScheduler日程序控制件的步调是亟需先安装好映射关系(Mappings),然后绑定数据源即可。

操作代码如下所示。

        /// <summary>
        /// 设置日程控件的字段映射
        /// </summary>
        /// <param name="control">日程控件</param>
        private void SetMappings(SchedulerControl control)
        {
            AppointmentMappingInfo appoint = control.Storage.Appointments.Mappings;
            appoint.AllDay = "AllDay";
            appoint.Description = "Description";
            appoint.End = "EndDate";
            appoint.Label = "AppLabel";
            appoint.Location = "Location";
            appoint.RecurrenceInfo = "RecurrenceInfo";
            appoint.ReminderInfo = "ReminderInfo";
            appoint.ResourceId = "ResourceId";
            appoint.Start = "StartDate";
            appoint.Status = "Status";
            appoint.Subject = "Subject";
            appoint.Type = "EventType";

            ResourceMappingInfo res = control.Storage.Resources.Mappings;
            res.Caption = "ResourceName";
            res.Color = "Color";
            res.Id = "ResourceId";
            res.Image = "Image";
        }

接下来接着正是绑定Appointment和Resource到对应的数据源里面接口。

            //从数据库加载日程信息
            List<AppResourceInfo> resouceList = BLLFactory<AppResource>.Instance.GetAll();
            this.schedulerStorage1.Resources.DataSource = resouceList;

            List<UserAppointmentInfo> eventList = BLLFactory<UserAppointment>.Instance.GetAll();
            this.schedulerStorage1.Appointments.DataSource = eventList;

 

二 、日程数据的增加和删除改处理

但是,上边那样的储存在是事实上是相比较少的,也正是大家一再恐怕会在界面上开始展览增加产量恐怕复制记录,修改记录,或许去除记录等操作,由此必要更为选用日程控件的应有尽有接口来处理这几个操作。

咱俩在VS的附和控件属性之中可以看到部分关于存款和储蓄的主要事件,相当于日程的增加和删除改处管事人件,如下所示。

XML 1

上边那个事件也等于对应在日程序控制件里面右键菜单对应的增加和删除改操作。

XML 2

XML 3

此外日程序控制件还是能够支持拖动修改、拖动复制、删除键删除操作的,这个也是会继续调用地方那多少个增加和删除改的操作事件的,所以我们就对她们开始展览完美,大家根本是拍卖ing类型的轩然大波,如Inserting的事件,在写入日程序控制件集合此前的拍卖。

            //写回数据库操作的事件
            control.Storage.AppointmentInserting += Storage_AppointmentInserting;
            control.Storage.AppointmentChanging += Storage_AppointmentChanging;
            control.Storage.AppointmentDeleting += Storage_AppointmentDeleting;

对此修改数据前的拍卖,大家是让它在得手写入数据库后,在支配是还是不是更新日程对象的仓库储存集合还是屏弃修改记录,如下所示。

        void Storage_AppointmentChanging(object sender, PersistentObjectCancelEventArgs e)
        {
            Appointment apt = e.Object as Appointment;
            UserAppointmentInfo info = ConvertToAppoint(apt);

            bool success = BLLFactory<UserAppointment>.Instance.Update(info, apt.Id);
            e.Cancel = !success;
        }

专注上边的e.Cancel
=true恐怕false代表是还是不是遗弃,上边包车型地铁代码逻辑就是假如咱们顺遂写入数据库,那么就足以成功更新到日程序控制件的存款和储蓄集合里面,而且就能够在界面看到最新的结果。

有了上面包车型大巴了解,大家就足以更进一步完善在插入前、删除前的代码处理了。

对于删除前的操作,大家得以用的代码如下所示。

        void Storage_AppointmentDeleting(object sender, PersistentObjectCancelEventArgs e)
        {
            Appointment apt = e.Object as Appointment;
            if (apt != null && apt.Id != null)
            {
                if (MessageDxUtil.ShowYesNoAndWarning("您确认要删除该记录吗?") == DialogResult.Yes)
                {
                    bool success = BLLFactory<UserAppointment>.Instance.Delete(apt.Id);
                    e.Cancel = !success;
                }
            }
        }

我们接纳代码MessageDxUtil.ShowYesNoAndWarning来判断是或不是继续,如下界面所示。

XML 4

对于插入的笔录,我们必要进一步专注,必要写入数据库后,进行本地的积存记录的翻新,那样才能客观展现,不然简单生出复制、创立的记录地点一而再不对,偏移到任啥地方方去的。

        void Storage_AppointmentInserting(object sender, PersistentObjectCancelEventArgs e)
        {
            Appointment apt = e.Object as Appointment;
            UserAppointmentInfo info = ConvertToAppoint(apt);

            bool success = BLLFactory<UserAppointment>.Instance.Insert(info);
            e.Cancel = !success;
            if (success)
            {
                LoadData();
            }
        }

LoadData便是大家从数据库加载日程音讯,并绑定到日程序控制件的仓库储存对象里面,在那之中必要留意的正是急需动用RefreshData方法,让日程序控制件的蕴藏对象刷新一下,那样才能够得手呈现大家抬高的记录。

            //从数据库加载日程信息
            List<AppResourceInfo> resouceList = BLLFactory<AppResource>.Instance.GetAll();
            this.schedulerStorage1.Resources.DataSource = resouceList;

            List<UserAppointmentInfo> eventList = BLLFactory<UserAppointment>.Instance.GetAll();
            this.schedulerStorage1.Appointments.DataSource = eventList;

            this.schedulerControl1.RefreshData();//必须,每次修改需要刷新数据源,否则界面需要重新刷新

 

三 、六人财富的处理

在日程序控制件里面,帮衬三个人财富的处理,暗中认可是能源只好选取这些,供给多少人的话,那么就要求设置下边包车型大巴质量来展现表明使用四个人能源,如下所示。

schedulerControl1.Storage.Appointments.ResourceSharing = true;

XML 5

动用多少人的能源,能够对财富进行复选,它的映照记录便是ResourceIds的了,所以设置映射属性的时候,大家须求看清这么些ResourceSharing
属性。

            if(control.ResourceSharing)
            {
                appoint.ResourceId = "ResourceIds";
            }
            else
            {
                appoint.ResourceId = "ResourceId";
            }

内部ResourceId的剧情格式如下所示

<ResourceIds>  <ResourceId Type="System.String" Value="1" /><ResourceId Type="System.String" Value="2" />  </ResourceIds>

和ResourceId不一致这里的值就是3个XML内容,这一个和唤醒等内容的囤积格式一样,都以依据XML的剧情。日程序控制件涉及到的二种XML的音讯获取如下所示。

            //多人资源的信息
            if(apt.ResourceIds != null)
            {
                AppointmentResourceIdCollectionContextElement item =
                    new AppointmentResourceIdCollectionContextElement(apt.ResourceIds);
                info.ResourceIds = item.ValueToString();

                //第二种
                //AppointmentResourceIdCollectionXmlPersistenceHelper helper = new AppointmentResourceIdCollectionXmlPersistenceHelper(apt.ResourceIds);
                //info.ResourceIds = helper.ToXml();
            }

            //日程重复信息
            if (apt.RecurrenceInfo != null)
            {
                info.RecurrenceInfo = apt.RecurrenceInfo.ToXml();
            }
            //提醒信息
            if (apt.Reminder != null)
            {
                info.ReminderInfo = ReminderCollectionXmlPersistenceHelper.CreateSaveInstance(apt).ToXml();
            }

 

上述就是大家平日利用的日程序控制件的拍卖内容了,希望对大家具有支持。

相关文章

网站地图xml地图