下面是
cpayinyuan提出的要求和文件
关于列表框功能的事例说明
1、假设系统中有两个表,其中工资表管理工资数据,员工表中保存的是员工的信息。
2、需要重点说明的是员工表,这个表的结构虽然简单,但却是一个目前的管理系统中非常流行非常经典的一种新形式的存储表结构,它能实现无级分层。即同一个表中既保存有层次信息,又保存有最底层的员工信息。在本表中,只有最底层的(即“是否末级”为 True的行,注意它不一定是第3层)的姓名才是真正的员工姓名,而其他的行记录,它只是一个员工类别的名,并不是真正的员工姓名,这就需要在使用本表的员工姓名时,只能选择“是否末级”为True的行,而不能选择为False的行,因为它是层次信息。采用这种表结构的好处是在同一个表中实现了对大量数据的分层管理,日常维护非常方便。
在实际的用户看到的员工列表窗口是这样的,打开员工列表窗口,默认情况只显示层次为1的职员(注意,层次为1的可能是一个层次,但也可能是一个真正的职员,若是否末级为True,则为职员,否则,是一个层次),当用户在某个数据行上双击(或点击打开下级按钮时),若这行数据的是否末级为False,则在窗口中打开当前行的所有下层(即查询“上层ID”等于当前行的“员工ID”的行),再双击,再打开下层,直到显示的是最下层为止(即是否末级为True).
或许您会说,这样的表结构这么复杂,有什么必要呢?在数据量很少的时候,看起来的确很麻烦,也没有多大用途,但在数据量非常大的时候,这种表结构就表现出非常大的灵活性,这么固定层次的管理方式要方便、灵活得多。目前一些比较出名的财务软件,ERP软件的基本信息的表结构,基本上都采取这种方式,或者与之类似。
2、我想实现的功能是:在窗口1中需要输入一个员工姓名时,通过按钮打开窗口2,窗口2中有一个大的列表框,列表框中缺省先显示员工表中层次为1的记录,当用户在某一行上双击时,若当前行的“是否末级”为True,则把当前行的员工姓名输入窗口1的姓名框中,如果当前行的“是否末级”为False,则重新刷新窗口2中的列表内容,把列表框中的内容刷新为刚才光标行的所有下层(即上层ID等于刚才光标行的员工ID的行),再双击,依次类推,直到选择到一个末级的姓名为止(即是否末级为True的一行记录),把姓名读入窗口1的姓名输入框中。
另外,在选定一个真正的员工之前,如果操作员点击“返回上层”按钮,则刷新列表框中的内容,刷新为当前显示记录的上一层(若原来显示的是第3层,则改为显示第2层,若若原来显示第2层,则改为显示第1层)。
在窗口2中,若操作员想增加一个新员工,点击“添加员工”按钮,自动打开“员工添加”窗口(员工表的窗口3),添加新员工,注意只允许用户输入“姓名”字段,员工ID,层次,上层ID,是否末级字段都是由系统根据添加的员工的位置自动产生的。添加完成后,返回到窗口2,继续选择员工。