高分向C# + Datawindow.net高手求救
我用C#开发数据库应用,建一个窗口,放一个TabControl控件tabc1,有两个(或以上)tabpage,每个tabpage放一个数据窗口控件dw1,dw2,运行的时候出错,提示不能创建数据窗口,不用tabcontrol时,可正常运行,请问是Sysbase的bug吗?问题出在何处?如何处理?private void Form2_Load(object sender, EventArgs e)
{
string connectionString = "user id= sa; password=sa; database=JEStore; server=Jmeport; ";
IDbConnection conn2 = new SqlConnection(connectionString);
conn2.Open();
dw1.LibraryList = "\\DataService\\DataWindow\\aa.pbl";
dw1.DataWindowObject = "d_a1_list";
dw2.LibraryList = "\\DataService\\DataWindow\\aa.pbl";
dw2.DataWindowObject = "d_a2_list";
Sybase.DataWindow.AdoTransaction SQLCA = new Sybase.DataWindow.AdoTransaction(conn2);
SQLCA.BindConnection();
dw1.SetTransaction(SQLCA);
dw1.Retrieve();
dw2.SetTransaction(SQLCA);
dw2.Retrieve();
conn2.Close();
}
错误是这样的(指向第二、三...个tabpage上的dw2、dw3....,只有第一个tabpage正常)
未处理DataWindowNotCreatedException
SetTransaction was called when no DataWindow object was attached.
--------------------编程问答-------------------- 在使用 ado.net 和.net的其他数据控件时没有这样的问题,估计是Sybase那个dll的问题。
如果方便楼主可以写一个简单的demo发过来
看能不能给你解决 --------------------编程问答-------------------- jetxia@126.com --------------------编程问答-------------------- 我年前做过相同的东西,每个tabpage上一个DataWindow没有出错.所以说不会是它的bug!
dw1.LibraryList = "\\DataService\\DataWindow\\aa.pbl";
dw1.DataWindowObject = "d_a1_list";
dw2.LibraryList = "\\DataService\\DataWindow\\aa.pbl";
dw2.DataWindowObject = "d_a2_list";
这些操作你可以在控件的属性设置窗口中设置好
或者把代码放到Form的Shown事件里试试(我遇到过一次DataWindowNotCreatedException错误,好象就是这么解决的) --------------------编程问答-------------------- TabControl 上放置DataWindow是有这样的问题的。原因是在TabControl 初始化的时候,默认的是初始化第一个TabPage,当你在点击第二个TabPage时,tabpage还没有创建,会出现未处理DataWindowNotCreatedException错误。
解决办法为
1:在TabPage的创建事件中加载DataWindow.
2:在页面转换事件中写DataWindow连接。
--------------------编程问答-------------------- 可以在Form_Load事件中激活下tabpage,就可以解决问题! --------------------编程问答-------------------- 是有这样的问题我在vb.net 中也碰到了。
不在load中设置第2个,第3个page对应的datawindow的 transtion...就可以了
在如下事件中设置
Select Case TabControl1.SelectedIndex
Case 0
DataWindowControl1.SetTransaction(Pub_Trans)
DataWindowControl1.Modify("datawindow.readonly = yes")
Case 1
DataWindowControl2.SetTransaction(Pub_Trans)
DataWindowControl2.Retrieve()
Case 2
DataWindowControl3.SetTransaction(Pub_Trans)
DataWindowControl3.Retrieve()
Case 3
DataWindowControl4.SetTransaction(Pub_Trans)
DataWindowControl4.Retrieve()
End Select
--------------------编程问答-------------------- 已经给出正解 --------------------编程问答-------------------- 在 form_load 中调用 tabcontrol.selecttab("tabpage2");tabcontrol.selecttab("tabpage1");先调用一下第二页,再调用第一页,之后再分别对这两个tabpage页上的dw控件设置SQLCL,这样就没有问题了,而且也不用每次选择tabpage的时候都对dw设置SQLCA,相对来说比较合理
补充:.NET技术 , C#