以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]索引超出范围  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=47442)

--  作者:zouxinhao
--  发布时间:2014/3/10 16:10:00
--  [求助]索引超出范围
Dim ydbm As WinForm.TextBox = Forms("移动信息").Controls("移动编码")
Dim ddbm As WinForm.TextBox = Forms("移动信息").Controls("订单编码")
Dim adddr As DataRow =DataTables("移动主表").AddNew
Dim bz As WinForm.TextBox = Forms("移动信息").Controls("备注")
Dim kclx As WinForm.ComboBox = Forms("移动信息").Controls("库存类型")
Dim gc As WinForm.ComboBox = Forms("移动信息").Controls("工厂")
Dim kcd As WinForm.ComboBox = Forms("移动信息").Controls("库存地")
Dim pjh As WinForm.TextBox = Forms("移动信息").Controls("票据号")
Dim pjlx As WinForm.TextBox = Forms("移动信息").Controls("票据类型")
Dim ydlx As WinForm.ComboBox = Forms("移动信息").Controls("移动类型")
Dim dr As DataRow
adddr("票据号")=pjh.text
adddr("票据类型")=pjlx.text
adddr("移动类型")=ydlx.text
adddr("备注")=bz.text
Dim dd As New List(Of String)
dd.add("生产订单")
dd.add("采购订单")
dd.add("委外订单")
dd.add("销售订单")
Dim str As String
Dim st As String
Select Case ydbm.text
    Case "160"
        str="销售订单"
        st="订单产品表"
    Case "161"
        str="销售订单"
        st="订单产品表"
    Case "162"
        str="采购订单"
        st="采购订单子表"
    Case "163"
        str="采购订单"
        st="采购订单子表"
    Case "164"
        str="委外订单"
        st="委外订单子表"
    Case "165"
        str="委外订单"
        st="委外订单子表"
    Case "166"
        str="委外订单"
        st="委外订单主表"
    Case "167"
        str="委外订单"
        st="委外订单主表"
    Case "168"
        str="生产订单"
        st="生产订单子表"
    Case "169"
        str="生产订单"
        st="生产订单子表"
    Case "170"
        str="生产订单"
        st="生产订单主表"
    Case "171"
        str="生产订单"
        st="生产订单主表"
End Select
dd.Remove(str)
If dd.Contains("销售订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("采购订单","委外订单","生产订单")
End If
If dd.Contains("采购订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("销售订单","委外订单","生产订单")
End If
If dd.Contains("委外订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("采购订单","销售订单","生产订单")
End If
If dd.Contains("生产订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("采购订单","委外订单","销售订单")
End If
Dim bs As DataRow = DataTables("移动类型").Find("移动编码=\'" & ydbm.Text & "\'")
For Each dr  In DataTables(st).Select(str & "号=\'" & ddbm.Text & "\'")
    Dim r As Row = Tables("移动主表.移动子表").AddNew
    r("物料编码")=dr("物料编码")
    r("库存状态")= kclx.Text
    r("移动数量")=dr("订单数量")-dr("入库数量")
    r("单价")=dr("单价")
    r("币种")="RMB"
    r(str)=ddbm.text
    r("工厂")=gc.Text
    r("库存地")=kcd.Text
   r("标识")=bs("移动标识")
Next
--  作者:zouxinhao
--  发布时间:2014/3/10 16:11:00
--  
以上代码说索引超出范围是什么意思?
--  作者:Bin
--  发布时间:2014/3/10 16:14:00
--  
建议您用这个方法:
http://www.foxtable.com/help/topics/1485.htm

先找出是哪一行出错,然后分析原因,搞不定,贴出代码,并告诉我们运行到哪一行出错,以及错误提示。

--  作者:zouxinhao
--  发布时间:2014/3/10 16:16:00
--  
.NET Framework 版本:2.0.50727.3655
Foxtable 版本:2014.3.7.1
错误所在事件:窗口,过帐界面,AfterLoad
详细错误信息:
索引超出范围。必须为非负值并小于集合大小。
参数名: index
这是错误信息
--  作者:Bin
--  发布时间:2014/3/10 16:17:00
--  
找出错误位置先.
--  作者:zouxinhao
--  发布时间:2014/3/10 16:29:00
--  
If dd.Contains("销售订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("采购订单","委外订单","生产订单")
End If
If dd.Contains("采购订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("销售订单","委外订单","生产订单")
End If
If dd.Contains("委外订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("采购订单","销售订单","生产订单")
End If
If dd.Contains("生产订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("采购订单","委外订单","销售订单")
End If

--  作者:zouxinhao
--  发布时间:2014/3/10 16:30:00
--  
这里出问题了
--  作者:Bin
--  发布时间:2014/3/10 16:35:00
--  
这个不应该会出错啊,上个例子我分析分析看看.
--  作者:Bin
--  发布时间:2014/3/10 16:35:00
--  
你再精确定位一下 看看到底是哪一句出错
--  作者:zouxinhao
--  发布时间:2014/3/10 16:41:00
--  

If dd.Contains("销售订单")=False Then
    Tables("移动主表.移动子表").Cols.Remove("采购订单","委外订单","生产订单")

End If

运行这句代码时出错了