2015-02-07 62 views
1

我想要得到的所有單元格的背景色,並寫入到一個文本文件,所以輸出會是: 黃綠 橙色 鋼青等。獲得背景色中的dataGridView C#的所有細胞的

這是我已經試過:

void GetColors() 
    { 
     string path = Application.StartupPath + @"/test.txt"; 
     StreamWriter sw = new StreamWriter(path); 
     int n = 0; 
     DataGridViewColumn column = dataGridView1.Columns[n++]; 
     DataGridViewCell cell = new DataGridViewTextBoxCell(); 

     sw.WriteLine(cell.Style.BackColor); 
     column.CellTemplate = cell; 

     sw.Close(); 
    } 

我試圖cell.Style.BackColor.ToString();.ToArgb(); With ToString();我得到Color {Empty}在輸出和ToArgb我得到0

有人可以幫我嗎?在此先感謝...

+0

顯然,它只是沒有設置。你需要什麼? – 2015-02-07 18:33:33

+0

我想替換XML保存源而不是文本文件,因爲使用XML時遇到了很多問題。 – ChrisCreateBoss 2015-02-07 18:42:35

回答

1

當您製作新的 DataGridViewTextBoxCell對象時,您沒有引用現有單元格。

嘗試通過現有的細胞枚舉:

foreach (DataGridViewRow row in dataGridView1.Rows) { 
    foreach (DataGridViewCell cell in row.Cells) { 
    sw.WriteLine(cell.Style.BackColor.ToKnownColor().ToString()); 
    } 
} 

保存和讀取網格的配色方案,您可以將行和列的信息保存到您的字符串:

foreach (DataGridViewRow row in dataGridView1.Rows) { 
    foreach (DataGridViewCell cell in row.Cells) { 
    sw.WriteLine(string.Join(";", cell.RowIndex.ToString(), 
            cell.ColumnIndex.ToString(), 
            GetColorName(cell.Style.BackColor))); 
    } 
} 

的GetColorName功能來自How to get the name of color while having its RGB value in C#?

要使用文件中的顏色更新網格,您需要解析信息:

foreach (string s in File.ReadAllLines(@"yourfile")) { 
    string[] items = s.Split(';'); 
    if (items.Length == 3) { 
    dgv.Rows[Convert.ToInt32(items[0])] 
     .Cells[Convert.ToInt32(items[1])] 
     .Style.BackColor = Color.FromName(Convert.ToString(items[2])); 
    } 
} 

爲簡潔起見,省略了任何錯誤檢查。顯然,文件中的行數和列數必須與datagridview控件顯示的內容相匹配。

+0

仍在輸出中輸入'0',並且所有單元格都設置爲紅色 – ChrisCreateBoss 2015-02-07 18:41:07

+0

@ChrisCreateBoss您是如何設置網格單元格的背景色的?如果你用'.BackColor = Color.Red;'設置它們,那麼這個代碼就可以工作。 – LarsTech 2015-02-07 18:42:54

+0

我在設計器屬性的DefaultCellStyle選項中設置了backolors。對不起,現在我知道爲什麼它不工作。 – ChrisCreateBoss 2015-02-07 18:47:49