以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  老大,有问题指教,请指明思路!  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=8142)

--  作者:唐尸三摆手
--  发布时间:2010/9/9 13:50:00
--  老大,有问题指教,请指明思路!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目49.table

老大,请看附件,排产优化表,从排产数据表按日期和优先级提取计划号填充到对应的加工单元列中,请教如何书写代码,已有数据为我手工填入,请指教!


--  作者:唐尸三摆手
--  发布时间:2010/9/9 14:13:00
--  

做了一个按钮

Dim f As New Filler
f.SourceTable = DataTables("排产数据") \'指定数据来源
f.SourceCols = "排产日期,优先级,计划号" \'指定数据来源列
f.datatable = DataTables("排产优化") \'指定数据接收表
f.DataCols = "排产日期,优先级,加工单元A" \'指定数据接收列
f.Filter="加工单元=\'010212\'"
f.ExcludeNullValue=True
f.Fill() \'填充数据

 

 

不能全部填充啊,请帮忙


--  作者:czy
--  发布时间:2010/9/9 15:11:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3.table


--  作者:狐狸爸爸
--  发布时间:2010/9/9 15:12:00
--  

填充数据,并非必须要用Filler,Fiiler是机械的,只能处理简单的、排除重复的填充。

 

Dim Names1() As String = {"010212","010221","020222","010223","014301","014302","014303","014304","014306"}
Dim Names2() As String = {"A","B","C","D","E","F","G","H","I"}
Dim Arys As List(Of String())
arys = DataTables("排产数据").GetUniqueValues("", "排产日期", "优先级")
For Each ary As String() In Arys
    Dim dr1 As DataRow = DataTables("排产优化").AddNew()
    dr1("排产日期") = ary(0)
    dr1("优先级") = ary(1)
    For n As Integer = 0 To Names1.Length - 1
        Dim dr2 As DataRow = DataTables("排产数据").Find("排产日期 = #" & ary(0) & "# And 优先级 = \'" & ary(1) & "\' And 加工单元 = \'" & Names1(n) & "\'")
        If dr2 IsNot Nothing
            dr1("加工单元" & Names2(n)) = dr2("计划号")
        End If
    Next
Next


--  作者:狐狸爸爸
--  发布时间:2010/9/9 15:16:00
--  

呵呵,我马后炮了,原来C版解决了。

C版动态生成表,我的在原来的表填充,楼主自己选择。

[此贴子已经被作者于2010-9-9 15:15:58编辑过]

--  作者:小狐
--  发布时间:2010/9/9 18:15:00
--  

挺复杂的,好好研究一下


--  作者:唐尸三摆手
--  发布时间:2010/9/10 8:51:00
--  
C版和老大的代码各有千秋的
--  作者:狐狸爸爸
--  发布时间:2010/9/10 8:57:00
--  
方法很多,你还可以写得更好。
 
我的代码再优化一下:
 
Dim Arys As List(Of String())
arys = DataTables("排产数据").GetUniqueValues("", "排产日期", "优先级")
For Each ary As String() In Arys
    Dim dr1 As DataRow = DataTables("排产优化").AddNew()
    dr1("排产日期") = ary(0)
    dr1("优先级") = ary(1)
    For Each dc AS DataCol In DataTables("排产优化").DataCols
        Dim dr2 As DataRow = DataTables("排产数据").Find("排产日期 = #" & ary(0) & "# And 优先级 = \'" & ary(1) & "\' And 加工单元 = \'" & dc.Caption & "\'")
        If dr2 IsNot Nothing
            dr1(dc.name) = dr2("计划号")
        End If
    Next
Next
[此贴子已经被作者于2010-9-10 9:00:45编辑过]

--  作者:唐尸三摆手
--  发布时间:2010/9/17 8:53:00
--  

Dim Arys As List(Of String())
arys = DataTables("排产数据").GetUniqueValues("", "排产日期", "优先级")
 

上面这句我想直接改为从后台erp数据库的a1表提取数据,(而"排产数据"是内部表,结构一样的),不知能否做到

Dim cmd As New SQLCommand
Dim dt As datatable
cmd.C
cmd.CommandText = "select distinct inputdate,remark From a1"
dt = cmd.ExecuteReader()
Dim Arys As List(Of String())
Arys =DataTables(dt).GetUniqueValues("","inputdate", "remark")

 

为什么提示错误呢?

 


图片点击可在新窗口打开查看此主题相关图片如下:snap4.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2010-9-17 8:55:27编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/9/17 9:12:00
--  

1、应该这样:

Arys =dt.GetUniqueValues("","inputdate", "remark")

 

2、其实你的SQL语句已经排除重复值了,所以dt中并没有重复值了,那么直接使用dt即可,不需要再GetUniqueValues了。

 

For Each dr As DataRow In dt.DataRows
    Dim dr1 As DataRow = DataTables("排产优化").AddNew()
    dr1("排产日期") = dr("排产日期")
    dr1("优先级") = dr("优先级")
    For Each dc AS DataCol In DataTables("排产优化").DataCols
        Dim dr2 As DataRow = DataTables("排产数据").Find("排产日期 = #" & dr("排产日期") & "# And 优先级 = \'" & dr("优先级") & "\' And 加工单元 = \'" & dc.Caption & "\'")
        If dr2 IsNot Nothing
            dr1(dc.name) = dr2("计划号")
        End If
    Next
Next