none
请问ASP.NET中如实现主/明细表的新增与修改操作? RRS feed

  • 问题

  • 还是以入库单为例.

    一般主表:入库单号,日期,制单人,供应商等字段------用TextBox等控件

    明细有:入库单号,物料号,物料名,数量,单价-----------用GridView控件.

    用自带的绑定功能,我实现了主/明细的浏览与删除功能.

    但是我不知道新增与修改如何实现.   入库单要求同时保存,并且是在一个事务中.

    理想中的目标是:用户在TextBox中输入内容,并在GridView中输入各条明细内容(保存前,可以增删改明细),点保存按钮,同时保存.点取消,刚刚输入的全放弃.

    以新增来说,我可以新建一个aspx窗口,拖上相应的控件,但是GridView又不支持新增(是可以放一个辅助控件,但是不方便);因为主从,所以明细表不能在主表前保存.因为这时还没点保存按钮(保存全部),如果保存了明细表进数据库,主表此时还未存在,而且明细表中与主表关联的字段内容也未确定.

    说的有点乱,总之,就是请教一下,象入库单这种主/明细,的新增,修改,如何实现比较理想.

    2010年7月21日 0:39

全部回复

  • 可以在保存明细的时候先设置一个临时ID,保存主表数据的时候再更新一下

    我一般是这样,先添加主表记录,获取主表记录ID,然后显示明细录入界面,继续录入。如果点击取消,则把录入的所有记录都删除,包括刚才添加的主表记录

     

    2010年7月21日 2:10
  • 可以在保存明细的时候先设置一个临时ID,保存主表数据的时候再更新一下

    ==================================================

    这样就先把明细写入数据库了,如果取消还得删数据库啊~

    我的想法是,主细表的保存是一起写入数据库,要么取消放弃,都不写进数据库.

     

    我一般是这样,先添加主表记录,获取主表记录ID,然后显示明细录入界面,继续录入。如果点击取消,则把录入的所有记录都删除,包括刚才添加的主表记录

    =====================================================

    就是说在新增界面:要先保存主表后,明细的输入界面才显示出来,然后一条一条继续录入.

    附问一下:你的明细输入,是再新开一个窗口,输入;还是在GridView旁放控件录入.这一部理想中是,能直接在GridView中录入是最自然的,但是不知怎么实现.

    =====================================================

    感谢你的回答.  但是我最想要的是主明细同时保存,即保存前不写数据库,点取消就放弃,直到点保存,主明细才同时写进数据库.

    以前用VC自己用控制代码,或是用DELPHI绑定,实现这个同时保存十分容易,没想到初入ASP.NET,连这种功能都无法实现了,汗颜.................

    2010年7月21日 2:28
  • 明细输入我一般是上面输入界面,下面GridView,不用新开窗口的,添加一条,GridView就刷新一下,可以用ajax实现

    写在GridView的footer模板里应该也可以,不过我没试过。需要录入的数据太多,一般我都是单独做一个录入界面

    如果要实现你说的那种功能,可以先暂时把录入的明细数据保存在临时表里,不管怎么样都需要一个地方放明细数据吧,添加的时候用事务控制,保证主表记录和明细数据同时录入进去。

    同等待高手回答

    2010年7月21日 4:46
  • 声明一个或者多个List<T>类型的全局变量,增删改查都从这里面拿。

    最后用事务保存进数据库后,把它清空了不就行了?

    2010年7月21日 5:27
  • You can try ViewState......

    but it just works in the SAME PAGE......



    • 已编辑 DK. Da 2012年6月10日 0:52
    2010年7月21日 6:03
  • 我现在与你的方式差不多,反正不是放在GridView上边,就是下边,或是另开一个界面.

    在footer模板里,没有新增,只有修改模板,当然除非用三方控件.

    明细用细时表,哪么Gridview绑定到临时表上.这解决了最终数据的同时保存问题.不过还是有一个问题要解决,GridView明细的输入,还是不能直接在里边输,还得搞一套(可能是几个TextBox控件)用于输入明细,还是不直观.

    2010年7月21日 6:55
  • 声明一个泛型的Rows也好,tables也好,List也好,解决了临时存数据的问题.但是在界面层面,一般明细是一个GridView类控件,由用户在里边输入.

    现在假设我有了全局List用来存数据.再把list绑定到GridView上.这时的问题与上边的方案一样.((GridView明细的输入,还是不能直接在里边输,还得搞一套(可能是几个TextBox控件)用于输入明细,还是不直观.))

    而且这样做还多引出一点麻烦,即手工绑定后,数据绑定控件自带的功全要自己在事件中去手工编码实现.

     

     

     

    2010年7月21日 7:04
  • ViewState作为页之间传递的一种技术与我之上的关键问题无关.

     

    2010年7月21日 7:09
  • 有關,

    關聯之處在於「GridView又不支持新增」

    而且重點就在於你要如何在入數據庫之前保存主表跟明細表...

    此外回問一點, ViewState 是做為頁間傳遞資訊的技術嗎???

    我記得是不能傳遞到其他頁的吧???




    • 已编辑 DK. Da 2012年6月10日 0:52
    2010年7月21日 7:37
  • 有關,

    關聯之處在於

    而且重點就在於你要如何在入數據庫之前保存主表跟明細表...

    ====================================

    「入数据库前保存主表已经可以,关键是明细表.

     再一个GridView中用ViewState的保存是控件封装上实现刷新之后数据保存的.用代码实现GridView对象保存进去,是先要进行流化.

    你提到用ViewState来实现来实现我提出来的需求,具体如何做呢,请赐教

     

    此外回問一點, ViewState 是做為頁間傳遞資訊的技術嗎???

    我記得是不能傳遞到其他頁的吧???

    ==========================================

    是一种特殊的页间传递,只能在本页与下一次,下下一次...的本页之间传递.

     

    2010年7月21日 9:05
  • 煩請詳閱以下幾篇文,小弟不多做解說...

    在 ASP.NET ViewState 中尋寶

    ASP.NET's GridView資料綁定方法



    • 已编辑 DK. Da 2012年6月10日 0:52
    2010年7月21日 14:03
  • 这几篇文章看下来都是我知道的东西,于我的问题无益。

    还期待高手出现。。。

    2010年7月23日 15:18
  • 利用javascript吧。

    然后拼xml串,dataset更新到数据库

    这个是N年前的方法,更新主子表的。客户端利用js,add,edit。。。参照等

     

     


    2011年4月1日 3:35