除了靠new 把控制元件一個一個的new出來,還有什么其他辦法比較快的
uj5u.com熱心網友回復:
換個快一點的電腦,或是異步加載控制元件,讓界面看上去動態一點緩解用戶等待焦慮。uj5u.com熱心網友回復:
別偷懶。除非你自己寫通用方法。
uj5u.com熱心網友回復:
快慢沒區別,動態好處是節約記憶體,而不是cpuuj5u.com熱心網友回復:
序列化與反序列化;克隆;
uj5u.com熱心網友回復:
public void LoadControl(Object sender,string tableName) {
Form form = sender as Form;
DataBase mydate = new DataBase();
int i = 0;
DataGridView dv = form.Controls.Find("dataGridView", true)[0] as DataGridView;
dv.Columns.Clear();
Panel panel = form.Controls.Find("Table", true)[0] as Panel;
panel.Controls.Clear();
mydate.Cmd.CommandType = CommandType.Text;
mydate.Cmd.CommandText = "select * from t_Dty where TableName='" + tableName + "' order by ColumnSx";
try
{
if (mydate.Conn.State == ConnectionState.Closed)
{
mydate.Conn.Open();
}
SqlDataReader reader = mydate.Cmd.ExecuteReader();
while (reader.Read())
{
//輸入框名稱
Label label = new Label();
label.Name = "lb" + reader["TableColumn"].ToString();
label.Text = reader["ColumnName"].ToString() + ":";
label.AutoSize = true;
label.Visible = true;
label.Location = new Point(10 + i%2*150, 10 + i/2 * 25);
panel.Controls.Add(label);
if (reader["ColumnName"].ToString() == "部門")
{
ComboBox comboBox = new ComboBox();
comboBox.Name = reader["TableColumn"].ToString();
comboBox.Enabled = false;
comboBox.Visible = true;
comboBox.Size = new Size(reader["ColumnSize"].GetHashCode(), 25);
comboBox.Location = new Point(label.Text.Length * 11 + label.Location.X + 5, 10 + i / 2 * 25 - 5);
this.ComBoxItem(comboBox, "DeMent");
panel.Controls.Add(comboBox);
}
else if (reader["ColumnName"].ToString() == "員工型別")
{
ComboBox comboBox = new ComboBox();
comboBox.Name = reader["TableColumn"].ToString();
comboBox.Enabled = false;
comboBox.Visible = true;
comboBox.Size = new Size(reader["ColumnSize"].GetHashCode(), 25);
comboBox.Location = new Point(label.Text.Length * 11 + label.Location.X + 5, 10 + i / 2 * 25 - 5);
comboBox.Items.Add("");
comboBox.Items.Add("1.業務員");
comboBox.Items.Add("2.采購員");
comboBox.Items.Add("3.倉管員");
panel.Controls.Add(comboBox);
}
else {
TextBox textBox = new TextBox();
textBox.Name = reader["TableColumn"].ToString();
textBox.ReadOnly = true;
textBox.Visible = true;
textBox.Size = new Size(reader["ColumnSize"].GetHashCode(), 25);
textBox.Location = new Point(label.Text.Length * 11 + label.Location.X + 5, 10 + i / 2 * 25 - 5);
panel.Controls.Add(textBox);
}
//查詢顯示列添加
DataGridViewColumn dc = new DataGridViewColumn();
dc.DataPropertyName = reader["TableColumn"].ToString();
dc.Visible = true;
dc.Name = "T" + reader["TableColumn"].ToString();
dc.HeaderText = reader["ColumnName"].ToString();
dc.Width = reader["ColumnSize"].GetHashCode();
DataGridViewCell dgvcell = new DataGridViewTextBoxCell();
dc.CellTemplate = dgvcell;
dv.Columns.Add(dc);
i++;
}
panel.Height = i/2 * 25+50;
}
catch (Exception ex)
{
throw ex;
}
finally
{
mydate.Conn.Close(); //連接關閉,但不釋放掉該物件所占的記憶體單元
}
}這是我測驗的代碼,后面再針對每種型別的控制元件 獨立一個方法出來,就是不知道 ,后期資料量大了后,這樣會不會卡,
uj5u.com熱心網友回復:
我去。寫幾個物體類,加載不更香嗎?寫一堆的new,會有多快。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/283751.html
標籤:C#
