2011-07-20 76 views
1

我試圖格式化一個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(); 
    } 

爲什麼會發生?我怎樣才能讓它從一開始就對單元格進行着色?

謝謝!

回答

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; 
}