以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  怎样让combolist由多到少排列?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=38974)

--  作者:jacksn
--  发布时间:2013/8/12 15:34:00
--  怎样让combolist由多到少排列?
form1有一个COMOBOX,我想让它的COMbolist选项来自列A的内容,但是出现次数多的排在前,少的在后,应该怎样编?求思路,谢谢!

请看例子:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:test-sort.zip

我希望窗口打开时那个checkcombobox能按列A的统计自动排列,拖拉机(4个)第一,飞机(3个)第二,坦克第(2个)三,小汽车(1个)最后。
[此贴子已经被作者于2013-8-12 16:38:07编辑过]

--  作者:Bin
--  发布时间:2013/8/12 15:39:00
--  
是可以设置排序的 http://www.foxtable.com/help/topics/1435.htm
--  作者:jacksn
--  发布时间:2013/8/12 16:11:00
--  
但是我要的是排序是根据列A本身内容出现次数的多少,例如“小汽车”这个内容出现了100次是最多,就排在第一位,“拖拉机”出现1次最少就排最后。如果sort列A的话,应该是按列A的名称(例如字母顺序)排列吧?
--  作者:Bin
--  发布时间:2013/8/12 16:13:00
--  
这样的话那你就要用代码统计了,你上个例子吧.
--  作者:shenyl0211
--  发布时间:2013/8/12 21:19:00
--  

我在表中是先对列A进行排序,再执行其它代码。不知道是否适合form


--  作者:有点甜
--  发布时间:2013/8/12 23:05:00
--  
代码

Dim cb1 As WinForm.ComboBox = e.Form.Controls("ComboBox1")

Dim dics As new SortedDictionary(Of Integer, String)
For Each data As String In  DataTables("表A").GetUniqueValues("", "第一列")
    Dim count As Integer = DataTables("表A").Compute("count(_Identify)", "第一列 = \'" & data & "\'")
    dics.Add(count, data)
Next

Dim x As Integer = 0
For Each i As Integer In dics.keys
    cb1.Items.Insert(0, dics(i))
    x += 1
Next

--  作者:jacksn
--  发布时间:2013/8/13 21:14:00
--  
非常感谢有点甜,成功了!
可是这个SortedDictionary是什么呢?帮助也没有啊?看来FT很多技术还没有写到帮助里面去啊
另外,如果有项目的数量是相同的又会怎样呢?——会产生“已经具有相同键的数目”的错误。
[此贴子已经被作者于2013-8-13 21:54:12编辑过]

--  作者:有点甜
--  发布时间:2013/8/13 21:32:00
--  
SortedDictionary 会把加入的key从小到大排序。这样就少了自己排序的麻烦。