以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  新版请教  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=82950)

--  作者:hbhb
--  发布时间:2016/3/28 19:29:00
--  新版请教
大师:终于发现问题了,新版本打开老项目后,发现只要修改项目事件,如准备加载内部表时执行事件,重新打开项目后,有些表主键就没有了。为何??
--  作者:大红袍
--  发布时间:2016/3/28 19:54:00
--  

1、升级到最新版;

 

2、删除bin文件夹;

 

3、具体做例子发上来测试。


--  作者:hbhb
--  发布时间:2016/3/28 20:14:00
--  
有关调用实时(JIT)调试而不是此对话框的详细信息,
请参见此消息的结尾。

************** 异常文本 **************
System.NullReferenceException: 未将对象引用设置到对象的实例。
   在 Foxtable.Col.get_AllowEdit()
   在 Foxtable.oOO   o .o_Oo_O__(Object A_0, RowColEventArgs A_1, RecordGrid A_2)
   在 Foxtable.oOO   o .o    O O(Object A_0, RowColEventArgs A_1)
   在 C1.Win.C1FlexGrid.C1FlexGridBase.OnBeforeEdit(RowColEventArgs e)
   在 C1.Win.C1FlexGrid.C1FlexGridBase.#ndb(Int32 #j, Int32 #l)
   在 C1.Win.C1FlexGrid.C1FlexGridBase.DrawCell(Graphics #AA, Int32 #j, Int32 #l, Style #aE, Rectangle #o5, String #gM, Image #Ak, CheckEnum #bdb)
   在 C1.Win.C1FlexGrid.C1FlexGridBase.DrawCell(PaintEventArgs e, Int32 row, Int32 col)
   在 C1.Win.C1FlexGrid.C1FlexGrid.DrawCell(PaintEventArgs e, Int32 row, Int32 col)
   在 C1.Win.C1FlexGrid.C1FlexGrid.DrawRow(PaintEventArgs e, Int32 row)
   在 C1.Win.C1FlexGrid.C1FlexGridBase.#adb(PaintEventArgs #tQ)
   在 C1.Win.C1FlexGrid.C1FlexGridBase.OnPaint(PaintEventArgs e)
   在 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
   在 System.Windows.Forms.Control.WmPaint(Message& m)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 C1.Win.C1FlexGrid.Util.BaseControls.ScrollableControl.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

--  作者:大红袍
--  发布时间:2016/3/28 20:15:00
--  
 上传实例。
--  作者:hbhb
--  发布时间:2016/3/28 20:37:00
--  
请问:这是什么原因?
老版本在准备加载内部表时的执行事件中,有条件加载表的代码。在新版本中取消此事件的代码后,加载的表部分就没有主键了。

--  作者:大红袍
--  发布时间:2016/3/28 20:39:00
--  
贴出代码,最好上传项目。
--  作者:hbhb
--  发布时间:2016/3/28 20:50:00
--  
老版本中BeforeLoadInnerTable的代码为:
e.HideSplashForm = True
If e.DataTableName = "表a" Or e.DataTableName = "jcsjdatatable" Or e.DataTableName = "任务主表" Then
    e.Cancel = False
Else
    e.Cancel = True
End If

计划中代码
If DataTables.Contains("zba") = False Then
    Functions.Execute("datatablesload","zba")
End If

If DataTables.Contains("zaa") = False Or DataTables.Contains("zab") = False  Then
    DataTables.Load("zaa|zab")   ‘---关联表
End If
If DataTables.Contains("zac") = False Or DataTables.Contains("zad") = False  Then
    DataTables.Load("zac|zad")
End If
If DataTables.Contains("dttzfl") = False Or DataTables.Contains("dttzflmxb") = False  Then
    DataTables.Load("dttzfl|dttzflmxb")
End If
If DataTables.Contains("hbdttzfl") = False Or DataTables.Contains("hbdttzflmxb") = False  Then
    DataTables.Load("hbdttzfl|hbdttzflmxb")
End If


Dim kz As String
Dim bjh As new List(of String)
bjh = DataTables("jcsjdatatable").GetValues("dstatablename","dstatablename is not null","_sortkey")   ’---获取所有表的集合
For Each bj As String In bjh
    If bj <> "zab"  And bj <> "zad" And bj <> "zaa" And bj <> "zac" And bj <> "zba" And bj <> "dttzfl" And bj <> "dttzflmxb" And bj <> "hbdttzfl" And bj <> "hbdttzflmxb"    Then
        If DataTables.Contains(bj) = False Then
            Functions.Execute("datatablesload",bj)
        End If
    End If
    kz = bj
Next

If kz = bjh(bjh.Count - 1) Then
    MyTimers("loaddatatable").Enabled = False
End If


在新版本中,删除计划中的代码,删除BeforeLoadInnerTable中的代码。
请问某些表主键就没有了。

老版本就没有问题?????






--  作者:大红袍
--  发布时间:2016/3/28 20:53:00
--  

 你把计划任务里面的代码去掉呢?特别是和 jcsjdatatable 相关的。

 

 你能不能做个具体的例子发上来。


--  作者:hbhb
--  发布时间:2016/3/28 20:54:00
--  
新版本如果不改动,运行就没有问题。老版本改动与不改动都没有问题?究竟为何?
--  作者:大红袍
--  发布时间:2016/3/28 20:56:00
--  
 看8楼。