2016-06-08 855 views
1

我有一個綁定到SQL數據庫表的WinForm中的dataGridView。我想每兩秒鐘刷新一次數據,但保持用戶所做的任何行選擇。因此我設置了一個計時器並在tick事件中實現了一些代碼。該代碼工作正常,以刷新數據,但我努力讓行選擇持久。發生什麼事情是,當計時器再次滴答時,dataGridView中的所有行都會被選中,並且之後的所有記錄都會被選中。我不知道是什麼導致這種情況,因爲我的代碼選擇行是在一個foreach循環中,並且if語句應該阻止這種情況發生。這裏是我的代碼這個功能:C#在dataGridView刷新後保留行選擇

private void dataRefreshTimer_Tick(object sender, EventArgs e) 
    { 
     string selRows = null; 
     foreach (DataGridViewRow row in taskDataGrid.Rows) 
     { 
      if (row.Selected = true) 
      { 
       selRows += row.Cells[0].Value.ToString() + ","; 
       Console.WriteLine(selRows); 
      } 
     } 
     currenttasksTableAdapter.Fill(taskManagerDataSet.currenttasks); 
     currenttasksBindingSource.ResetBindings(false); 
     try 
     { 
      if (selRows != null) 
      { 
       foreach (DataGridViewRow row in taskDataGrid.Rows) 
       { 
        if (selRows.Contains(row.Cells[0].Value.ToString() + ",")) 
        { 
         row.Selected = true; 
        } 
       } 
      } 
     } catch (Exception ex) { Console.WriteLine(ex); } 

任何人都可以告訴我我缺少的是導致所有行被選中?感謝您的任何建議!

+0

什麼是細胞[0]的值,多少?首要的關鍵? –

+0

這是一個隱藏的列,其中包含來自表格的Pkey,因此每個條目都是唯一的。這是一個數字,因爲該字段在數據庫上進行索引。 –

+0

不要在'if'條件中使用'Contains'並用確切的值檢查它可能會解決您的問題 –

回答

1

任何人都可以告訴我我缺少的是導致所有行被選中?

if (row.Selected = true) 

在這裏,你實際上是在選擇每行(=是賦值運算符)。這確實應該

if (row.Selected) 

if (row.Selected == true) 
+0

謝謝,我總是忽略最簡單的事情。使用if(row.selected){}像魅力一樣工作。現在我只需要在刷新後停止選擇默認的第一行。感謝這個答案的幫助! –