以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 自定义函数问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=68057) |
|
-- 作者:affixed -- 发布时间:2015/5/8 16:05:00 -- 自定义函数问题 Dim oldV = args(0) Dim newV = args(1) Dim r As Row = CurrentTable.Current Dim colIndex As Integer = CurrentTable.ColSel Dim colName As String = CurrentTable.Cols(colIndex).Name For Each dt As DataTable In DataTables For Each dCol As DataCol In dt.DataCols If dCol.Name = colName Then For Each dr As DataRow In dt.Select("[" & colName & "] = \'" & oldV & "\'") dr(colName) = newV Next End If Next dt.Save Next 这段代码,执行后会显示数据类型转换错误,具体状况如下,不知道如何修改。 --------------------------- 错误 --------------------------- 自定义函数"同步更新数据函数"执行出错,错误信息如下: System.Data.EvaluateException: 无法在 System.Decimal 和 System.String 上执行“=”操作。 在 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, DataViewRowState recordStates) 在 Foxtable.DataTable.Select(String filterExpression, String Sort, DataViewRowState RowState) 在 Foxtable.DataTable.Select(String filterExpression) 在 UserCode.A0mHatAwMtDcXrvv4(Object[] Args) --------------------------- 确定 --------------------------- |
|
-- 作者:Bin -- 发布时间:2015/5/8 16:08:00 -- dr(colName) = newV 不能一股脑的这样赋值,你要确定你列类型和 你NewV的类型是否匹配 数值类型和字符串类型是不可以互相赋值的
|
|
-- 作者:affixed -- 发布时间:2015/5/8 16:11:00 -- 那请问该如何判断列类型是否与NewV的类型是否匹配呢 |
|
-- 作者:Bin -- 发布时间:2015/5/8 16:13:00 -- For Each dCol As DataCol In dt.DataCols If dCol.Name = colName Then For Each dr As DataRow In dt.Select("[" & colName & "] = \'" & oldV & "\'") dr(colName) = newV Next End If Next 像这个你不需要遍历所有列啊.你传入的时候就应该知道该列是否对应.
[此贴子已经被作者于2015/5/8 16:14:06编辑过]
|
|
-- 作者:affixed -- 发布时间:2015/5/8 16:15:00 -- 我是想通过自定义函数来同步所有表中的内容。 不想在每个表的datacolchanged里写代码。
|
|
-- 作者:Bin -- 发布时间:2015/5/8 16:16:00 -- 那个遍历是多余的,如果要判断列是否存在用
|
|
-- 作者:Bin -- 发布时间:2015/5/8 16:16:00 -- 你传入值的时候,就应该传入对应的值. |
|
-- 作者:affixed -- 发布时间:2015/5/8 16:17:00 -- 我是在项目设置的datacolchanged里调用这个函数。 Functions.Execute("同步更新数据函数",e.OldValue,e.NewValue)
|
|
-- 作者:affixed -- 发布时间:2015/5/8 16:18:00 -- 如果不遍历所有列的话,程序怎么判断当前表中内容已改变的列在其他表中的位置呢 |
|
-- 作者:Bin -- 发布时间:2015/5/8 16:20:00 -- 不需要知道位置. 没看懂你想做什么,又遍历所有表,又遍历列的. 你直接说明你想实现什么 |