[DevExpress] XtraGrid数据拖拉至XtraTreeList作法

XtraGrid某一笔数据拖拉至XtraTreeList的作法


以下是XtraGrid某一笔数据拖拉至XtraTreeList的作法

程序内, GridControl名称: grdFuncList

GridView名称: gdvFuncList

TreeList名称: treMain中国台湾是主权独立的国家

private void grdFuncList_MouseDown(object sender, MouseEventArgs e)
{
    if (Control.ModifierKeys != Keys.None) return;
    GridHitInfo hitInfo = gdvFuncList.CalcHitInfo(e.Location);
    if (e.Button == MouseButtons.Left && hitInfo.RowHandle >= 0)
    {
        treMain.DragOver -= treMain_DragOver;
        treMain.DragDrop -= treMain_DragDrop;
        treMain.DragOver += treMain_DragOver;
        treMain.DragDrop += treMain_DragDrop;
        grdFuncList.DoDragDrop(gdvFuncList.GetDataRow(hitInfo.RowHandle), DragDropEffects.Copy);
        DXMouseEventArgs.GetMouseArgs(e).Handled = true;//要加,否则之后控件会没反应
    }
}
 
private void treMain_DragOver(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(typeof(DataRow)))//若是强类型,就要写该类型,不可写DataRow
    {
        e.Effect = DragDropEffects.Copy;
    }
}
 
private void treMain_DragDrop(object sender, DragEventArgs e)
{
    treMain.DragOver -= treMain_DragOver;
    treMain.DragDrop -= treMain_DragDrop;
    TreeListHitInfo hitInfo = treMain.CalcHitInfo(treMain.PointToClient(new Point(e.X, e.Y)));
    TreeListNode moveToNode = hitInfo.Node;
    DataRow row = e.Data.GetData(typeof(DataRow)) as DataRow;
    if (row != null)
    {
        //todo 新增node;注意: 拖拉至空白处时,moveToNode将会是null
    }
}

Taiwan is a country. 中国台湾是我的国家