form_load 和 button_click 调用函数有什么不同吗?
Is any difference in calling function in form_load and button_click?
我通过向 datagridview 显示数据完成了一个 window 表单应用程序。但是在datagridview中显示数据时出现了一些问题。
函数:
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();
}
结果:
然后当我点击按钮时
private void button6_Click(object sender, EventArgs e)
{
MySQL_ToDatagridview4();
}
结果:
为什么结果如此不同?它正在调用相同的函数。
是的。它们是有区别的。参考 Form events life cycle。表单加载事件发生在表单首次显示之前。
尝试使用表单显示事件。它可能对您有帮助,确保 UI 线程流畅(我的意思是说在页面完全显示和绘制之前避免使用消息框之类的东西)。
我通过向 datagridview 显示数据完成了一个 window 表单应用程序。但是在datagridview中显示数据时出现了一些问题。
函数:
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();
}
结果:
然后当我点击按钮时
private void button6_Click(object sender, EventArgs e)
{
MySQL_ToDatagridview4();
}
结果:
为什么结果如此不同?它正在调用相同的函数。
是的。它们是有区别的。参考 Form events life cycle。表单加载事件发生在表单首次显示之前。
尝试使用表单显示事件。它可能对您有帮助,确保 UI 线程流畅(我的意思是说在页面完全显示和绘制之前避免使用消息框之类的东西)。