C# datagridview 删除一行后自动定位到下一行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# datagridview 删除一行后自动定位到下一行相关的知识,希望对你有一定的参考价值。

在一个dataGridView里显示出数据表,如果点击了条数据,就会在几个文本框里分别显示出几个数据表的数据dataGridView1_CellClick,最后,会把此条信息的内容通过“删除”按钮事件删除了。
现在,我想实现的功能是:因为要通过点击dataGridView里的数据才会在文本框显示出新的信息,那么有没有可能实现,当删除一条信息后,下一条信息,会自动在文本框里显示呢?那么我就可以连续的删除几条信息了!不用通过反复点击信息。
我需要劲可能详细的说明!谢谢帮忙.

设置一个标识(int indexid),是为了指定你要显示的那一行
在删除行的时候设置indexid为删除的当前行的index:
indexid = dataGridView1.CurrentRow.Index;

在更新数据的时候可以如下设置,这些设置是为了防止指定的当前行出错
if (indexid < 0)
indexid = 0;
if (indexid > dataGridView1.Rows.Count - 1)
indexid = indexid - 1;
下面这句是指定datagridview的当前行
dataGridView1.CurrentCell = dataGridView1.Rows[indexid].Cells[0];
下面是datagridview的一个方法selectionchanged,当列表选中的行发生变化时调用这个函数
dataGridView1_SelectionChanged(sender, e);

具体示例如下:
int indexid=0;

///删除的函数
private void btnDel_Click(object sender, EventArgs e)

DataGridViewCell cell = dataGridView1.CurrentRow.Cells[0]; //要被删除的当前行
indexid = dataGridView1.CurrentRow.Index;//得到被删除那行的索引
DataUpdate(sender, e); //具体函数如下


///DataUpdate函数
private void DataUpdate(object sender, EventArgs e)

///////////////这个地方可以是数据的更新///////////////
if (indexid < 0)
indexid = indexid + 1;
if (indexid > dataGridView1.Rows.Count - 1)
indexid = indexid - 1;
dataGridView1.CurrentCell = dataGridView1.Rows[indexid].Cells[0];//这里注意Cells中的索引必须是可见的列
dataGridView1_SelectionChanged(sender, e);


///dataGridView1_SelectionChanged函数,这个函数是datagridveiw控件自带的方法
private void dataGridView1_SelectionChanged(object sender, EventArgs e)

if (dataGridView1.CurrentRow== null)
return;
/////////////这里是每一行的某一列对应着你的控件的显示///////////
如:textbox1.Text=dataGridView1.CurrentRow.Cell[0].Value.ToString();
参考技术A 我跟你说一下思路呀,
不管是你点击的一行还是,默认选中了一行。只要有选中的一行,就有个datagridview的当前行的索引属性。相信你在显示文本框中也是用的这个属性吧。
当你点删除的时候,你判断一下datagridview.rows.count-1是否大于当前行的索引,如果是,那就设置datagridview.rows[curIndexID+1]的行为选中状态,同时绑定每个文本框。
下面是伪代码:(写在删除按钮事件)
if datagridview.rows.count-1>当前选中行的ID

设置datagridview.rows[当前选中行的ID+1]为选中状态
绑定各个文本框
参考技术B dataGridView带有删除Rows的属性 参考技术C datagridview有一个currecell还是currrow这样的属性,记的不太清楚,就是设置选中哪个单元格或哪一行,你可以在删除事件的最后设置这个属性到你需要的位置

gridView 删除一行后自动定位到指定行

/// <summary>
/// 删除后定位到某一行
/// </summary>
/// <param name="aCode"></param>
/// <returns></returns>
public int LocateRow(string aCode)
{
var list = bindingSource1.DataSource as List<GetNewDateDTO>;
var index = list.IndexOf(list.FirstOrDefault(a => a.Code == aCode));
gridView1.FocusedRowHandle = gridView1.GetRowHandle(index);
gridView1.MakeRowVisible(gridView1.FocusedRowHandle);
return 0;
}

 

引用该方法即可

以上是关于C# datagridview 删除一行后自动定位到下一行的主要内容,如果未能解决你的问题,请参考以下文章

c# 在datagridview 中 用鼠标选中一行删除并保存到数据库怎么实现?

c# datagridview 删除行

如何实现c# winform DataGridView添加一行,添加数据后,保存到数据库?

c# winform DataGridView添加一行,添加数据后,保存到数据库

从datagridview C#中删除数据库中的一行

C# winform datagridview中如何实现鼠标右键点击一行数据出现一个带有删除的菜单,并能执行删除操作?