DataTable 和 DataGridView 对象的问题

Posted

技术标签:

【中文标题】DataTable 和 DataGridView 对象的问题【英文标题】:Problem with the DataTable and DataGridView objects 【发布时间】:2010-09-11 19:46:29 【问题描述】:

我有以下问题

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

非常感谢...

【问题讨论】:

您指的是什么语言? C#?如果是 C#/.Net,请同时添加这些标签。它将帮助您更快地获得答案。 【参考方案1】:

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

例如`

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;

等等`

【讨论】:

Karol 的解决方案可以工作,但如果数据集很大,可能会很慢。此外,您还需要确保它在每次数据更改时运行。我的方法的优点是它是自动且高效的,因为它只需要处理屏幕上实际可见的数据。【参考方案2】:

我做过这样的事情:

 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设计模式的假设吗?

【讨论】:

【参考方案3】:

我建议将逻辑放在 datagridview 的单元格格式化事件中。 如果您的数据根据​​网格中的某些计算动态变化,这些也将反映变化 像

void myDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)

            if (e.Value.ToString() == "A" )
                e.CellStyle.BackColor = Color.Red;

【讨论】:

以上是关于DataTable 和 DataGridView 对象的问题的主要内容,如果未能解决你的问题,请参考以下文章

DataTable 和 DataGridView 对象的问题

怎么让datagridview不自动修改绑定的datatable

C# 将 DataTable 绑定到现有 DataGridView 列定义

如何将DataGridView转换为DataTable?

使用 OracleDataAccess.Fill(datatable) 更新 DataGridView 需要很长时间

使用 DataTable 中的 ComboBoxColumn 创建 DataGridView