获取dataGridView C#中所有单元格的BackColor

时间:2015-02-07 18:26:22

标签: c# winforms datagridview streamwriter

我想获取所有单元格的BackColor并将它们写入文本文件,因此输出将为: 的黄绿 SteelBlue 等。

这是我尝试过的:

 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(); 使用ToString();我在输出中得到Color {Empty},在ToArgb中得到0

是的,有人能帮帮我吗?在此先感谢...

1 个答案:

答案 0 :(得分:1)

制作 new 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控件显示的数量相匹配。