2012-12-14 71 views
0

我试图在DevExpress网格中实现拖放功能。我尝试过的第一种方法没有奏效,因为dragdrop方法没有被击中。我是否必须让它由mouseDown事件触发,或者我该如何去做这件事。例如,将不胜感激。我试过到目前为止是这样的:在DevExpress网格中拖放

private void gridFields_DragDrop(object sender, DragEventArgs e) 
{ 
    GridControl grid = sender as GridControl; 
    GridView view = grid.MainView as GridView; 
    GridHitInfo srcHitInfo = e.Data.GetData(typeof(GridHitInfo)) as GridHitInfo; 
    GridHitInfo hitInfo = view.CalcHitInfo(grid.PointToClient(new Point(e.X, e.Y))); 
    int sourceRow = srcHitInfo.RowHandle; 
    int targetRow = hitInfo.RowHandle; 
    MoveRow(sourceRow, targetRow); 
} 

private void MoveRow(int sourceRow, int targetRow) 
{ 
    if (sourceRow == targetRow || sourceRow == targetRow + 1) 
     return; 

    GridView view = gridFieldView; 
    DataRow row1 = view.GetDataRow(targetRow); 
    DataRow row2 = view.GetDataRow(targetRow + 1); 
    DataRow dragRow = view.GetDataRow(sourceRow); 
    decimal val1 = (decimal)row1[OrderFieldName]; 
    if (row2 == null) 
     dragRow[OrderFieldName] = val1 + 1; 
    else 
    { 
     decimal val2 = (decimal)row2[OrderFieldName]; 
     dragRow[OrderFieldName] = (val1 + val2)/2; 
    } 
} 
+0

你看了DevExpress支持网站吗?如果你问DevExpress的支持,他们会很快告诉你。 –

+0

Devexpress支持的难过部分是他们只有在您获得devexpress许可证后才能提供帮助。 –

回答

2

对不起,我想补充这只是一个评论,但SO不会让我。

我假设你想允许用户通过拖动它们在[WinForms]网格上下移动行。您认为您需要设置MouseDown事件实际上是正确的。另外,你需要MouseMove事件。

试试本指南! http://tv.devexpress.com/Content/XtraGrid/XtraGridDragRowsBetweenGrids/XtraGridDragRowsBetweenGrids.pdf

如果您无法访问它,请告诉我。

更新

尝试这些。他们是特定于我的需求,但我认为你应该能够重新定位它们。

​​

希望有所帮助。

+0

我意识到,指南是专门为能够拖放多个网格之间。让我为一个例子挖掘一些旧代码。 – Fise

0
GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y)); 

未将对象引用设置为对象的实例。