2015-02-10 30 views
0

我的表單在選項卡的不同選項卡上有6個dataGridView控件,用戶可以輸入值並更改單元格背景,使用保存按鈕可將每個dataGridView的值保存到一個文本文件,與每個dataGridView中的單元格的背景顏色相同。當用戶重新打開表單時,所有最後的設置(樣式和值)再次加載到6個dataGridView;問題是當用戶重新打開表單時,dataGridViews會凍結,我找不到解決該問題的方法。有人能幫我嗎?DataGridView在加載內容和樣式時會凍結C#

我的加載數據和作風碼:

foreach (string s in File.ReadAllLines(stylePath)) 
     { 
      string[] items = s.Split(';'); 
      if (items.Length == 3) 
      { 
       dataGridView1.Rows[Convert.ToInt32(items[0])] 
        .Cells[Convert.ToInt32(items[1])] 
        .Style.BackColor = Color.FromName(Convert.ToString(items[2])); 
      } 
     } 
StreamReader sr = new StreamReader(valuePath); 
     foreach (DataGridViewRow row in dataGridView1.Rows) 
     { 
      foreach (DataGridViewCell cell in row.Cells) 
      { 
       cell.Value = sr.ReadLine(); 
      } 
     } 
     sr.Close(); 

下面是它的外觀時,重新打開表單: enter image description here

+0

克里斯:我們需要看到一些代碼,以瞭解它凍結在哪裏 – chouaib 2015-02-10 02:25:56

+0

請編輯/添加你重新打開的部分,從文件中讀取,更新gridViews – chouaib 2015-02-10 02:26:34

+0

@choua ib我注意到更多,如果我不運行LoadStyle void,那麼dataGridView不會凍結。 – ChrisCreateBoss 2015-02-11 00:04:30

回答

1

嘗試:

using(StreamReader sr = new StreamReader(stylePath)) 
{ 
    string line; 
    string[] items; 
    int row, cell; 
    Color color; 

    while(!sr.EndOfStream) 
    { 
     line = sr.ReadLine(); 
     items = line.Split(';'); 
     if(items.Length<3) continue; //something wrong in the file 

     row = Convert.ToInt32(items[0]); 
     cell = Convert.ToInt32(items[1]); 

     if(String.IsNullOrEmpty(item[2])) continue; // No change is needed 
     color = Color.FromName(items[2]); 

     dataGridView1.Rows[row].Cells[cell].Style.BackColor = color; 
    } 
} 
+0

代碼工作,顏色出現,但其他細胞仍然看起來像透明(我可以看穿它們)PS:與其他細胞一樣,我指的是沒有變化的細胞。 – ChrisCreateBoss 2015-02-10 22:26:11

+0

@ChrisCreateBoss:我猜他們沒有變化,因爲他們沒有設置!即使你使用文本編輯器閱讀'stylePath'文件,我確信它們沒有設置。對? – chouaib 2015-02-11 00:44:59

+0

你用「設置」 – ChrisCreateBoss 2015-02-11 00:49:46