C#数据库工具开发(十二)

问题(07/30)

1. 如何实现同步两个DGV的滚动条

1
2
3
4
5
6
7
8
9
private void dataXML_Scroll(object sender, ScrollEventArgs e)       
{
this.dataDB.FirstDisplayedScrollingRowIndex = this.dataXML.FirstDisplayedScrollingRowIndex;
}

private void dataDB_Scroll(object sender, ScrollEventArgs e)
{
this.dataXML.FirstDisplayedScrollingRowIndex = this.dataDB.FirstDisplayedScrollingRowIndex;
}

2. 如何实现一次删除DGV中的多行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
foreach (DataGridViewRow row in dataXML.Rows)
{
if((row.Cells[0].Value==null||row.Cells[0].Value.ToString()=="")&&row.Index!=dataXML.Rows.Count-1)
{
row.Selected = true;
}
else
{
row.Selected = false;
}
}
foreach (DataGridViewRow row in dataXML.SelectedRows)
{
dataXML.Rows.Remove(row);
}

在if条件中写要删除的行应该满足的条件,设置行被选中(利用Selected这个property),再删除选中的行。

注意:不能用foreach每一行,加上判断,直接删除。因为每一次删除后,实际上Rows已经改变,循环不能遍历到所有满足条件的行。(先存行号,后删除的做法也一样,同理,每一次删除,行号已经改变)

3. 避免事件无意间调用

问题背景:我想要按下delete后,不删除这一行,只清空改行所有数据。想到的解决方法是在删除这一行后,在同一个index新建一行,但是总是出现各种问题。后来发现,因为我在dataXML_RowsAdded(行增加事件)中有完成其他功能,而实际上,我每次新建一行,都会触发这个事件,这就导致出现问题。

解决方法:设定一个bool标签deleting,在删除触发的方法中,设定deleting一开始为true,最后设回false,并在增加行触发的方法中,判断deleting的值,若为true则不执行任何操作。