2016-11-22 38 views
0

我有下面这段代码,点击它将进度列的默认值从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

使用的UpdatePanel – mjb

回答

0

修复了这个问题。 存储当前行的索引到一个变量,然后增加该值:

   var i = dataGridView3.CurrentRow.Index; 
       refreshDataGrid(); 
       dataGridView3.CurrentCell = dataGridView3.Rows[Math.Min(i + 1, dataGridView3.Rows.Count - 1)].Cells[0]; 
0

您应该在刷新网格之前保存当前的单元格选择,然后在刷新网格完成后重置它。根据刷新的工作方式,如果顺序或计数可能发生变化,您可以保存行和列位置,或保存一些关键值以再次查找行。

 if (dataGridView3.CurrentRow != null) 
      SaveCurrentCellLocation(); 

     refreshDataGrid(); 

     ResetCurrentCellLocation(); 
+0

试过了,没有改善 – Jevon

+0

跳至下一行,但之后 – Jevon

+0

设置单元选择冻结不应该冻结UI,可能更去这里。是refreshDataGrid()同步还是异步? – cdkMoose