65.9K
CodeProject 正在变化。 阅读更多。
Home

在 DataGridView 控件中拖放行

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (3投票s)

2014年8月26日

CPOL

2分钟阅读

viewsIcon

69900

拖放并重新排序 DataGridView 控件中的行。

引言

大家好:

我发布一篇很好的文章,供想要使用拖放功能重新排序网格行序的用户参考。我为我的一个项目设计了这个模块,客户要求更改网格中记录的显示顺序,并按照相同的顺序将其插入数据库。

背景

在阅读本文之前,您需要了解 DataGridView 的基本属性和方法。

类似于

  • 如何删除任何一行
  • 如何跟踪选定的行
  • 如何插入行
  • 如何获取任何一行的行索引。

即使您不了解以上任何内容,也没关系。

我会简要地介绍所有这些内容。

使用代码

首先,我们将通过静态数据或从数据库中获取数据来设计我们的网格。

在这里,我将定义静态数据。

首先,我们定义将在多个方法中使用的变量的全局声明

int rowIndexFromMouseDown ;
DataGridViewRow rw;

将在页面加载事件上定义数据。

dataGridView1.Columns.Add("name", "Name");
            dataGridView1.Rows.Add(5);
            dataGridView1.Rows[0].Cells[0].Value = "mayank";
            dataGridView1.Rows[1].Cells[0].Value = "rehan";
            dataGridView1.Rows[2].Cells[0].Value = "sandeep";
            dataGridView1.Rows[3].Cells[0].Value = "vijay";
            dataGridView1.Rows[4].Cells[0].Value = "aryan";
            dataGridView1.SelectedRows[0].Selected = false;

在上面的代码中,我们首先创建一个列,然后通过调用行的 Add 方法添加 5 行,然后我们在连续的五行中添加五个名称。

现在,我们选择要重新排序的行。

为此,我们将调用单击并选择该行。

 private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 1)
            {
                if (e.Button == MouseButtons.Left)
                {                    
                    rw = dataGridView1.SelectedRows[0];
                    rowIndexFromMouseDown = dataGridView1.SelectedRows[0].Index;
                    dataGridView1.DoDragDrop(rw, DragDropEffects.Move);                   
                }
            }
        }

在上面的代码中,我们首先检查是否选择了行。

如果选择了行,并且用户单击鼠标左键,则跟踪该行并存储行索引,并将该行添加到拖放操作中以进行移动。

现在,我们已经选择了该行。

在网格中拖动鼠标,为此我们启用拖放的移动效果。

  private void dataGridView1_DragEnter(object sender, DragEventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                e.Effect = DragDropEffects.Move;
            }
        }

通过此操作,我们现在已经跟踪了该行,并将移动该行并将其记录为跟踪。

现在,最后一步是放下我们要重新排序的行。

private void dataGridView1_DragDrop(object sender, DragEventArgs e)
        {
            
            int rowIndexOfItemUnderMouseToDrop;
            Point clientPoint = dataGridView1.PointToClient(new Point(e.X, e.Y));
            rowIndexOfItemUnderMouseToDrop = dataGridView1.HitTest(clientPoint.X, clientPoint.Y).RowIndex;
          
            if (e.Effect == DragDropEffects.Move)
            {
                dataGridView1.Rows.RemoveAt(rowIndexFromMouseDown);
                dataGridView1.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rw);
            }
        }

在上面的代码中,

我们最终成功放下,删除了前一行,并通过跟踪新行的位置将该行添加到该位置。

关注点

通过此操作,您可以让用户根据优先级调整行,以便更好地查看,并管理他们自己的基础。

© . All rights reserved.