当前位置:编程学习 > C#/ASP.NET >>

高分向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#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,