Can't change datagridview cell color when using a datasource

前端 未结 2 1230
南旧
南旧 2021-01-05 02:35

I\'ve got an interesting issue. I am trying to use a datatable as a data source for a datagridview. I want to color some of the cells of the table to indicate various things

相关标签:
2条回答
  • 2021-01-05 03:09

    This Is something I have implemented recently, I dont know if it will help??

    private void dgvOutstandingReports_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
                {
                    int colIndex = e.ColumnIndex;
                    int rowIndex = e.RowIndex;
    
    
                    if (rowIndex >= 0 && colIndex >= 0)
                    {
                        DataGridViewRow theRow = dgvOutstandingReports.Rows[rowIndex];
    
    
                        if (theRow.Cells[colIndex].Value.ToString() == "Daily Report")
                        {
                            theRow.DefaultCellStyle.BackColor = Color.LightYellow;
                        }
                        else if (theRow.Cells[colIndex].Value.ToString() == "Monthly Report")
                        {
                            theRow.DefaultCellStyle.BackColor = Color.LightGray;
                        }
                        else if (theRow.Cells[colIndex].Value.ToString() == "SMP Report")
                        {
                            theRow.DefaultCellStyle.BackColor = Color.Snow;
                        }
                        else if (theRow.Cells[colIndex].Value.ToString() == "Weekly Report")
                        {
                            theRow.DefaultCellStyle.BackColor = Color.Pink;
                        }
                        else if (theRow.Cells[colIndex].Value.ToString() == "Hourly Report")
                        {
                            theRow.DefaultCellStyle.BackColor = Color.LightSteelBlue;
                        }
                    }
                }
    
    0 讨论(0)
  • 2021-01-05 03:20

    If you try and set the cell colour within the constructor of the form you will be hitting before the data binding is completed so the changes to the cells don't stick (don't ask me why, just one of those gotchas with the DataGridView.

    The most straightforward fix to this is to set the colours a little later - usually within a DataBindingComplete event handler:

    void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        dataGridView1.Rows[0].Cells[0].Style.BackColor = Color.Yellow;
    }
    

    This is appropriate for static colouring of the grid - if you want the colours to change according to the changes within the grid then use the CellFormatting event to change the cells.

    0 讨论(0)
提交回复
热议问题