`
ydbc
  • 浏览: 715804 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics