以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何让父表和子表同时变色?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=31032)

--  作者:hbing1109
--  发布时间:2013/4/9 10:02:00
--  [求助]如何让父表和子表同时变色?

表B是父表,表A是子表

 

 子表里根据工序的不同 行的颜色不同,  我想让父表里根据货号完成的工序 也变成同样的颜色。

 

大神啊  求教啊!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:子表父表同色.zip

 

 

 

 

首先非常感谢 muhua 大神的指点 

 

根据实例 我明白了方法 但是我实例做出来之后却达不到那样效果。还请赐教!

以下是我的代码:

 

子表属性:

datacolchanged 方法:

 

Select Case e.DataCol.Name
    Case "磨床","镀铜","电雕","镀铬","打样","出厂"
        Dim dr As DataRow = DataTables("定版记录").Find("版号=" & e.DataRow("版号"))
        If e.DataRow("出厂") = True Then
            dr("到达工序") = "出厂"
        ElseIf e.DataRow.IsNull("打样") = False Then
            dr("到达工序") = "打样"
        ElseIf e.DataRow.IsNull("镀铬")  = False Then
            dr("到达工序") = "镀铬"
        ElseIf e.DataRow.IsNull("电雕")  = False Then
            dr("到达工序") = "电雕"
        ElseIf e.DataRow.IsNull("研磨")  = False Then
            dr("到达工序") = "研磨"
        ElseIf e.DataRow.IsNull("镀铜")  = False Then
            dr("到达工序") = "镀铜"
        ElseIf e.DataRow.IsNull("磨床")  = False  Then
            dr("到达工序") = "铁芯完成"
        End If
End Select

 

 

drawcell 方法:

If e.Row("磨床") <> Nothing Then
    e.Style = "铁芯完成"
End If
If e.Row("镀铜") <> Nothing Then
    e.Style = "镀铜"
End If
If e.Row("研磨") <> Nothing Then
    e.Style = "研磨"
End If
If e.Row("电雕") <> Nothing Then
    e.Style = "电雕"
End If
If e.Row("镀铬") <> Nothing Then
    e.Style = "镀铬"
End If
If e.Row("打样") <> Nothing Then
    e.Style = "打样"
End If
If e.Row("出厂") = True Then
    e.Style = "完成"
End If

 

父表属性还没设置,这个代码出现的问题是子表在工序里输入后  父表的“到达工序”里不显示所设置的数据,并且提示:

运行错误: 调用的目标发生了异常。

 

.NET Framework 版本:2.0.50727.5466
Foxtable 版本:2012.11.29.1
错误所在事件:表,工作记录,DataColChanged
详细错误信息:
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.Data.SyntaxErrorException: 语法错误:“A124”运算符后缺少操作数。
   在 System.Data.ExpressionParser.Parse()
   在 System.Data.DataExpression..ctor(DataTable table, String expression, Type type)
   在 System.Data.Select..ctor(DataTable table, String filterExpression, String sort, DataViewRowState recordStates)
   在 System.Data.DataTable.Select(String filterExpression, String sort)
   在 Foxtable.DataTable.Find(String OOlO11Oll10llO11, String O11l, Int32 OOO0O)
   在 UserCode.DataColChanged(DataColEventArgs e)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.DataTable.O0ll10O00l0O11011l0110O0(Object O01Ol1, DataColumnChangeEventArgs O)

 

————————————————————————————————————————————————————————————

 

还出现这个,这两个的版号是不一样的。

 

.NET Framework 版本:2.0.50727.5466
Foxtable 版本:2012.11.29.1
错误所在事件:表,工作记录,DataColChanged
详细错误信息:
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.Data.EvaluateException: 无法在 System.String 和 System.Int32 上执行“=”操作。
   在 System.Data.BinaryNode.SetTypeMismatchError(Int32 op, Type left, Type right)
   在 System.Data.BinaryNode.BinaryCompare(Object vLeft, Object vRight, StorageType resultType, Int32 op, CompareInfo comparer)
   在 System.Data.Select.Eval(BinaryNode expr, DataRow row, DataRowVersion version)
   在 System.Data.Select.Evaluate(Int32 record)
   在 System.Data.Select.FindFirstMatchingRecord()
   在 System.Data.Select.GetBinaryFilteredRecords()
   在 System.Data.Select.SelectRows()
   在 System.Data.DataTable.Select(String filterExpression, String sort)
   在 Foxtable.DataTable.Find(String OOlO11Oll10llO11, String O11l, Int32 OOO0O)
   在 UserCode.DataColChanged(DataColEventArgs e)
   --- 内部异常堆栈跟踪的结尾 ---
   在 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   在 Foxtable.DataTable.O0ll10O00l0O11011l0110O0(Object O01Ol1, DataColumnChangeEventArgs O)

[此贴子已经被作者于2013-4-9 23:51:46编辑过]

--  作者:hbing1109
--  发布时间:2013/4/9 10:03:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:子表父表同色.zip


--  作者:Bin
--  发布时间:2013/4/9 10:05:00
--  
在子表的DataColChanged事件中. 把父表中货号和当前触发事件的行样式设置为一样即可.
--  作者:hbing1109
--  发布时间:2013/4/9 10:06:00
--  

大神。。能在详细一点么?例子我传上去了


--  作者:狐狸爸爸
--  发布时间:2013/4/9 10:10:00
--  

楼主,我有点困惑,如果父表某行在子表有多行,那么父表的颜色,根据子表哪一行的数据来变色呢?

一个父亲可能有多个儿子的啊?


--  作者:Bin
--  发布时间:2013/4/9 10:11:00
--  
稍等.我去给你做.
--  作者:Bin
--  发布时间:2013/4/9 10:12:00
--  
狐狸爸爸这个问题.楼主你想怎么处理? 你这设计不太合理吧?
--  作者:hbing1109
--  发布时间:2013/4/9 10:15:00
--  

子行里有一个行变色 父行就变色。 或者子行所有颜色变色 父行变色  ,这个怎么都可以

[此贴子已经被作者于2013-4-9 10:15:32编辑过]

--  作者:Bin
--  发布时间:2013/4/9 10:18:00
--  
问题是.一个父行可能会对应多个子行啊..到底以哪个子行为参照行呢?
--  作者:Bin
--  发布时间:2013/4/9 10:19:00
--  
比如说  张三有2个儿子 张五,张六.   张五红色,张六蓝色.  那张三如果根据儿子定颜色..该是红色,还是蓝色?