适当的方式为DataGridView行着色?

时间:2015-01-29 15:28:07

标签: c# datagridview

是否有基于行数据对行进行着色的最佳实践方法?我目前有这个:

        if (dt.Rows.Count > 0)
        {
            //Finally Add DataTable into DataGridView
            dataGridView1.DataSource = dt;
            dataGridView1.Columns["File_Name"].Width = 240;
            dataGridView1.Columns["Create_Date"].Width = 130;
            //dataGridView1.Sort(dataGridView1.Columns["Create_Date"], ListSortDirection.Descending);
            dataGridView1.Rows[0].Cells[0].Selected = false;
            for (int y = 0; y < unreadList.Count; y++)
            {
                if ( unreadList[y] == 1 )
                    dataGridView1.Rows[y].DefaultCellStyle.BackColor = Color.LightPink;
            }
        }

为了澄清,unreadList是一个数组,其中1表示该索引与该行索引上的某个字符串匹配。

但是当使用RowFilter等时,颜色会消失。有没有什么可以处理这个,包括列是否排序?我的索引方法在排序之后也不起作用。

1 个答案:

答案 0 :(得分:0)

您可以在CellFormatting / RowPostPaint事件中进行着色,以便在过滤/排序后保持着色。

private void gridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    for (int y = 0; y < unreadList.Count; y++)
    {
        if (unreadList[y] == 1)
            dataGridView1.Rows[y].DefaultCellStyle.BackColor = Color.LightPink;
    }
}

private void gridItems_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.CellStyle.BackColor != Color.LightPink) //This will color every other row green - as an example.
        e.CellStyle.BackColor = Color.LightGreen;
}