2016-09-10 58 views
2

我已經通過向datagridview顯示數據完成了一個窗體應用程序。但是,datagridview中顯示的數據存在一些問題。form_load和button_click中的調用函數有什麼區別?

的功能:

private void MySQL_ToDatagridview4() 
{ 
    dataGridView3.Columns.Clear(); 
    mcon.Close(); 
    mcon.Open(); 
    MySqlDataAdapter MyDA = new MySqlDataAdapter(); 
    string sqlSelectAll = "SELECT Item_Name,Item_Pic from stockitem ORDER BY Main_Category_ID ASC, Item_Name ASC"; 
    MyDA.SelectCommand = new MySqlCommand(sqlSelectAll, mcon); 
    DataTable table = new DataTable(); 
    MyDA.Fill(table); 
    BindingSource bSource = new BindingSource(); 
    bSource.DataSource = table; 
    this.dataGridView3.DataSource = bSource; 
    DataGridViewImageColumn imageColumn = new DataGridViewImageColumn(); 
    imageColumn.HeaderText = "Pic"; 
    dataGridView3.Columns.Insert(0, imageColumn); 
    for (int i = 0; i < table.Rows.Count; i++) 
    { 
     try 
     { 
      String pic = table.Rows[i]["Item_Pic"].ToString(); 
      Byte[] bitmapData = Convert.FromBase64String(FixBase64ForImage(pic)); 
      System.IO.MemoryStream streamBitmap = new System.IO.MemoryStream(bitmapData); 
      def = new Bitmap((Bitmap)Image.FromStream(streamBitmap)); 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show(e.StackTrace); 
     } 
     dataGridView3.Rows[i].Cells[0].Value = def; 
    } 
    dataGridView3.Columns.Remove("Item_Pic"); 
    foreach (DataGridViewRow row in dataGridView3.Rows) 
    { 
     row.Height = 110; 
    } 
    foreach (DataGridViewColumn col in dataGridView3.Columns) 
    { 
     col.Width = 110; 
    } 

    for (int i = 0; i < dataGridView3.ColumnCount; i++) 
    { 
     dataGridView3.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; 
     dataGridView3.AutoResizeColumns(); 
     dataGridView3.Columns[i].DefaultCellStyle.Font = new System.Drawing.Font("Verdana", 8F, FontStyle.Bold); 
    } 
    mcon.Close(); 
} 

中的Form_Load調用

private void Form1_Load(object sender, EventArgs e) 
{ 
    MySQL_ToDatagridview4(); 
} 

結果:

Image

然後當我按一下按鈕

private void button6_Click(object sender, EventArgs e) 
{ 
    MySQL_ToDatagridview4(); 
} 

結果:

Image2

爲什麼結果如此不同?它調用相同的功能。

+0

上下文就是一切。當'Form'對象被初始化時,'Load'事件只會引發一次。顯然,當Load事件發生時,視圖依賴的東西還沒有完全初始化。那是什麼,我不能說。你沒有包含一個很好的[mcve],可以在你的問題中可靠地重現問題。如果你想得到一個好的答案,請改善這個問題。 –

回答

1

是的。它們是有區別的。請參閱Form events life cycle。表單加載事件發生在第一次顯示錶單之前。

嘗試使用Form顯示的事件。它可能會幫助你,確保UI線程順暢(我的意思是說,避免使用消息框類的東西,直到頁面完全顯示和繪製)。

+0

但是爲什麼它在form_Load事件中失敗?它是什麼特定於數據網格視圖控件或位圖圖片加載到網格視圖。我經常會設置控件的數據源,比如dropdownlist等,它也適用於form_load事件。 – RBT

相關問題