温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

DataGridView 行拖动

发布时间:2020-07-18 08:32:32 来源:网络 阅读:1362 作者:起名好难 栏目:编程语言

DataGridView拖动的前提:


this.dgv.AllowDrop = true;
this.dgv.MultiSelect = false;
this.dgv.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;


拖动需要几个事件支持:

DragDrop:拖动事件

DragEnter:控制拖动范围,影响鼠标状态

CellMouseMove:鼠标移动触发拖动事件,个人觉着可以用其他事件替

private void dgv_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
{
    if ((e.Clicks < 2) && (e.Button == MouseButtons.Left))
    {
        if (e.RowIndex > -1) //此处可以添加其他限制条件,例如只有在那一列时才允许拖动等
            dgv.DoDragDrop(dgv.Rows[e.RowIndex], DragDropEffects.Move);
    }
}
private void dgv_DragDrop(object sender, DragEventArgs e)
{
     
    int idx = GetRowFromPoint(e.X, e.Y);
    if (idx < 0 || idx == dgv.Rows.Count-1/*这个判断是在允许用户添加行时,排除拖动到最后的空白行处的*/) return;
    if (e.Data.GetDataPresent(typeof(DataGridViewRow)))
    {
        DataGridViewRow row = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));
        dgv.Rows.Remove(row);
        dgvr.Rows.Insert(idx, row);
        dgv.CurrentCell = dgvBreakLayer[0, idx];
     }
}
private int GetRowFromPoint(int x, int y)
{
    for (int i = 0; i < dgv.RowCount; i++)
    {
        Rectangle rec = dgv.GetRowDisplayRectangle(i, false);
        if (dgv.RectangleToScreen(rec).Contains(x, y))
        {
            return i;
        }
    }
    return -1;
}
private void dgv_DragEnter(object sender, DragEventArgs e)
{
    e.Effect = DragDropEffects.Move;
}


后期要是发现更好的方法会持续改进,欢迎大家提出宝贵意见!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI