以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  问题求助!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128448)

--  作者:lisheng1971
--  发布时间:2018/12/7 11:17:00
--  问题求助!
昨天的贴子不知怎么回事,找不到了!继昨天问题求助:
1、有表1、表2,副表A、B、(都绑定的是表1);
2、有页面合集1,Page1中有表1、Page2中有副表A、page3中有副表B、page4中有表2;
3、“导入”按钮1,现在代码可实现在Page1时导入数据进表1,在Page4时导入数据进表2;(两段代码除表名不一样,其它都一样!)
现在问题:1、昨天版主说可将代码公共部分写在外面,这个我没搞明白;
              2、在Page2、3时,如想导入按钮起作用,代码量会很大,能否精减?
附部分代码:
Dim tb As WinForm.TabControl = e.Form.Controls("TabControl1")
Dim pg As WinForm.TabPage = tb.SelectedPage
If tb.SelectedPage.Text = "鉴定信息汇总" Then
    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
                Dim str As String = sheet(1,c).Text.Replace(" ", "")
                If  DataTables("鉴定管理表").DataCols.Contains(str) Then
                    nms.Add(str, c)
                End If
            Next
            For n As Integer = 2 To Sheet.Rows.Count -1
                Dim jdpc As String = sheet(n,6).Text
                Dim sfzhm As String = sheet(n,9).Text
                Dim dr As DataRow = DataTables("鉴定管理表").Find("鉴定批次 = \'" & jdpc & "\' And 身份证号码 = \'" & sfzhm & "\'")
                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


--  作者:lisheng1971
--  发布时间:2018/12/7 11:18:00
--  
这里:鉴定信息汇总即Page1,鉴定管理表即表1
--  作者:有点甜
--  发布时间:2018/12/7 11:43:00
--  

Dim tb As WinForm.TabControl = e.Form.Controls("TabControl1")
Dim pg As WinForm.TabPage = tb.SelectedPage
Dim 表 As String = ""
If tb.SelectedPage.Text = "鉴定信息汇总" Then
    表 = "鉴定管理表"
End If

 

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
            Dim str As String = sheet(1,c).Text.Replace(" ", "")
            If  DataTables(表).DataCols.Contains(str) Then
                nms.Add(str, c)
            End If
        Next
        For n As Integer = 2 To Sheet.Rows.Count -1
            Dim jdpc As String = sheet(n,6).Text
            Dim sfzhm As String = sheet(n,9).Text
            Dim dr As DataRow = DataTables(表).Find("鉴定批次 = \'" & jdpc & "\' And 身份证号码 = \'" & sfzhm & "\'")
            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


--  作者:lisheng1971
--  发布时间:2018/12/7 16:29:00
--  

Dim tb As WinForm.TabControl = e.Form.Controls("TabControl1")
Dim pg As WinForm.TabPage = tb.SelectedPage
Dim 表 As String = ""
If tb.SelectedPage.Text = "鉴定信息汇总" Then
    表 = "鉴定管理表"
ElseIf tb.SelectedPage.Text = "证书编号汇总" Then
    表 = "证书编号表"
End If

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)

        ...................................................

 


图片点击可在新窗口打开查看此主题相关图片如下:1544171473(1).png
图片点击可在新窗口打开查看

--  作者:lisheng1971
--  发布时间:2018/12/7 16:31:00
--  
为什么会报错?是我代码写错了吗?
--  作者:有点甜
--  发布时间:2018/12/7 16:41:00
--  
msgbox(tb.SelectedPage.Text) 看弹出什么?
--  作者:lisheng1971
--  发布时间:2018/12/7 19:06:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:1544179876(1).png
图片点击可在新窗口打开查看

我找到具体原因了,是我在页面的名称上打错了字,引起报错!图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看

版主:想问下为什么我有数据增减,比如节点是“批次”,我增加或减少1批,但目录树节点上不会随之增减,而是要我关闭窗口再重新打开才能看到?

--  作者:lisheng1971
--  发布时间:2018/12/7 19:13:00
--  
还有就是在目录树上我开启“显示复选框”后该怎么才能让它作用,看帮助和示例,貌似跟我现在的代码完全是两回事,我想依葫芦画瓢都没办法;
目录树控制的表的2个,它们有共同的列:“批次”、“身份证号码”,目录树的节点也是这2个。

请版主指点!

--  作者:有点蓝
--  发布时间:2018/12/7 20:40:00
--  
回7楼,要重新生成目录树

回8楼,截图或者上传具体实例说明要什么效果


--  作者:lisheng1971
--  发布时间:2018/12/7 20:56:00
--  
如图:1、如何做到随意勾1批次或多批次进行查询(现在只能双击其中的1个批次进行查询);
   2、如何做到随意勾1批次或多批次进行删除(现在只能双击想删除的批次后,在页面中的表里选中全部数据进行删除);
   3、版主所说的重新生成目录树,没搞明白;我按2中的方法删除数据后,目录树不会变化,被删除的批次仍然能看到。
Dim Filter As String
If e.node.Text = "加载所有数据" Then
    Filter = ""
Else
    Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的DataRow
    Select Case e.Node.Level
        Case 0
            Filter ="[鉴定批次] = \'" & dr("鉴定批次") & "\'"
        Case 1
            Filter ="[鉴定批次] = \'" & dr("鉴定批次") & "\' And [工作单位] = \'" & dr("工作单位") & "\'"
    End Select
End If
这是目录树部分代码