即使数据网格刷新

时间:2016-11-22 01:19:55

标签: c# sql winforms

我在下面有这个代码,点击后它会将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函数,它也会进入第二行。

2 个答案:

答案 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];