以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数组中的顺序号如何提出来使用?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=126655)

--  作者:旭日生
--  发布时间:2018/10/26 7:59:00
--  数组中的顺序号如何提出来使用?

 

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


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


--  作者:有点蓝
--  发布时间:2018/10/26 9:13:00
--  
没看懂。上面说的“数组”具体指什么内容
--  作者:旭日生
--  发布时间:2018/10/26 14:28:00
--  
请看DataChanged事件中代码。因为第一列中部分需要使用序号排序,其它部分需要用拼音首字母排序。所以,我感觉需要使用数组解决。如果有其它方法解决,也可以的。

Select Case e.DataCol.Name
    Case "第一列"
        If e.DataRow.IsNull("第一列") Then
            e.DataRow("第一列缩写") = Nothing 
        Else
            e.DataRow("第一列缩写") = GetPinYin(e.DataRow("第一列"), 1)
        End If

        Dim Names() As String = {"甲甲","甲乙","甲丙","甲丁"}
        For i As Integer = 0 To Names.Length - 1
            e.DataRow("第一列代码") = Format(Array.Indexof(Names,Names(i)),"000") & "-" & e.DataRow("第一列缩写") 
\'如何编写类似上面这行代码,实现从上面names集合中,根据第一列填入的内容,如“甲甲”、“甲乙”、.......,自动写入对应的顺序号001、002呢?

\'            msgbox(Array.Indexof(Names,Names(i)))
        Next
End Select

[此贴子已经被作者于2018/10/26 14:34:05编辑过]

--  作者:有点蓝
--  发布时间:2018/10/26 14:33:00
--  
序号根据什么规则生成?按录入顺序?那直接使用_Identify排序不就行了
--  作者:旭日生
--  发布时间:2018/10/26 14:37:00
--  
这个序号只能由自己规定,放在一个集合中。一般是根据实际习惯排序的。如省委、省委办公厅、省政府、省政府办公厅等等。其它普通单位则根据拼音首字母排序即可。
--  作者:有点蓝
--  发布时间:2018/10/26 14:42:00
--  
序号只能由自己规定:有没有规律?如果没有,不可能通过代码生成。如果是通过拍脑袋决定的,只能手工录入
--  作者:旭日生
--  发布时间:2018/10/26 14:52:00
--  
规律是这样的:
1、已知顺序的单位事先放在一个集合中,由其在集合中的顺序号决定。这个规律由人提前决定,能提取出顺序号即可。但我不知道怎么根据第一列的具体内容(如“甲甲”、“甲乙”.....),提取集合中顺序号写入?
2、其它单位由拼音首字母决定。这首字母就是规律。这个好弄些。

--  作者:有点蓝
--  发布时间:2018/10/26 15:17:00
--  
这个规律由人提前决定 -- 这就不叫规律,就是拍脑袋决定的。

如果是按照第一列录入的顺序,就是直接使用_Identify排序

--  作者:旭日生
--  发布时间:2018/10/26 15:33:00
--  
一个人为规定的集合中顺序号,难道不能提取出来使用?之所以需要这样,是因为有的时候需要由用户自行添加,不得已为用户规定了这样的规律。否则,做成的表并不全面。
所以,我的设计思路是这样的:
1、如果第一列输入的内容在集合Names中,则提取出其在集合中的顺序号,填入”第一列代码“中。
2、如果第一列输入的内容不在集合Names中,则提取首字母填入”第一列代码“中。



--  作者:有点蓝
--  发布时间:2018/10/26 16:00:00
--  
Select Case e.DataCol.Name
    Case "第一列"
        If e.DataRow.IsNull("第一列") Then
            e.DataRow("第一列缩写") = Nothing
        Else
            e.DataRow("第一列缩写") = GetPinYin(e.DataRow("第一列"), 1)
        End If
        
        Dim Names() As String = {"甲甲","甲乙","甲丙","甲丁"}
        Dim idx As Integer = Array.Indexof(Names,e.DataRow("第一列"))
        e.DataRow("第一列代码") =  Format(idx,"000") & "-" & e.DataRow("第一列缩写")
End Select