← 返回所有博客文章

在商业应用系统中,控件之间的数据交互是常见功能之一,数据拖拽就是很典型的数据交互形式,本文讲述的功能也是来自实际的客户需求,将 C1FlexGrid  数据拖拽到 C1Schedule 中,以此来创建 Appointment 。

实现 C1FlexGrid 与 C1Schedule 之间数据拖拽功能,有两种方案可供参考:

第一种:使用 C1FlexGrid 与 C1Schedule 内置的拖拽功能(完整代码请参考附件中的Form2)

通过内置的功能,用户只需设置以下两个属性便可实现数据的拖拽:

c1Schedule1.AllowDrop = true;
c1FlexGrid1.DragMode = DragModeEnum.Manual;

 

然后,在 C1Schedule 的 DragDrop 事件中设置 Appointment 对象的各种属性:

    void c1Schedule1_DragDrop(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(typeof(C1.C1Schedule.Appointment)))
        {
            // 获取拖拽到 Schedule 上的 Appointment 对象
            C1.C1Schedule.Appointment app = e.Data.GetData(typeof(C1.C1Schedule.Appointment)) as C1.C1Schedule.Appointment;
 
            // 设置 Appointment 的任意属性
            app.Subject = app.Body;                
            app.Body = "测试任务";
        }
    }

 

运行程序,选中 C1FlexGrid 中的单元格,此时光标右上角会显示一个 + 号,按下鼠标左键将数据拖拽到 C1Schedule 中。

C1FlexGrid_DragDrop_1

 

第二种:使用自定义的 C1FlexGrid 拖拽行为(完整代码请参考附件中的Form1)

设置 C1FlexGrid 的以下属性之后,便可实现自定义的 C1FlexGrid 行为:

c1FlexGrid1.DragMode = DragModeEnum.Manual;

 

然后,在 C1FlexGrid 的 MouseDown 事件中调用 C1FlexGrid.DoDragDrop 方法:

    void c1FlexGrid1_MouseDown(object sender, MouseEventArgs e)
    {
        // 选中一个单元格之后,开启拖拽功能
        C1FlexGrid flex = sender as C1FlexGrid;
        HitTestInfo hti = flex.HitTest(e.X, e.Y);
 
        if (hti.Type == HitTestTypeEnum.Cell)
        {
            // 创建 Appointment,这里只设置了 Subject 属性
            // 还可以根据任务类型设置 Appointment 的时间、位置等属性
            C1.C1Schedule.Appointment app = new C1.C1Schedule.Appointment();
            app.Subject = flex[hti.Row, 0].ToString();
 
            flex.DoDragDrop(app, DragDropEffects.Copy);
        }
    }

 

最后在 C1Schedule.DragDrop 事件中接受拖拽的数据:

    void c1Schedule1_DragDrop(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(typeof(C1.C1Schedule.Appointment)))
        {
            // 获取拖拽到 Schedule 上的 Appointment 对象
            C1.C1Schedule.Appointment app = e.Data.GetData(typeof(C1.C1Schedule.Appointment)) as C1.C1Schedule.Appointment;
 
            // 设置 Appointment 的任意属性
            app.Body = "测试任务";
        }
    }

 

运行程序,鼠标左键选中 C1FlexGrid 中的数据,拖拽到 C1Schedule 中:

C1FlexGrid_DragDrop_2

源码下载:VS2010 + ComponentOne Studio for WinForms 2013V1