关于datagridview拖放行排序

来源:互联网 发布:mac invalid argument 编辑:程序博客网 时间:2024/03/29 09:11

今天鼓弄了一天 试了好几种方法 也出现好几种不同的效果 不过最后还是觉得这种更符合拖拽 呵呵

我也是网上搜罗了好久 自己又鼓弄了好久

所以贴出来 大家分享分享 呵呵 fighting

比较关键的三点

1) CellMouseDown选中要拖动的行 我这里是选中第一列可以实现拖放

                                                      因为其他列单元格的内容时可以修改的 感觉不太适合用来拖放

  private void dgv_Para_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.ColumnIndex == 0 && e.RowIndex >= 0)
            {
                indexofsource = e.RowIndex;//全局变量 记录拖放的初始位置
            }
        }

2 )CellMouseUp 如其名 Up当鼠标停止拖动时 触发事件

private void dgv_Para_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.ColumnIndex == 0 && e.RowIndex >= 0)
            {

                if (e.Clicks < 2)// 单击执行换行
                {
                    indexoftarget = e.RowIndex;//目标位置
                    dgv_Para.DoDragDrop(dgv_Para.Rows[indexoftarget], DragDropEffects.Move);
                    if (indexoftarget > -1 && indexofsource > -1)//点击别的地方以后给indexofsource定个值-1 免得总被记录 影响其它地方
                    {
                        DataGridViewRow r = (DataGridViewRow)dgv_Para.Rows[indexofsource]; // (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));
                        DataTable tmpdt = (DataTable)dgv_Para.DataSource;
                        DataRow r1 = tmpdt.NewRow();
                        for (int i = 0; i < tmpdt.Columns.Count; i++)
                        {
                            r1[i] = r.Cells[i].Value;
                        }
                        tmpdt.Rows.RemoveAt(r.Index);
                        tmpdt.Rows.InsertAt(r1, indexoftarget);
                        dgv_Para.CurrentCell = dgv_Para.Rows[indexoftarget].Cells[0];
                        indexofsource = indexoftarget;

                    }

                }

            }
            if (e.ColumnIndex != 0)
            {
                indexofsource = -1;
            }

        }

3)DragEnter 拖动

private void dgv_Para_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

 

原创粉丝点击