在 DataGridView 控件中拖放行






4.50/5 (3投票s)
拖放并重新排序 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);
}
}
在上面的代码中,
我们最终成功放下,删除了前一行,并通过跟踪新行的位置将该行添加到该位置。
关注点
通过此操作,您可以让用户根据优先级调整行,以便更好地查看,并管理他们自己的基础。