DataTable和DataGridView对象的问题

时间:2010-09-11 19:46:29

标签: c# .net datagridview datatable

我有以下问题

在我的应用程序中,我做了一些计算,然后将它们放入DataTable对象(6列,最新的数据是最重要的)。要查看结果,我将它们放入DataGridView对象,这是我的问题。根据最后一列中包含的数据,我想在适当的颜色上标记单元格。我不知道我是否应该在DataGridView对象上执行此操作,因为这是用户界面?我能在哪里做到这一点? DataTable对象没有样式属性?

非常感谢...

3 个答案:

答案 0 :(得分:0)

您可以使用DataGridView的CellPainting事件根据其内容格式化单元格。

e.g。 `

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
        {

            switch (dataGridView1.Columns[e.ColumnIndex].DataPropertyName)
            {
                case "Description":
                    {
                        break;
                    }
                case "NormalRoom":
                    {
                        break;
                    }
                case "Colour1":
                case "Colour2":
                    {
                        Color co = Color.White;
                        if (e.Value != null && e.Value != DBNull.Value)
                        {
                            co = string2Color((string)e.Value);
                        }
                        e.CellStyle.BackColor = Color.White;
                        e.CellStyle.ForeColor = Color.Black;

etc.`

答案 1 :(得分:0)

我做过这样的事情:

 public void setABCColor(DataGridView DGV)
    {
        for (int i = 0; i < DGV.Rows.Count; i++)
        {
            if ((string)DGV.Rows[i].Cells[6].Value == "A")
            {
                DGV.Rows[i].Cells[6].Style.BackColor = Color.Green;
            }
            else if ((string)DGV.Rows[i].Cells[6].Value == "B")
            {
                DGV.Rows[i].Cells[6].Style.BackColor = Color.Blue;
            }
            else
            {
                DGV.Rows[i].Cells[6].Style.BackColor = Color.Red;
            }
        }
    }

这可以接受吗?这不是改变了MVC设计模式的假设吗?

答案 2 :(得分:0)

我建议将逻辑放在datagridview的Cell Formatting事件中。 如果数据根据网格中的某些计算动态变化,这些也会反映出更改

之类的东西
void myDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
            if (e.Value.ToString() == "A" )
                e.CellStyle.BackColor = Color.Red;
}