2016-09-10 5 views
2

私はdatagridviewにデータを表示することによってウィンドウフォームアプリケーションを完成させました。しかし、データグリッドビューにデータが表示されているときに問題がありました。form_loadとbutton_clickの呼び出し関数の違いはありますか?

機能:のForm_Loadに

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

と呼ば

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

結果:私はボタンをクリックし

Image

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

結果:

結果はとても異なっているのはなぜ

Image2

?それは同じ関数を呼び出しています。

+0

コンテキストはすべてです。 'Load'イベントは、' Form'オブジェクトが初期化されているときに1回だけ発生します。明らかに、ビューが依存するものは、まだ 'Load'イベントが発生したときに完全には初期化されていません。つまり、私は言うことができません。あなたはあなたの質問に問題を確実に再現する良い[mcve]を含めていません。良い答えが必要な場合は、質問を改善してください。 –

答えて

1

はい。違いがあります。 Form events life cycleを参照してください。フォームが最初に表示される前に、フォームのロードイベントが発生します。

フォームのイベントを使用してみてください。それはあなたに役立つかもしれませんが、UIスレッドが滑らかであることを確認してください(ページが完全に表示され、ペイントされるまで、メッセージボックスの種類を使用しないようにしてください)。

+0

しかし、なぜform_Loadイベントの場合に失敗しますか?これは、データグリッドビューコントロールやビットマップ画像がグリッドビューに読み込まれることに固有のものですか?私はたいていの場合、ドロップダウンリストなどのコントロールのデータソースを設定し、form_loadイベントでも動作します。 – RBT

関連する問題