在两个窗体中实现C1FlexGrid的拖动操作

最近我们有一位客户提出这样的需求,需要在两个窗体之间拖动表格控件,并且表格能够自动布局,目的是为了对比表格中的数据变化。在本文中,我们就会介绍如何通过C1FlexGrid for WinForms和FlowLayoutPanl实现这一需求。我们会创建一个MDI应用系统,用户可以在MDI中创建若干个子窗体,每个窗体都会包括一个FlowLayoutPanel和C1FlexGrid控件。当子窗体添加到MDI中时,我们会设置FlowlayoutPanel的AllowDrop属性为true,使FlowlayoutPanel可以接受拖动上来的对象。

发布于 2012/11/16 00:00

ComponentOne Enterprise

最近我们有一位客户提出这样的需求,需要在两个窗体之间拖动表格控件,并且表格能够自动布局,目的是为了对比表格中的数据变化。

在本文中,我们就会介绍如何通过C1FlexGrid for WinForms和FlowLayoutPanl实现这一需求。

我们会创建一个MDI应用系统,用户可以在MDI中创建若干个子窗体,每个窗体都会包括一个FlowLayoutPanel和C1FlexGrid控件。当子窗体添加到MDI中时,我们会设置FlowlayoutPanel的AllowDrop属性为true,使FlowlayoutPanel可以接受拖动上来的对象。


接下来,在C1FlexGrid的MouseCaptureChanged事件中设置FlowLayoutPanel的DragDropEffects属性

void c1FlexGrid2_MouseCaptureChanged(object sender, EventArgs e)
    {
        childFlowLayoutPanel.DoDragDrop((sender as C1FlexGrid), DragDropEffects.Move);
    }
    void childFlowLayoutPanel_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

操作完成时触发:

void childFlowLayoutPanel_DragDrop(object sender, DragEventArgs e)
    {
        C1FlexGrid data = (C1FlexGrid)e.Data.GetData(typeof(C1FlexGrid));
        FlowLayoutPanel _destination = (FlowLayoutPanel)sender;
        FlowLayoutPanel _source = (FlowLayoutPanel)((C1FlexGrid)data).FindForm().Controls["childFlowLayoutPanel"];

        if (_source != _destination)
        {
            // Add control to panel
            _destination.Controls.Add(data);
        }
    }

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

相关产品
推荐相关案例
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态