我在下面有这个代码,点击后它会将Progress列的默认值从0更改为1.我遇到的问题是,在点击数据网格时也会刷新。我希望它能够刷新,但我希望保持原状并移动到它下面的下一行。刷新后,光标会按预期返回到开头。是的,我知道这很明显是因为我在最后调用了refreshDataGrid函数,所以它总会这样做。
private void button4_Click(object sender, EventArgs e)
{
string connectionString2 = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
string query2 = "UPDATE dbo.[" + comboBox4.Text + "] SET Progress= '1' where code = '" + comboBox2.Text + "'; ";
using (SqlConnection connection = new SqlConnection(connectionString2))
{
SqlCommand command = new SqlCommand(query2, connection);
command.Connection.Open();
command.ExecuteNonQuery();
command.Connection.Close();
}
textBox1.Clear();
textBox3.Clear();
comboBox3.ResetText();
comboBox2.SelectedIndex = comboBox2.SelectedIndex + 1;
if (dataGridView3.CurrentRow != null)
dataGridView3.CurrentCell =
dataGridView3.Rows[Math.Min(dataGridView3.CurrentRow.Index + 1, dataGridView3.Rows.Count - 1)]
.Cells[dataGridView3.CurrentCell.ColumnIndex];
refreshDataGrid();}
我希望这个特殊的代码块可以解决问题:
if (dataGridView3.CurrentRow != null)
dataGridView3.CurrentCell =
dataGridView3.Rows[Math.Min(dataGridView3.CurrentRow.Index + 1, dataGridView3.Rows.Count - 1)]
.Cells[dataGridView3.CurrentCell.ColumnIndex];
我想要做的是捕获突出显示的行索引的当前位置,无论我是否调用了refreshDataGrid函数,它仍然会按顺序移动,而不是每次都从头开始。 有没有办法实现这个目标?为了再次解释,我想保留当前突出显示的行索引,并让它移动到后面的那个,而不必担心重新开始刷新。例如。如果我从第1行开始,那么即使我调用了refreshDataGrid函数,它也会进入第二行。
答案 0 :(得分:0)
您应该在刷新网格之前保存当前单元格选择,然后在刷新网格完成后重置它。根据刷新的工作方式,如果订单或计数可能发生变化,您可以保存行和列位置或保存一些键值以再次查找行。
if (dataGridView3.CurrentRow != null)
SaveCurrentCellLocation();
refreshDataGrid();
ResetCurrentCellLocation();
答案 1 :(得分:0)
修正了问题。 将当前行索引存储到变量中,然后递增该值:
var i = dataGridView3.CurrentRow.Index;
refreshDataGrid();
dataGridView3.CurrentCell = dataGridView3.Rows[Math.Min(i + 1, dataGridView3.Rows.Count - 1)].Cells[0];