我正在处理一个绑定到Datatable的相当大的数据网格。我的目标是根据单元格中的数据为单元格分组上色。
我希望数据网格为包含值的所有单元格着色,然后在检测到新值时切换颜色,并在整个表中重复此操作。
下面是我在表格中使用的一个例子:
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;
}
}
}
我不知道从哪里开始,我已经尝试过遍历行并检查值,但这最终会杀死性能和速度,并没有给我我正在寻找的结果。如有任何建议,不胜感激。
如果我正确理解您的情况,您可以通过处理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;
}
}
显然,您唯一的选择是遍历可数据行,因为您的数据库中没有此颜色标志。
我建议你在现有的数据表中添加一个新的dataccolumn,遍历它并设置它的颜色。
然后,你可以在" cellformatting "事件中给单元格上色。在这种情况下,您可以读取color列的值并使用它。
这里有一个完整而简单的细胞形成事件的例子:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting.aspx
对