• 实现DataGridView行的拖动,即实现行的顺序交换


    1.界面准备
    (1)首先在form中添加一个DataGridView控件,将默认AllowDrop=false 的属性设置为True,否侧不能拖动!
    (2)对DataGridView的对象实现非数据源的绑定,因为设置DataSource属性即当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行。
     
     
    2.代码准备
    (1)控制移动时鼠标的图形,否则是一个禁止移动的标识
            private void dataGridView1_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.Move;
            }
     
    (2)控制拖动的条件,也可以自行放宽条件
            private void  dataGridView1 _CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
            {
                if ((e.Clicks < 2) && (e.Button == MouseButtons.Left))
                {
                    if ((e.ColumnIndex == -1) && (e.RowIndex > -1))
                        dataGridView1.DoDragDrop(dataGridView1.Rows[e.RowIndex], DragDropEffects.Move);
                }
            }
     
    (3)拖动后实现行的删除和添加,实现行交换位置的错觉
            int selectionIdx = 0;
            private void  dataGridView1_DragDrop(object sender, DragEventArgs e)
            {
                int idx = GetRowFromPoint(e.X, e.Y);
     
                if (idx < 0) return;
     
                if (e.Data.GetDataPresent(typeof(DataGridViewRow)))
                {
                    DataGridViewRow row = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));
                    dataGridView1.Rows.Remove(row);
                    selectionIdx = idx;
                    dataGridView1.Rows.Insert(idx, row);
                }
            }
     
            private int GetRowFromPoint(int x, int y)
            {
                for (int i = 0; i < dataGridView1.RowCount; i++)
                {
                    Rectangle rec = dataGridView1.GetRowDisplayRectangle(i, false);
     
                    if (dataGridView1.RectangleToScreen(rec).Contains(x, y))
                        return i;
                }
     
                return -1;
            }
     
    (4)控制被移动的行始终是选中行
            private void kryptonDataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
            {
                if (selectionIdx > -1)
                {
                    dataGridView1.Rows[selectionIdx].Selected = true;
                    dataGridView1.CurrentCell = dataGridView1.Rows[selectionIdx].Cells[0];
                }
            }
  • 相关阅读:
    RAID技术
    Mysql的用户基本操作
    LNMP之Php的安装配置
    java 实现图片拼接
    java 实现Serv-U FTP 和 SFTP 上传 下载
    Image合并添加文字内容
    AOP切面用于系统日志
    网页评论实现
    java web 实体类生成
    java接口调试思想
  • 原文地址:https://www.cnblogs.com/simadi/p/3739350.html
Copyright © 2020-2023  润新知