以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于折叠表的导出问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=194657)

--  作者:刘效功天津
--  发布时间:2025/1/2 14:44:00
--  关于折叠表的导出问题
老师好,按照您的指导,关于数据导出问题都解决了,谢谢老师,下面就是导出命令的代码,但是还想实现更进一步的功能
问题描述:目的:由于调用的后台数据表,采用临时表调取数据   而这些表设计的时候本身就是采用折叠表的形式,想在导出表的时候,把折叠表全部展开,按折叠模式导出数据,我仿照帮助:编码导出折叠表数据:写了一段代码放进去,这么调试也不行,因为他是针对Table的,我昨天搞了一天也没搞定,老师帮帮忙,看看代码怎么写才能实现目的,具体写的代码在下面的代码中  谢谢老师!

Dim ckl As WinForm.CheckedListBox = e.Form.Controls("lbk")
Dim nms As New List(Of String)
For i As Integer = 0 To ckl.Items.count - 1 \'获取已经勾选的列
    If ckl.GetItemChecked(i) Then
        nms.Add(ckl.Items(i))
    End If
Next
If nms.Count = 0 Then
    MessageBox.Show("至少要选择一列", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
    Return
End If

Dim dlg As New SaveFileDialog
dlg.filter = "Excel文件|*.xls"
dlg.OverwritePrompt = True \'弹出覆盖警告
If dlg.ShowDialog = DialogResult.OK Then
    
    Dim cmd As New SQLCommand
    Dim Book As New XLS.Book()
    Dim Sheet As XLS.Sheet
    Dim dt As DataTable
    
    For Each nm As String In nms
        Sheet = Book.Sheets.Add(nm) \'增加一个工作表
        If e.Form.Controls("导出理论数据").Checked = True Then
            cmd.CommandText = "sele  ct 序号,科目编码,项目构成,单位,用量 as 理论用量 ,单价 as 理论单价,合价 as 理论合价,备注  from {" & nm & "}" \'该行代码不能加主键,否则出错
            
        Else If e.Form.Controls("导出投标数据").Checked = True Then
        cmd.CommandText = "sel  ect 序号, 科目编码, 项目构成,单位,报价调整1 as 投标用量,报价调整2 as 投标单价,报价调整3 as 投标合价  ,备注  from {" & nm & "}" \'该行代码不能加主键,否则出错   
        
        Else If e.Form.Controls("导出理论数据").Checked = False And e.Form.Controls("导出投标数据").Checked = False Then
            MessageBox.Show("请选择导出数据的形式:是导出理论数据   还是导出投标数据")
            
        End If
        dt = cmd.ExecuteReader()
        
        For c As Integer = 0 To dt.DataCols.Count - 1
            Sheet(0, c).Value = dt.DataCols(c).Name
        Next
        ‘填写数据代码,该代码没问题,但是屏蔽它,采用下面按折叠模式导出数据代码’
        \'        For r As Integer = 0 To dt.DataRows.Count - 1
        \'            For c As Integer = 0 To dt.DataCols.Count - 1
        \'                Sheet(r + 1, c).Value = dt.DataRows(r)(dt.DataCols(c).Name)
        \'            Next
        \'        Next
        \' 由于调用的后台数据表,采用临时表调取数据   在设计这些表的时候本身就是采用折叠表的形式,想在导出表的时候,把折叠表全部展开,按折叠模式导出数据
        Dim dtt As Table = Tables(" & nm & ")
        \'  Dim tns() As String = {"序号", "科目编码","项目构成", "单位", "用量" , "单价", "合价" , "备注"} \'要导出的列名,该代码取消,采用上面导出表的表结构代码(列名)
        For r As Integer = 0 To  dtt.Rows.Count - 1 \'填入数据
            Dim rw As Row = dtt.Rows(r)
            For c As Integer = 0 To dt.dataCols(c).Name.length - 1
                If dtt.GridTreeVisible Then \'如果处于折叠模式
                    
                    If dt.DataCols(c).Name(c) = "合价" Then
                        Sheet(r + 1, c).Value = rw.GetValue("合价")
                        
                    ElseIf dt.DataCols(c).Name(c) = dtt Then
                        Sheet(r + 1, c).Value = New String(" ", rw.Hierarchy * 2) & rw(dtt)
                    Else
                        Sheet(r + 1, c).Value = rw(dt.dataCols(c).Name(c))
                    End If
                Else
                    Sheet(r + 1, c).Value = rw(dt.dataCols(c).Name(c))
                End If
            Next
        Next
        
      
        
        \'打开工作簿
        Book.Save(dlg.FileName)
        Dim Proc As New Process
        Proc.File = dlg.FileName
        Proc.Start()
    Next
End If

--  作者:有点蓝
--  发布时间:2025/1/2 15:08:00
--  
只有table才支持折叠模式,临时表是不可能有折叠模式的。

考虑窗口里添加一个表控件,把临时表先绑定到表控件,然后给表控件开启折叠模式,再根据表控件导出数据

--  作者:刘效功天津
--  发布时间:2025/1/2 15:18:00
--  
老师好,我这个导出的表是在窗口中通过设置代码动态生成的表,存放在复选列表框中的,这些要导出的表是动态生成的,如果在窗口中设置表控件,是不是用窗口的Fill动态绑定表,再设置这个表控件的折叠模式,再导出这个表控件绑定的表,我这样理解对吗,谢谢老师
--  作者:有点蓝
--  发布时间:2025/1/2 15:25:00
--  
可以这样理解