devExpress之GridView小技巧(一):实现拖拽多选

来源:互联网 发布:mac u盘4g以上文件 编辑:程序博客网 时间:2024/04/28 15:14

GridView可以通过Shift键或Ctrl键以及Ctrl+A快捷键实现多选,但是默认不支持拖拽多选,好像也没有设置的方法。这样虽然没什么问题,但是肯定会给用户带来不便。
首先要设置OptionsSelection中的MultiSelect为true,也就是允许多选,否则下面的一切都是浮云。

本文通过以下代码实现拖拉多选的功能,主要是编写MouseDownMouseMoveMouseUp三个函数。

这里需要注意一下GridHitInfo,这个类可以根据xy坐标获取该点在GridView中的相关信息,例如在哪行哪列哪个单元格内,或者是否在单元格里。

 

        //用于记录,鼠标是否已按下        bool isMouseDown = false;         //用于鼠标拖动多选,标记是否记录开始行        bool isSetStartRow = false;         //用于鼠标拖动多选,记录开始行        private int StartRowHandle = -1;         //用于鼠标拖动多选,记录现在行        private int CurrentRowHandle = -1;         //用于实现鼠标拖动选择多行功能中的一个方法,对单元格区域进行选中        private void SelectRows(int startRow, int endRow)        {            if (startRow > -1 && endRow > -1)            {                gridView.BeginSelection();                gridView.ClearSelection();                gridView.SelectRange(startRow, endRow);                gridView.EndSelection();            }        }         //实现鼠标拖动选择多行 ,鼠标按下事件        private void gridView_MouseDown(object sender, MouseEventArgs e)        {            if (e.Button == MouseButtons.Left)            {                isMouseDown = true;            }        }         //实现鼠标拖动选择多行 ,鼠标移动时        private void gridView_MouseMove(object sender, MouseEventArgs e)        {            if (isMouseDown)            {                GridHitInfo info = gridView.CalcHitInfo(e.X, e.Y);                 //如果鼠标落在单元格里                if (info.InRow)                {                    if (!isSetStartRow)                    {                        StartRowHandle = info.RowHandle;                        isSetStartRow = true;                    }                    else                    {                        //获得当前的单元格                        int newRowHandle = info.RowHandle;                        if (CurrentRowHandle != newRowHandle)                        {                            CurrentRowHandle = newRowHandle;                            //选定 区域 单元格                            SelectRows( StartRowHandle, CurrentRowHandle);                        }                    }                }            }        }         //实现鼠标拖动选择多行 ,鼠标放开时        private void gridView_MouseUp(object sender, MouseEventArgs e)        {            StartRowHandle = -1;            CurrentRowHandle = -1;            isMouseDown = false;            isSetStartRow = false;        }


作者:叉叉哥   转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/7938507 

原创粉丝点击