2016-09-10 2 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

Контекст - это все. Событие 'Load' создается только один раз, поскольку объект' Form' инициализируется. Очевидно, что что-то, что зависит от представления, еще не было полностью инициализировано, когда возникает событие Load. Что это, я не могу сказать. Вы не включили хороший [mcve], который надежно воспроизводит проблему в вашем вопросе. Пожалуйста, улучшите вопрос, если вы хотите получить хороший ответ. –

ответ

1

Да. есть разница. См. Form events life cycle. Событие «Загрузка формы» происходит до того, как форма отображается в первый раз.

Попробуйте использовать отображаемое событие формы. Это может помочь вам, убедитесь, что поток пользовательского интерфейса является гладким (я хочу сказать, что не используйте поле Message box, пока страница не будет полностью показана и не будет нарисована).

+0

Но почему это происходит неудачно в случае события form_Load? Это что-то конкретное для управления представлением данных или изображения бит-карт, загружаемых в сетку. Я так часто устанавливаю datasource элементов управления, как dropdownlist и т. Д., И он просто работает в событии form_load. – RBT

 Смежные вопросы

  • Нет связанных вопросов^_^