0

我正在使用绑定到数据表的相当大的数据网格。我的目标是根据单元格中的数据为单元格组着色。

我希望数据网格为包含值的所有单元格着色,然后在检测到新值时切换颜色并在整个表中重复此操作。

这是我在表格中使用的示例:

    Contract ID:
    123456 //Top of the contract, color all cells in the contract blue
    123456 //blue
    123456 //blue
    123456 //blue
    456789 //New contract, color all these cells green
    456789 //green 
    456789 //green
    987654 //Another new contract color all these blue (or another color) again
    etc... 

我尝试了类似下面的方法,但无济于事......

for (int i = 0; i < myDataGridView.Rows.Count; i++)
    {
         if (i > 0)
         {
             if (myDataGridView.Rows[i].Cells["contract_id"].Value != myDatagridView.Rows[i-1].Cells["contract_id"].Value)
             {
             myDataGridView.CurrentRow.Cells["contract_id"].BackColor = Color.Blue;
             }
         }
    }

我不知道从哪里开始,我尝试循环遍历行并检查值,但这最终会降低性能和速度,并且不会给我我正在寻找的结果。任何建议将不胜感激。

4

2 回答 2

1

DataGridView.CellValueChanged如果我正确理解您的情况,您可以通过处理事件来实现您正在寻找的东西。这可以防止您必须遍历所有行。理论上,这应该在您填充 DGV 控件时起作用。

这是我正在谈论的一个非常粗略的例子。您可能需要使用它以使其适用于您的特定情况。就我而言,它会在Style.Backcolor提交更改的值时调整单元格的 。由于输入数据时可能只有一行,因此我也设置了一个条件来处理这种情况。

如果这是 Winforms DGV 控件,则需要在代码中使用Cell.Style.BackColor属性,而不是Cell.BackColor属性(在 Winforms DGV 上不存在)。

您将不得不改进代码以适应您的情况。. .

    private void Form1_Load(object sender, EventArgs e)
    {
        // Add a handler for the cell value changed event:
        this.myDataGridView.CellValueChanged += new DataGridViewCellEventHandler(myDataGridView_CellValueChanged);
    }

    void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        // grab a reference to the changed cell:
        DataGridViewCell cell = myDataGridView.Rows[e.RowIndex].Cells["contract_id"];

        // Guard against the case where this is the first row in the DGV table:
        if (cell.RowIndex - 1 >= 0)
        {
            if (cell.Value != myDataGridView.Rows[cell.RowIndex - 1].Cells["contract_id"].Value)
            {
                // CHange the Style.BackColor property for the cell:
                myDataGridView.CurrentRow.Cells["contract_id"].Style.BackColor = Color.Blue;
            }
        }
于 2012-12-31T17:31:19.583 回答
0

毫无疑问,您唯一的选择是遍历数据表行,因为您的数据库中没有此颜色标志。

我建议您在现有数据表中添加一个新数据列,遍历它并在其中设置颜色。

然后,您可以在“CellFormating”事件中为单元格着色。在这种情况下,您可以读取颜色列的值并使用它。

这里有一个完整而简单的单元格格式化事件示例:http: //msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting.aspx

问候

于 2012-12-31T16:08:44.923 回答