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

udi*_*old 2 datagridview

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

    public Report1(DataSet dsReport1, string sDateRep)
    {
        InitializeComponent();
        sDate = sDateRep;
        dsReportGrid = dsReport1;
        orgDataset();
        buildGrid();
    }
Run Code Online (Sandbox Code Playgroud)

这是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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

它加载DGV很好,问题是它不会像我希望的那样给单元上色,它只是让它变黑.

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

    private void Form1_Resize(object sender, EventArgs e)
    {

        buildGrid();
    }
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Dav*_*all 6

问题是,数据绑定尚未完成您的constructur所以网格中的任何改变都去掉里面(我没有真正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;
}
Run Code Online (Sandbox Code Playgroud)