以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]求版主指点错误!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84048)

--  作者:lisheng1971
--  发布时间:2016/4/22 9:11:00
--  [求助]求版主指点错误!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:201608.xls

这是导入的电子表格

 

Dim Result As DialogResult
Result = MessageBox.Show("确定要导入吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    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()
        systemready = False
        Dim nms As New Dictionary(Of String, Integer)
        Dim dic As new Dictionary(Of DataRow, Integer)
        Dim ls As new List(Of Integer)
        For c As Integer = 0 To sheet.Cols.Count - 1
            If  DataTables("鉴定考核表").DataCols.Contains(sheet(1,c).Text) Then
                nms.Add(sheet(1,c).Text, c)
            End If
        Next
        For n As Integer = 2 To Sheet.Rows.Count -1
            Dim sfzhm As String = sheet(n,5).Text
            Dim jdpc As String = sheet(n,16).Text
            Dim dr As DataRow = DataTables("鉴定考核表").Find("身份证号码 = \'" & sfzhm & "\' And 鉴定批次 = \'" & jdpc & "\'")
            If dr Is Nothing Then
                ls.add(n)
            Else
                dic.Add(dr, n)
            End If
        Next
            For Each key As DataRow In dic.Keys
                For Each m As String In nms.keys
                    If DataTables("鉴定考核表").DataCols(m).IsBoolean Then
                        If Sheet(dic(key),nms(m)).Text = "" OrElse Sheet(dic(key),nms(m)).Text = "False" OrElse Sheet(dic(key),nms(m)).Value = 0 Then
                            key(m) = False
                        Else
                            key(m) = True
                        End If
                    Else If DataTables("鉴定考核表").DataCols(m).Expression > "" Then
                        \'表达式列
                    Else If DataTables("鉴定考核表").DataCols(m).IsNumeric Then
                        key(m) = val(Sheet(dic(key),nms(m)).Value)
                    Else
                        key(m) = Sheet(dic(key),nms(m)).Value
                    End If
                Next
            Next
        For Each l As Integer In ls
            Dim ndr As DataRow = DataTables("鉴定考核表").AddNew
            For Each m As String In nms.keys
                If DataTables("鉴定考核表").DataCols(m).IsBoolean Then
                    If Sheet(l,nms(m)).Text = "" OrElse Sheet(l,nms(m)).Text = "False" OrElse Sheet(l,nms(m)).Value = 0 Then
                        ndr (m) = False
                    Else
                        ndr (m) = True
                    End If
                Else If DataTables("鉴定考核表").DataCols(m).Expression > "" Then
                    \'表达式列
                Else If DataTables("鉴定考核表").DataCols(m).IsNumeric Then
                    ndr (m) = val(Sheet(l,nms(m)).Value)
                Else

                    ndr (m) = Sheet(l,nms(m)).Value
                End If
            Next
        Next
        Tables("鉴定考核表").ResumeRedraw()
        systemready = True
    End If
End If

以上是“导入”按钮代码,问题:导入后不报错,但会多出很多行空白行,且点“重置列”按钮后逻缉列会全部变成“FALSE”,烦请版主指点错误,谢谢先!!!!!!


--  作者:Hyphen
--  发布时间:2016/4/22 9:24:00
--  
......

For n As Integer = 2 To Sheet.Rows.Count -1
    Dim sfzhm As String = sheet(n,5).Text
    If sfzhm > "" Then \'排除空白行
        Dim jdpc As String = sheet(n,16).Text
        Dim dr As DataRow = DataTables("鉴定考核表").Find("身份证号码 = \'" & sfzhm & "\' And 鉴定批次 = \'" & jdpc & "\'")
        If dr Is Nothing Then
            ls.add(n)
        Else
            dic.Add(dr, n)
        End If
    End If
Next
......

--  作者:Hyphen
--  发布时间:2016/4/22 9:25:00
--  
重置列需要查看表事件或者表达式列都做了什么
--  作者:lisheng1971
--  发布时间:2016/4/22 9:40:00
--  

谢谢!!!!!!现在导入不会有空白行了,但重置列还是会全部“FALSE”,

以下是表Datacolchanged事件:

If e.DataRow("鉴定等级") = "技师" Then
    If e.DataRow("申报性质") = "正常申报" AndAlso e.DataRow("理论成绩") >=60 Then
        e.DataRow("实潜资格") = True
    Else If e.DataRow("申报性质") = "补考实操" Or e.DataRow("申报性质") = "补考潜能" Or e.DataRow("申报性质") = "补考两项" Or e.DataRow("申报性质") = "重新评审" Or e.DataRow("申报性质") = "破格评审" Then
        e.DataRow("实潜资格") = True
    Else
        e.DataRow("实潜资格") = False
    End If
    If e.DataRow("实潜资格") = True AndAlso e.DataRow("实操成绩") >=75 AndAlso e.DataRow("潜能成绩") >=60 Then
        e.DataRow("评审资格") = True
    Else If e.DataRow("实潜资格") = True AndAlso e.DataRow("申报性质") = "重新评审" Then
        e.DataRow("评审资格") = True
    Else If e.DataRow("实潜资格") = True AndAlso e.DataRow("申报性质") = "破格评审" Then
        e.DataRow("评审资格") = True
    Else
        e.DataRow("评审资格") = False
    End If
    If e.DataRow("申报性质") = "正常申报" AndAlso e.DataRow("实潜资格") = True Or e.DataRow("申报性质") = "补考两项" Then
        e.DataRow("考核项目") = "两项"
    Else If e.DataRow("申报性质") = "补考实操" Then
        e.DataRow("考核项目") = "实操"
    Else If e.DataRow("申报性质") = "补考潜能" Then
        e.DataRow("考核项目") = "潜能"
    Else If e.DataRow("申报性质") = "重新评审" Then
        e.DataRow("考核项目") = "重评"
    Else If e.DataRow("申报性质") = "破格评审" Then
        e.DataRow("考核项目") = "破格"
    Else
        e.DataRow("考核项目") = ""
    End If
End If


--  作者:大红袍
--  发布时间:2016/4/22 9:55:00
--  

你请加入msgbox查看哪里有问题。

 

或者直接说明判断逻辑。


--  作者:lisheng1971
--  发布时间:2016/4/22 11:22:00
--  

图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看版主,加了msgbox查看好象也没什么问题,代码的逻缉上应该是没什么问题,以前也用的是这段代码,只不过我改了一下“导出”按钮的模板,列数上增加了,然后“导入”按钮就出现在问题

 

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

这是“导出”按钮代码,在以前的基础上加了很多列;

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:鉴定考核.xls

这是模板,我找不出到底问题出在哪儿!烦请版主指点?


--  作者:大红袍
--  发布时间:2016/4/22 11:24:00
--  
 你不是说导入没问题,而是重置列有问题,去检查你dataColChanged的代码才对啊。
--  作者:lisheng1971
--  发布时间:2016/4/22 11:35:00
--  

图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看我就是查了dataColChanged的代码,没发现有什么问题,我把例子上传,您给看看!

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:鉴定管理系统.rar


--  作者:大红袍
--  发布时间:2016/4/22 11:48:00
--  
 请说明逻辑啊,全部是false,就说明你代码逻辑有问题啊。
--  作者:lisheng1971
--  发布时间:2016/4/22 13:07:00
--  

我终于找到问题所在:导入数据后,“申报性质”列不知为什么是空值,而我要导入的电子表格里“申报性质”列是有数据的,其它列又正常,这是为什么?烦请版主指点!

“导入”按钮代码如下: