以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  按钮代码问题求版主指点!!!!!!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=72346)

--  作者:lisheng7177
--  发布时间:2015/7/28 17:57:00
--  按钮代码问题求版主指点!!!!!!

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2014.11.11.1
错误所在事件:窗口,理论考试,导入,Click
详细错误信息:
输入字符串的格式不正确。不能在 理论成绩 列中存储 <>。所需类型是 Int32。
输入字符串的格式不正确。

“导入按钮”代码:

Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls"
dlg.MultiSelect = True \'允许选择多个文件
If dlg.ShowDialog =DialogResult.OK Then
    Dim Book As New XLS.Book(dlg.FileName)
   
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("理论考试表").ResumeRedraw()
    Tables("理论考试表").StopRedraw()
    Dim nms() As String = {"工作单位","县公司","姓名","性别","身份证号码","文化程度","鉴定等级","申报鉴定工种","鉴定批次","申报性质","是否合格","理论考否","考试性质","年月","场次","考场","座位号","考试时间","考试地点","理论准考证号码","理论成绩","备注","照片"}
    For n As Integer = 1 To Sheet.Rows.Count -1
        Dim sfzhm As String = sheet(n,4).Text
        Dim dr As DataRow = DataTables("理论考试表").Find("身份证号码 = \'" & sfzhm & "\'")
        If dr Is Nothing Then \'如果不存在同编号的订单
            dr =  DataTables("理论考试表").AddNew()
        End If
        For m As Integer = 0 To nms.Length - 1
            If DataTables("理论考试表").DataCols(nms(m)).IsBoolean Then
                If Sheet(n,m).Value = 0 Then
                    dr(nms(m)) = False
                Else
                    dr(nms(m)) = True
                End If
            Else If DataTables("理论考试表").DataCols(nms(m)).Expression > "" Then
                \'表达式列
            Else
                dr(nms(m)) = Sheet(n,m).Value
            End If
        Next
    Next
    Tables("理论考试表").ResumeRedraw()
End If

 

“导出按钮”代码:

Dim dlg As New SaveFileDialog \'定义一个新的SaveFileDialog
dlg.Filter= "excel|*.xls" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    MessageBox.Show("你要保存为:" & dlg.FileName,"提示") \'提示用户选择的文件
    Dim Book As New XLS.Book(ProjectPath & "Attachments\\理论考试.xls")
    Book.Build() \'生成细节区
    Book.Save(dlg.FileName) \'保存工作簿
    MessageBox.Show("保存成功" )
   
End If

 

现在的问题:由“导出”按钮导出表格后,在空白列填入相应的数据,然后再点击“导入”按钮导入,就出现最上面的错误信息,这是什么问题?

另外,如果表中如果只有一个批次的人员情况下,就不报错,能顺利导入!!!!!!!

求版主择时教!!!!!!!


--  作者:大红袍
--  发布时间:2015/7/28 18:31:00
--  
If DataTables("理论考试表").DataCols(nms(m)).IsBoolean Then
    If Sheet(n,m).Value = 0 Then
        dr(nms(m)) = False
    Else
        dr(nms(m)) = True
    End If
Else If DataTables("理论考试表").DataCols(nms(m)).Expression > "" Then
    \'表达式列
Else If DataTables("理论考试表").DataCols(nms(m)).IsNumeric Then
    dr(nms(m)) = val(Sheet(n,m).Value)

Else
    dr(nms(m)) = Sheet(n,m).Value
End If

--  作者:lisheng7177
--  发布时间:2015/7/28 18:33:00
--  
谢谢版主!这段代码我没看明白,是完全替代原代码还是加在最后?
--  作者:lisheng7177
--  发布时间:2015/7/28 18:35:00
--  
图片点击可在新窗口打开查看不好意思,看出点道道了,应该是修改其中一部分代码!
--  作者:lisheng7177
--  发布时间:2015/7/28 20:20:00
--  

版主:

 For n As Integer = 1 To Sheet.Rows.Count -1
Dim sfzhm As String = sheet(n,4).Text
Dim dr As DataRow = DataTables("理论考试表").Find("身份证号码 = \'" & sfzhm & "\'")
If dr Is Nothing Then \'如果不存在同编号的订单
dr = DataTables("理论考试表").AddNew()
End If

 

标红的那句代码,是否可以加上一个条件,以避免上一批次没考过的考生的历史考试信息,在这次安排考试时被覆盖掉?比如加上“鉴定批次”这样的条件?

我依葫芦画瓢写了句代代码,但总报错,烦请版主指教一下!!!!!!谢谢先!!!!!!


 For n As Integer = 1 To Sheet.Rows.Count -1
Dim sfzhm As String = sheet(n,4).Text
Dim dr As DataRow = DataTables("理论考试表").Find("身份证号码 = \'" & sfzhm & "\' And 鉴定批次 = \'" & jdpc & "\'")

If dr Is Nothing Then \'如果不存在同编号的订单
dr = DataTables("理论考试表").AddNew()
End If

这是我修改的代码


--  作者:大红袍
--  发布时间:2015/7/28 20:27:00
--  

位置自己调整

 

For n As Integer = 1 To Sheet.Rows.Count -1
    Dim sfzhm As String = sheet(n,4).Text
    Dim jdpc As String = sheet(n,5).Text
    Dim dr As DataRow = DataTables("理论考试表").Find("身份证号码 = \'" & sfzhm & "\' And 鉴定批次 = \'" & jdpc & "\'")
   
    If dr Is Nothing Then \'如果不存在同编号的订单
        dr = DataTables("理论考试表").AddNew()
    End If
   


--  作者:lisheng7177
--  发布时间:2015/7/28 20:30:00
--  

图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看

刚才还在想是不是这样的原因导致的报错,版主这句代码让我肯定了自己的想法,还是基础太差了,人也笨了些。

 

谢谢版主耐心指教!!!!!!


--  作者:lisheng7177
--  发布时间:2015/7/28 20:57:00
--  

版主,再次求教:

    现在问题是-我刚才修改完代码后,做了导入试验,发现导入的信息是全部新建的,而不是在原有的基础上进行填空式导入,而且时间很长。

比如,原来表里的某批次有100人,考试的场次、座位号等信息都空白,我把这100人的信息导出后,然后把考试的场次、座位号等加进去后,再导入,这时这批次不再是100人,而是200人,每人都有两行信息,这是为什么?


--  作者:大红袍
--  发布时间:2015/7/28 21:04:00
--  
 6楼的红色代码改一下位置啊,不一定是第5列啊。
--  作者:大红袍
--  发布时间:2015/7/28 21:04:00
--  

慢的问题,参考今天给你做的例子,查找和赋值分开来做啊。