在加载时格式化DataGridView时出现问题

时间:2011-07-20 09:00:58

标签: datagridview

我正在尝试使用样式颜色等格式化DataGridView。 DGV在窗体启动时加载(通过buildGrid方法),正如您在构造函数的代码中看到的那样:

    public Report1(DataSet dsReport1, string sDateRep)
    {
        InitializeComponent();
        sDate = sDateRep;
        dsReportGrid = dsReport1;
        orgDataset();
        buildGrid();
    }

以下是DGV的代码:

    private void buildGrid()
    {
     try
        {
            dataGridView1.DataSource = dsReportGrid.Tables[0];
            Controls.Add(dataGridView1);
            dataGridView1.Visible = true;
            dataGridView1.Rows[2].Cells[1].Style.ForeColor = Color.Red;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

它加载DGV很好,问题是它不会像我希望的那样为单元格着色,它只是让它变黑。

有趣的是,当我通过构造函数之外的任何其他方法调用buildGrid时,它会为它着色!例如:

    private void Form1_Resize(object sender, EventArgs e)
    {

        buildGrid();
    }

为什么会这样?如何让它从一开始就为细胞着色?

谢谢!

1 个答案:

答案 0 :(得分:5)

问题是数据绑定尚未在你的构造内部完成,所以对网格的任何更改都被删除了(我实际上并不是100%确定为什么它们被删除,因为行和单元格在那里,但这是它的工作方式)。

放置这种格式的正确位置是在DataBindingComplete事件处理程序中 - 在数据绑定完成之后但在绘制网格之前引发该事件。

public Report1(DataSet dsReport1, string sDateRep)
{
    InitializeComponent();
    sDate = sDateRep;
    dsReportGrid = dsReport1;
    orgDataset();

    dataGridView1.DataSource = dsReportGrid.Tables[0];
    Controls.Add(dataGridView1);
    dataGridView1.Visible = true;

    dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete;
}

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.Rows[2].Cells[1].Style.ForeColor = Color.Red;
}