用C#写的winform代码,在窗体使用combobox后,打开速度慢的问题

nikita007 2006-05-10 09:59:18
用C#写的winform代码,我在页面上使用了datagrid 和combobox后打开速度特别慢,经我测试发现datagrid对速度没影响,而是combobox对其有影响,请问如何才能提高打开的速度?
...全文
1148 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjisheng1 2006-06-29
  • 打赏
  • 举报
回复
关注
nikita007 2006-05-11
  • 打赏
  • 举报
回复
问题已经解决,我在FormLoad的时候不把combobox连接到数据库,等窗体加载后用mousedown函数加载数据,并对combobox进行数据模糊查找和编辑,谢谢大家的关注。
wumylove1234 2006-05-11
  • 打赏
  • 举报
回复
Knight94(愚翁) ( ) 信誉:110 2006-5-10 12:19:30 得分: 0



to 请问如何在每个窗体都调用conn连接而不重新连接数据库?

方法一,做成全局变量,例如:
public class PublicMember
{
private PublicMember();
public static SqlConnection myConn;
}

// Get connection use "PublicMember.myConn"

方法二,做成主窗体的局部成员,然后创建子窗体的时候,把局部成员传进去,例如:
public yourchildForm:..
{
public yourchildForm( ref SqlConnection myConn )
{
//Use "myConn" to init your class member
}



同意这种方法.或者使用MS的那个类库.
huangguangdou 2006-05-11
  • 打赏
  • 举报
回复
save
hnhl 2006-05-11
  • 打赏
  • 举报
回复
建议使用 MS Enterprise Library 微软企业库,给我们创建应用程序提供一种最佳实践,不妨有时间看看:http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/consyscourse/EntLib.aspx
Yellow198267 2006-05-10
  • 打赏
  • 举报
回复
第一次连接速度慢
绑定combobox算法优化
Knight94 2006-05-10
  • 打赏
  • 举报
回复
to 请问如何在每个窗体都调用conn连接而不重新连接数据库?

方法一,做成全局变量,例如:
public class PublicMember
{
private PublicMember();
public static SqlConnection myConn;
}

// Get connection use "PublicMember.myConn"

方法二,做成主窗体的局部成员,然后创建子窗体的时候,把局部成员传进去,例如:
public yourchildForm:..
{
public yourchildForm( ref SqlConnection myConn )
{
//Use "myConn" to init your class member
}
鲁虾 2006-05-10
  • 打赏
  • 举报
回复
最好将数据读入内存中!
灰太狼 2006-05-10
  • 打赏
  • 举报
回复
調用數據庫的原理是這樣的,sqlconnection用於連接,dataset就是一個數據集,用在本地直接和你所要綁定的控件打交道,而它們之間的通信則用sqlDataAdapter,這相當於一個通道一樣。
所以你隻要第一次對數據庫連接成功後,把相關的數據通過sqlDataAdapter傳到Dataset後,就可以對dataset來操作了。隻有當你需要把數據回寫到數據庫時,再用dataset和數據庫通信,否則你的所有本地操作都是對dataset的操作,所以不用每個窗體都和數據庫連,隻要每個窗體都擁有一個dataset就行了,注意每個dataset都要指定和sql打交道的通道,不過這一步很容易,當你把dataset控件放入窗體時,就會自動提示你做這一步的。自己試試,我要吃飯去了。以前我也是每個窗體都connection,這樣做太慢了。也不好.
nikita007 2006-05-10
  • 打赏
  • 举报
回复
你好,我想请问一下具体的实现方法,我的主窗体是一个登陆界面,

to 这个不是主窗体,我再问一下我打开每个窗体都要重新连接数据库吗?因为我基本上每个窗体都要连接到数据库的,如果能只用一次数据库连接就能在所有的窗体上用就可以缩短你说的数据库连接的时间问题了,请问有没有好的方法?

你在每个窗体中都传进去connectionstring,那么操作数据库的时候都是新创建一个connection,那么是很慢的,如果你已经有connection了,那么操作数据库的时候,用已有的connection来操作就行了。

static void Main()
{
Application.Run(new login());

}

private void button1_Click(object sender, System.EventArgs e)
{
user_id = USER_ID.Text;
if(user_id == "")
{
MessageBox.Show("please input USER_ID");
return;
}

string user_pwd = USER_PWD.Text;
if(user_pwd == "")
{
MessageBox.Show("please input password");
return;
}


string strSQL;

strSQL = "SELECT * FROM A2_USER WHERE USER_ID = '" + user_id + "'";

SqlDataAdapter da = new SqlDataAdapter(strSQL, source);
DataSet ds = new DataSet();
da.Fill(ds,"USER");
try
{
if(ds.Tables["USER"].Rows.Count != 0)
{
if(ds.Tables["USER"].Rows[0]["USER_PWD"].ToString() == user_pwd.ToString())
{
this.Hide();
contract myForm = new contract();
myForm.ShowDialog();
this.Close();
}
else
{
MessageBox.Show("password is wrong,please enter correct password");
return;
}
}
else
{
MessageBox.Show("Not exist this user");
return;
}
}
catch
{
MessageBox.Show("exception");
}
finally
{
//this.Hide();
//this.Close();
//this.Visible = false;
}

}
internal static string user_id = user_id ;


private void login_Load(object sender, System.EventArgs e)
{
USER_PWD.PasswordChar = '*';

foreach(Control ctrl in this.Controls)
{
if ((ctrl is TextBox) || (ctrl is ComboBox)) //如果文本框或下拉框放在组合框中,你应该用如groupBox1.TextBox
{
ctrl.KeyDown += new System.Windows.Forms.KeyEventHandler(this.EnterKeyDown);
}
}

}

private void EnterKeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode==Keys.Enter)
{
System.Windows.Forms.SendKeys.Send("{TAB}");
}
}

private void button2_Click(object sender, System.EventArgs e)
{
this.Close();
}

请问如何在每个窗体都调用conn连接而不重新连接数据库?
灰太狼 2006-05-10
  • 打赏
  • 举报
回复
這樣來做。
在主窗體上把sqlconnection , sqlDataAdapter , dataset 等都弄好後,在form2 中(假設你的第二個窗體叫form2), 不用再出現sqlconnection和sqlDataAdapter了,隻要從工具箱中拖出一個dataset控件後,指定數據集就可以了,然後你就可以用這個datagrid來綁定這個dataset了,明白?
diandian82 2006-05-10
  • 打赏
  • 举报
回复
o
Knight94 2006-05-10
  • 打赏
  • 举报
回复
to 这个不是主窗体,我再问一下我打开每个窗体都要重新连接数据库吗?因为我基本上每个窗体都要连接到数据库的,如果能只用一次数据库连接就能在所有的窗体上用就可以缩短你说的数据库连接的时间问题了,请问有没有好的方法?

你在每个窗体中都传进去connectionstring,那么操作数据库的时候都是新创建一个connection,那么是很慢的,如果你已经有connection了,那么操作数据库的时候,用已有的connection来操作就行了。
nikita007 2006-05-10
  • 打赏
  • 举报
回复
问题尚未解决,同志仍需努力:)
nikita007 2006-05-10
  • 打赏
  • 举报
回复
那个连接的代码是写在主窗体中,然后在每个窗体中都写一条调用这个连接的代码吗?那应该写在主窗体的那个部分呢?
hsgzs 2006-05-10
  • 打赏
  • 举报
回复
一个command命令open了一次以后,如果不关闭连接,再次open就会出错
hsgzs 2006-05-10
  • 打赏
  • 举报
回复
不是每开一个窗体都要重新连接,而是你在开窗体的时候调用了方法中包含了,而且在2003中的connect连接重用性不好
nikita007 2006-05-10
  • 打赏
  • 举报
回复
这个不是主窗体,我再问一下我打开每个窗体都要重新连接数据库吗?因为我基本上每个窗体都要连接到数据库的,如果能只用一次数据库连接就能在所有的窗体上用就可以缩短你说的数据库连接的时间问题了,请问有没有好的方法?
Knight94 2006-05-10
  • 打赏
  • 举报
回复
改进的方法,如果要打开的窗体是主窗体的话,建议用splash窗体来做掩饰;
如果不是主窗体的话,如果其他地方已经连接数据库了,那么就不要重新连接了,用已有的连接即可。
nikita007 2006-05-10
  • 打赏
  • 举报
回复
那么我怎样才能缩短这部分的时间呢?
加载更多回复(14)
源码链接: https://pan.quark.cn/s/0f7c75cb3aad ### MIPI Video Mode 与 Command Mode 的差异 #### 一、引言 MIPI (Mobile Industry Processor Interface) 是一种用于连接移动设备中处理器及其外围设备的标准化接口。MIPI 接口支持多种协议,其中包含 DSI (Display Serial Interface) 和 DCS (Display Control Interface) 等协议。在 MIPI 接口的应用中,主要涉及两种工作模式:Video Mode(视频模式)和 Command Mode(命令模式)。本文旨在系统性地阐述这两种模式的工作机制、特性以及实际应用环境。 #### 二、LCD RAM 概念说明 在进一步探讨 MIPI 的两种模式之前,有必要对文中提及的“LCD RAM”概念进行明确。实际上,“LCD RAM”并非一个通用术语,而是本文作者用来描述 LCD 控制器中用于存储显示数据的内存区域。LCD(Liquid Crystal Display,液晶显示屏)通常配备一个控制 IC(Integrated Circuit,集成电路),该控制 IC 可能内置 RAM 以缓存显示数据。 #### 三、MIPI Video Mode(视频模式) **定义:** - 视频模式是一种类似于传统 RGB 接口的工作模式,它要求主机持续不断地向显示器传输刷新数据。 - 在这种模式下,数据和控制信号以报文的形式通过 MIPI 总线进行传输。 - 显示器本身无需配备帧缓冲器,因为主机会周期性地刷新屏幕。 **特点:** 1. **实时性高:** 主机需要不...
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 在电磁模拟技术中,CST(Computer Simulation Technology)是一种被广泛采纳的软件工具,它主要用于电磁场、微波、天线以及射频系统的设计工作。本资料将详细分析CST软件中离散端口的具体配置方法,这些方法对于提升仿真结果的精确度和专业水准具有决定性作用。离散端口在CST软件中扮演着模拟信号输入或输出的重要角色,它们构成了仿真模型不可或缺的部分。在配置离散端口时,一个核心的原则是保证端口的方向与网格线保持一致,这是因为这样做能够有效降低计算过程中产生的误差,并确保仿真数据的有效性。如果未能遵循这一指导原则,可能会引发未知的计算问题,进而导致仿真结果失去可靠性。 在CST软件中配置离散端口,通常需要借助“Pick Points”这一功能。通过选择“Pick Edge Center”选项,端口将被设定在模型边缘的中心位置上。然而,这种做法并不总是能够确保端口与网格线保持平行。在某些特定情形下,模型的几何构造可能不允许直接选取一个与网格线平行的边作为端口的安装位置。 为了克服这一挑战,可以采用多种不同的策略。如果模型本身已经包含一条与馈电口平行的边,那么可以直接利用这条边来建立端口,此时CST软件会自动调整端口使其与网格线对齐。另一种可选的方法是,当模型不具备现成的平行边时,用户可以手动构建一个几何结构,比如一个立方体,并使其边缘与馈电口平行。通过这种方式,新建立的几何结构的边缘就可以作为端口的位置,从而确保端口与网格线的平行关系。 在实施上述操作时,必须关注端口尺寸的合理性和物理意义的一致性。端口的尺寸应当依据实际天线馈电部分的尺寸进行适当调整,过大的端口或...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧