以编程方式更改datagridview中的颜色单元格

时间:2014-12-31 16:46:43

标签: c# datagridview

我试着改变DataGridView中的细胞颜色。

我对datagridview有点新意见,并且已经查看过这里发布的许多问题,但似乎没有一个对我有用。

请不要标记为副本。

我的最后一次迭代(仍然不起作用)是:

DataGridView1.AutoGenerateColumns = true;
        DataGridView1.AutoSize = true;
        DataGridView1.DataSource = DT;
        int rowIndex = 0;
        int cellIndex = 0;
        Color c = Color.Gray;
        foreach(var row in  DataGridView1.Rows.Cast<DataGridViewRow>().ToList())//.ForEach(row =>
        {
            var cells = row.Cells;
            if (cells.Count > 0) {
                cellIndex = 0;
                foreach (DataGridViewCell cell in cells)
                {
                    DataGridView1.Rows[rowIndex].Cells[cellIndex].Style.BackColor = c;
                    //cell.Style.BackColor = c;
                    cellIndex++;

                }
                if (cells[0].Value!= null)
                if ((cells[0].Value as string ).Contains("==="))/*end of section*/
                {
                    c = (c == Color.Gray) ? Color.Transparent : Color.Gray;/*change color at end of section*/
                }
            }
            rowIndex++;
        }
        rowIndex = 0;

我的代码有什么问题? 是否需要在True \ False上设置任何参数才能使颜色发生变化?

修改 我做了什么:我想打开只有DataGridView所有数据的新表单,所有其他用途都是上下文菜单(MouseButtons.Right

更多代码

public partial class ResultsDiffForm : Form 
{
    public ResultsDiffForm(DataTable DT)//consatructor
    {
        InitializeComponent();
        /*Old code goes here ... */
    }
}

应该更清楚我在做什么

4 个答案:

答案 0 :(得分:1)

您没有发布调用此代码的位置,但是当您尝试在窗体的构造函数中设置单元格属性时,WinForms中的DataGridView控件很有用。

请尝试使用OnLoad覆盖:

protected override void OnLoad(EventArgs e) {
  base.OnLoad(e);

  // your DataGridView code here...
}

答案 1 :(得分:0)

像这样:

DataGridview1.Columns[index].DefaultCellStyle.BackColor = Color.Gray;

答案 2 :(得分:0)

你可以这样尝试

                if (cells[0].Value!= null)
                if ((cells[0].Value as string ).Contains("==="))/*end of section*/
                {
                    if(c == Color.Gray)
                    {
                      c = Color.Transparent;                              
                    }
                    else
                    {                 
                       c = Color.Gray;
                    }
                }

答案 3 :(得分:0)

int rowIndex = 0;
        int cellIndex = 0;
        Color c = Color.Gray;
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            var cells = row.Cells;
            if (cells.Count > 0)
            {
                cellIndex = 0;
                foreach (DataGridViewCell cell in cells)
                {
                    dataGridView1.Rows[rowIndex].Cells[cellIndex].Style.BackColor = c;

                    cellIndex++;

                }
                if (cells[0].Value != null)
                    if ((cells[0].Value as string).Contains("==="))
                    {
                        c = ((c == Color.Gray) ? Color.Transparent : Color.Gray);
                    }
            }
            rowIndex++;
        }
        rowIndex = 0;