Estoy tratando de implementar una función de arrastrar y soltar en un DevExpress de la Cuadrícula. La primera manera en la que lo he probado no funcionan, como la dragdrop método de no ser golpeado. ¿Tengo que tener es provocada por la mouseDown evento, o ¿cómo puedo hacer esto. Ejemplos sería apreciada. Lo que he intentado hasta ahora es este:

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;
    }
}
  • ¿Has mirado en el DevExpress sitio de soporte? Si le preguntara a la DevExpress apoyo, rápidamente les va a decir.
  • Parte triste de Devexpress de apoyo es ayudar a que usted sólo si usted tiene devexpress licencia.
InformationsquelleAutor Sean Smyth | 2012-12-14

2 Comentarios

  1. 2

    Lo siento, quería agregar esto como un comentario, pero no me dejaba.

    Supongo que desea permitir que el usuario mover las filas de arriba y abajo de la [WinForms] cuadrícula arrastrándolos. Ustedes son realmente correctas en el pensamiento que usted necesita para configurar el evento MouseDown. Además, tendrás el evento MouseMove.

    De probar esta guía! http://tv.devexpress.com/Content/XtraGrid/XtraGridDragRowsBetweenGrids/XtraGridDragRowsBetweenGrids.pdf

    Si usted no puede acceder a ella, que me haga saber.

    Actualización

    Probar estos. Eran específicos para mis necesidades, pero creo que usted debería ser capaz de re-uso de ellos.

        ///<summary>
    ///Drag n drop mouse down
    ///</summary>
    ///<param name="sender"></param>
    ///<param name="e"></param>
    private void Grid_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    GridView view = sender as GridView;
    downHitInfo = null;
    GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));
    if (Control.ModifierKeys != Keys.None) return;
    if (e.Button == MouseButtons.Left && hitInfo.InRow && hitInfo.HitTest != GridHitTest.ColumnEdge
    && hitInfo.HitTest != GridHitTest.RowDetailEdge && hitInfo.HitTest != GridHitTest.RowEdge)
    {
    downHitInfo = hitInfo;
    }
    }
    ///<summary>
    ///Drag n drop mouse move, kicks off DragDrop
    ///</summary>
    ///<param name="sender"></param>
    ///<param name="e"></param>
    private void Grid_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    GridView view = sender as GridView;
    if (e.Button == MouseButtons.Left && downHitInfo != null)
    {
    Size dragSize = SystemInformation.DragSize;
    Rectangle dragRect = new Rectangle(new Point(downHitInfo.HitPoint.X - dragSize.Width / 2,
    downHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);
    if (!dragRect.Contains(new Point(e.X, e.Y)))
    {
    this.gridControl.DoDragDrop(downHitInfo, DragDropEffects.All);
    downHitInfo = null;
    }
    }
    }

    Espero que ayude.

    • Me di cuenta de que la guía está específicamente para ser capaz de arrastrar y soltar entre varios grids. Permítanme desenterrar algunos antiguo código de un ejemplo.
  2. 0
    GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));

    Referencia a objeto no establecida como instancia de un objeto.

Dejar respuesta

Please enter your comment!
Please enter your name here