以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]新增字典 报错  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=174289)

--  作者:km007
--  发布时间:2022/1/10 6:16:00
--  [求助]新增字典 报错

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20220110061512.png
图片点击可在新窗口打开查看

Dim fzdx As String = “A;B;C”
DIM _fxtj_dt as datatable = datatables("表A")
DIM _fxtj_dt1 as datatable datatables("表B")
Dim fzdxs() As String = fzdx.split(";")
Dim zd As New Dictionary(Of String, Double)
Dim Arys As List(Of String()) = _fxtj_dt.GetValues(fzdx.Replace(";","|"))
\'--------------------------------------------------------------------------------------------------------------------------------------
For Each Ary As String() In Arys
    Dim xh As String = ""
    For i As Integer = 0 To fzdxs.Length - 1
        If xh > "" Then
            xh = xh & "|"
        End If
        xh = xh & Ary(i)
    Next
    For Each dc As DataCol In _fxtj_dt1.DataCols
        Dim j As String = xh & "*" & dc.name
        zd.Add(j,0)
    Next
Next

--  作者:有点蓝
--  发布时间:2022/1/10 8:49:00
--  
数据过多,内存溢出
--  作者:km007
--  发布时间:2022/1/10 10:17:00
--  
请问有何解决方法?
字典上限多少个?

--  作者:狐狸爸爸
--  发布时间:2022/1/10 10:20:00
--  
别用字典,直接用编号列和名称列,如果一定只要一列,可以将名称列隐藏,然后在DrawCell事件:

if e.Col = "编号" then
  e.text = e.row("名称")
end if

--  作者:有点蓝
--  发布时间:2022/1/10 10:22:00
--  
只能减少生成字典的数据。

这不在于字典上限是多少,因为foxtable是32位程序,目前只能使用大概1G的内存。打开窗口,加载表格数据、生成报表等等都会占用内存,A功能占用的内存多了,B功能就只能使用剩下的内存。不管多少个功能,总共能够使用的内存大概1G左右

--  作者:狐狸爸爸
--  发布时间:2022/1/10 10:23:00
--  
输入的话,可以动态生成,参考:


--  作者:km007
--  发布时间:2022/1/10 10:29:00
--  
我想将一个表的所有行和所有列添加到字典中
该如何操作?
例如 表A 列名:分类名称、合计1、合计2…合计300

那么我想将每行的 分类名称+每列列名 作为键,每列的合计作为值
字典 zd.add(每行分类名称 & 每列列名,对应的单元格值)
这种还有何方式可改?


--  作者:有点蓝
--  发布时间:2022/1/10 10:34:00
--  
每行主键+列名作为键
--  作者:km007
--  发布时间:2022/1/10 11:18:00
--  
以下是引用狐狸爸爸在2022/1/10 10:20:00的发言:
别用字典,直接用编号列和名称列,如果一定只要一列,可以将名称列隐藏,然后在DrawCell事件:

if e.Col = "编号" then
  e.text = e.row("名称")
end if

您这个并非我想要的,我是别有用途