我正在尝试使用样式颜色等格式化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();
}
为什么会这样?如何让它从一开始就为细胞着色?
谢谢!
答案 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;
}