请教思路,比如在组合框中放供应商,销售商等,是窗体初始化时就将供应商添加到组合框中,还是每次选择供应商时,弹出一个窗体让用户选择呀?
就是下列这个图这样,当然这只是举例说明.
比如:用户输入时要选择"供应商",所以将用到组合框控件,好象组合框控件还是比较方便的.(如果有更好的控件,请告我)
用户从组合框中选择后,我在程序中实际上用到的是供应商的编码.
现在有一个思路难住我了:那就是我如何设计,我能想到的思路有以下两种:
方法1.窗体启动时,初始化组合框,将现有的所有供应商添加到组合框中.(当然,数据库中一定有一个表来存放供应商编码与名称的对应表)
这样用户可以选择了.
但是这种方法有点问题,
问题A:如果窗体初始化时,某个供应商不存在,然后用户新增一个供应商.那么用户在本窗体的组合框中,是看不到这个供应商的,所以必须关了这个窗体再打开才行.
问题B:这个组合框用于显示数据时,有些历史数据中,供应商编码在当前组合框中并不存在,这就会导致组合框显示为空.
为了理解,我举例,假如当前组合框中有三条.001-供应商一,002-供应商二,003-供应商三.
但是我要显示的数据,供应商编码为:abc-老供应商,可是这个供应商目前不存在了,没有出现在组合框中.那么组合框中就显示为空,什么都没有,但是实际上应该显示"老供应商"方法2:
在窗体上不用组合框,用只读的文本框显示供应商的编码与名称.用户选择供应商时,单独打开一个窗体(这个窗体中有组合框,显示的是各个供应商),
这样做的好处是:解决了第一种方法的问题B,因为窗体中用只读文本框显示供应商.这样不管什么历史数据,都会显示,不会受制于当然已有的组合框.同时也解决了问题A,因为每次用户选择供应商时,都是新开一个窗体,从而保证了,新开窗体中组合框中的供应商信息是实时最新的.但是不好之处是:会增加很多窗体,一个入库单窗体中,每个类似的组合框都要对应一个相应的组合框.所以请大家说说,经典的处理方法是什么?大家平时是如何设计的,如何处理此类问题的.

解决方案 »

  1.   

    问题A:如果窗体初始化时,某个供应商不存在,然后用户新增一个供应商.那么用户在本窗体的组合框中,是看不到这个供应商的,所以必须关了这个窗体再打开才行.
    --------------------------------------------------------------------------------------------
    可以在用户新增供应商的时候再调用一次加载数据的代码,重新用最新数据填充组合框
    ,不一定非得在Form_Load事件中填充组合框。
      

  2.   

    可以在用户新增供应商的时候再调用一次加载数据的代码,重新用最新数据填充组合框 
    ,不一定非得在Form_Load事件中填充组合框。
    ----------------------------------------------
    有可能是另外一个用户新增的供应商.我的系统是c/s模式.如果这样,就无法刷新我自已窗体中的组合框,(当然了,可以用time控件定时刷新组合框,可是太没有必要了,也没有这样设计的)
    也可能就是自已新增的供应商.(新增供应商是打开一个新的窗体新增的,我想在那个窗体中重新初始化入库单窗体中的组合框,毕竟不是一个好的方法)
      

  3.   

    如果供应商确实很多,建议你用第二种方法,并且在打开的窗体中使用TreeView,前提是在数据库中对供应商事先有个分类(比如按地域或者按供货类型)
      

  4.   

    其实类似材料、供应商等界面最常用的数据字典,使用时关注的就是两点:速度、刷新。每次打开画面都从数据库读取列表时非常影响速度的,最好的做法是这样:
    ·用一个全局的 RecordSet 存放供应商,程序启动时读入;
    ·如果是打开窗体进行输入,那么就从全局 RecordSet 中选取有效的供应商填充 ComboBox;
    ·如果是打开窗体显示历史纪录,那么就按编码从全局 RecordSet 中定位单个(无论是否有效)供应商显示;
    ·如果用户发现某个需要的供应商不存在,按 F5,程序就重新到数据库读取,然后刷新列表。
    这样速度和刷新都兼顾了。
      

  5.   

    如果采用第一种方法,那么在数据量大的时候,可以采用输入编号来直接查找,这个可能得自己写个控件。
    第二种方法比较容易控制数据量大的显示和查找,比如用Treeview且做成多级目录。我是两种方法都有,一般数据量大就用方法二。至于类似的情况会用到多个窗体的话,如果数据通用性较强的话,你可以做成一个通用窗体,在调用时只要传递给它相应的参数。或者你把窗体上相关的信息做在一张表里,调用窗体时,只要指定某个主ID,窗体就能显示是供应商数据还是其他什么数据了。
      

  6.   

    大家不要回避问题B,问题B:这个组合框用于显示数据时,有些历史数据中,供应商编码在当前组合框中并不存在,这就会导致组合框显示为空. 
    为了理解,我举例,假如当前组合框中有三条.001-供应商一,002-供应商二,003-供应商三. 
    但是我要显示的数据,供应商编码为:abc-老供应商,可是这个供应商目前不存在了,没有出现在组合框中.那么组合框中就显示为空,什么都没有,但是实际上应该显示"老供应商" 

      

  7.   

    有些人感觉没明白楼主的意思,问题B产生的原因不在于数据从哪里取,而是因为使用了DropDownList的组合框.
    他这个入库单既可新建单据,又需要查询以前单据.
    实际上楼主思路很清晰,不需要别人指导编程了.只是让大家帮忙选择一下界面.
    方法1比较简洁方便,只要不存在问题B就可选用(问题A可以在供应商右面放一个刷新按钮).
    考虑到问题B,推荐选用方法2,实际上很多ERP等大型软件也是这么做的.