为什么这样不行?

jacobwc 2006-10-27 01:30:34
写了一用户组件winform,有两个comboBox
都是从数据库取出来的数据
现在想获利comboBox的值及根据值来执行相关的SQL语句返回DataTable类型
两个GET访问器如下
public string KHXX
{
get
{
return this.comboBox2.SelectedItem.ToString().Trim();
}
}
------------------------------------
public DataTable SendGoodsQuery
{
get
{
DataTable QueryTab;
if(this.comboBox2.SelectedItem.ToString().Trim()!="")
{
string bh=this.comboBox2.SelectedItem.ToString().Trim();
string str="select * from table1 where khbh='"+bh+"' ";
QueryTab=this.link.SelectDataBase(str);//返回DataTable类型的集合 }
else
{
QueryTab=null;
}
return QueryTab;
}
}
--------------------------------------
将控件拖到form,都提示:未将对象引用设置到对象的实例。
...全文
148 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacobwc 2006-10-28
  • 打赏
  • 举报
回复
我用另外一种方法解决了
把连接字符串设成公有属性,可以有默认值
也没有用load 事件了
另谢谢jointan()
我研究一下
jointan 2006-10-28
  • 打赏
  • 举报
回复
控件的执行时的代码应该放到
if (!this.DesignMode)
{
//比如连接数据库的方法
}
块中执行,否则在设计时会由于部分属性没有完成初始化,而导致异常
至于连接字符串,可以用公布属性的方法,在设计模式下由承载窗口的InitializeComponent方法或函载窗口的构造函数赋值.
必须在设置某属性后才能正确执行的方法,因该实现ISupportInitialize接口然后在
public void EndInit()
{
if (!this.DesignMode)
{
//检测启动属性是否被完全设置
}
}
块中去检测属性是否被正确设置,如果没有被设置,则设置条件取消某方法的执行
zhongwanli 2006-10-28
  • 打赏
  • 举报
回复
类加上[Serializable()]
jacobwc 2006-10-28
  • 打赏
  • 举报
回复
帮顶
jacobwc 2006-10-28
  • 打赏
  • 举报
回复
谢谢yeerh(边城浪),aafshzj(上海北京)
问题基本上解决
原来如此
大意了
-----------------------------------------
另To:yeerh(边城浪),弱弱地问一句
对于数据库连接字符串ConnectionString,
让用户控件使用调用用户控件的窗体的连接字符串如何实现?
我在用户控件的load事件中就有数据库查询操作
马上结贴
股神 2006-10-27
  • 打赏
  • 举报
回复
up
阿牛138588 2006-10-27
  • 打赏
  • 举报
回复
mark
yeerh 2006-10-27
  • 打赏
  • 举报
回复

public string KHXX
{
get
{
return this.comboBox2.SelectedItem.ToString().Trim();
}
}
改为:
public string KHXX
{
get
{
try
{
return this.comboBox2.SelectedItem.ToString().Trim();
}
catch
{
return "";
}
}
}
SendGoodsQuery作同样的修改
yeerh 2006-10-27
  • 打赏
  • 举报
回复
不要在组件构造或载入的时候执行连接数据库的语句.
aafshzj 2006-10-27
  • 打赏
  • 举报
回复
问题估计在这两个地方:
this.comboBox2.SelectedItem.ToString()
this.link.SelectDataBase(str);

前者可能是因为没有选中项,所以最好判断 if(this.comboBox2.SelectedItem != null)...

后者可能是因为link没有初始化吧,因为是在设计,你可能也没地方初始化,所以你在这里可以判断一下link(可能还涉及其他对象)是否存在,不存在就别使用了。if (this.link != null)...

110,534

社区成员

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

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

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