FineUI 官方论坛

标题: 【已结贴】多级窗体涉及关联表的保存问题 [打印本页]

作者: alfly008    时间: 2014-4-12 15:09
标题: 【已结贴】多级窗体涉及关联表的保存问题
本帖最后由 alfly008 于 2014-4-13 22:25 编辑

有三级窗体(按钮触发),第一二级窗体用于绑定grid显示表数据。
第一级为配送单表; --Alloc
第二级为对应第一级的配送单表某个单的明细表,即有一个外键关联于配送单表 ----  AllocDet
在第三级窗体为配送明细表的新增操作,完成数据输入后保存时,因为AllocDet表关联了Alloc表的键值,所以需要给定个针对Alloc配送的配送ID,才能正确保存在AllocDet表中。
问题是,在第三级窗体如何获知Alloc表的主键(即AllocDet表的外键值呢)??

附注:
<第二级窗体由第一级窗体的edit编辑按钮打开,因为编辑了某行,所以可以取得这行Alloc表的数据,包括键值AllocID, 代码如下:>
在bindgrid()中实现如下(部分代码 ):      
  1. TSM.Model.CK_Alloc modelCK_Alloc = m_bllCK_Alloc.GetModel(id);

  2.             string searchText = modelCK_Alloc.CK_AllocID.ToString();
  3.             string strWhere = "CK_AllocID = '" + searchText + "'";

  4.             ds = m_bllCK_AllocDet.GetList(strWhere);

  5. 其中GetQueryIntValue函数如下:
  6.         protected int GetQueryIntValue(string queryKey)
  7.         {
  8.             int queryIntValue = -1;
  9.             try
  10.             {
  11.                 queryIntValue = Convert.ToInt32(Request.QueryString[queryKey]);
  12.             }
  13.             catch (Exception)
  14.             {
  15.                 // TODO
  16.             }

  17.             return queryIntValue;
  18.         }

复制代码
而第二级窗体中打开第三级窗体的代码如下:LoadData()
            btnNew1.OnClientClick = Window2.GetShowReference("~/CK_AllocDet_new.aspx", "新增配送货品");



就是不知道,如何传入Alloc表的键值(即AllocDet的外键)。

恳请各位高手,有以教我,谢谢。
另鄙人新手,刚刚从FineUI入手这个信息管理系统的,所以提问可能极不fn

作者: csalx    时间: 2014-4-12 17:16
1、在二级窗体设置个隐藏字段“hField”;
2、在二级窗体打开时利用该隐藏字段保存AllocID;
3、打开三级窗体时把这个隐藏字段的值读出放入URL的参数列表
如:btnNew1.OnClientClick = Window2.GetShowReference("~/CK_AllocDet_new.aspx?AllocID="+hField.Text, "新增配送货品");
作者: alfly008    时间: 2014-4-12 20:04
csalx 发表于 2014-4-12 17:16
1、在二级窗体设置个隐藏字段“hField”;
2、在二级窗体打开时利用该隐藏字段保存AllocID;
3、打开三级窗 ...

您好,万分感谢您的回复。细节上,我想再请教一下细节,实在因为是新手。
1. 二级窗体是在一级窗体上定义的windows,我在前台上添加HiddenField字段,编译无法认识??
2. 二级窗体的后台Alloc_edit代码里,在哪里保存AllocID字段呢,
3. 关联表数据保存是在三级窗AllocDet_new的后台代码里执行的,我怎么来用这个字段呢?
下面是详细代码段,烦请教我,拜谢拜谢。

第一级窗体前台代码中,定义的第二级窗体:
  1.                     <x:BoundField DataField="SumNum" SortField="SumNum" ExpandUnusedSpace="true" HeaderText="配送总数" />
  2.                      
  3.                     <x:WindowField ColumnID="editField" TextAlign="Center" Icon="Pencil" Text="编辑明细" ToolTip="编辑" WindowID="Window1"
  4.                         Title="编辑" DataIFrameUrlFields="CK_AllocInID" DataIFrameUrlFormatString="~/CK_AllocIn_edit.aspx?id={0}"
  5.                         Width="100px" />
  6.                     <x:LinkButtonField ColumnID="deleteField" TextAlign="Center" Icon="Delete" ToolTip="删除" ConfirmText="确定删除此记录?"
  7.                         ConfirmTarget="Top" CommandName="Delete" Width="50px" />
  8.                 </Columns>
  9.             </x:Grid>
  10.         </Items>
  11.     </x:Panel>
  12.     <x:Window ID="Window1" CloseAction="Hide" runat="server" IsModal="true" [color=Red]HiddenFields="hFields" [/color]Hidden="true" Target="Top"
  13.         EnableResize="true" EnableMaximize="true" EnableIFrame="true" IFrameUrl="about:blank"
  14.         Width="800px" Height="600px" OnClose="Window1_Close">
  15.     </x:Window>
复制代码


对应打开的二级窗体的前台如下<即绑定配送单下的配送明细> 虽然是编辑窗体,但是btnNew按钮打开的也是这个窗体:
  1.                     <x:BoundField DataField="CK_ProductSizeNo" SortField="CK_ProductSizeNo" Width="50px" HeaderText="尺码" />
  2.                     <x:BoundField DataField="CK_ProductNum" SortField="CK_ProductNum" ExpandUnusedSpace="true" HeaderText="数量" />

  3.                     <x:WindowField ColumnID="editField" TextAlign="Center" Icon="Pencil" ToolTip="编辑" WindowID="Window2"
  4.                         Title="编辑" DataIFrameUrlFields="CK_AllocInDetID" DataIFrameUrlFormatString="~/CK_AllocInDet_edit.aspx?id={0}"
  5.                         Width="50px" />
  6.                     <x:LinkButtonField ColumnID="deleteField" TextAlign="Center" Icon="Delete" ToolTip="删除" ConfirmText="确定删除此记录?"
  7.                         ConfirmTarget="Top" CommandName="Delete" Width="50px" />
  8.                 </Columns>
  9.             </x:Grid>
  10.         </Items>
  11.     </x:Panel>
  12.     <x:Window ID="Window2" CloseAction="Hide" runat="server" IsModal="true" Hidden="true" Target="Top"
  13.         EnableResize="true" EnableMaximize="true" EnableIFrame="true" IFrameUrl="about:blank"
  14.         Width="400px" Height="250px" OnClose="Window1_Close">
  15.     </x:Window>
复制代码

二级窗体的后台代码如下:
LoadData()//加载数据:
            btnNew2.OnClientClick = Window2.GetShowReference("~/CK_AllocInDet_new.aspx", "新增配送货品");
BindGrid() 绑定数据时,取到AllocID:
  1.             DataSet ds;

  2.             int id = GetQueryIntValue("id");
  3.             TSM.Model.CK_AllocIn modelCK_AllocIn = m_bllCK_AllocIn.GetModel(id);

  4.             string searchText = modelCK_AllocIn.CK_AllocInID.ToString();
  5.             string strWhere = "CK_AllocInID = '" + searchText + "'";

  6.             ds = m_bllCK_AllocInDet.GetList(strWhere);
复制代码


三级窗体的后台:
  1. btnSaveClose_Click()
  2.             TSM.Model.CK_AllocInDet modelCK_AllocInDet = new TSM.Model.CK_AllocInDet();

  3.             modelCK_AllocInDet.CK_ProductID = int.Parse(ddlPNo.SelectedValue);

  4.             modelCK_AllocInDet.CK_ProductSizeNo = tbxPSize.Text.Trim();
  5.             modelCK_AllocInDet.CK_ProductNum = int.Parse(tbxPNum.Text.Trim());
  6.             //modelCK_AllocInDet.CK_AllocInID = 2;//这个字段即我所想要的,            m_bllCK_AllocInDet.Add(modelCK_AllocInDet);
复制代码

作者: alfly008    时间: 2014-4-13 22:23
问题已经搞定,感谢2楼的 csalx 的友情指导。
在二级窗体bindgrid()最后,添加如下代码。其中hidId为前台定义的一个文本textBox,属性置为隐藏。
  1. string s_url;
  2.             s_url = "~/CK_BackInDet_new.aspx?id=" + hidId.Text;
  3.             //Response.Redirect(s_url);

  4.             btnNew2.OnClientClick = Window2.GetShowReference(s_url, "新增退仓货品");
复制代码

作者: erp8@live.cn    时间: 2014-4-15 08:45
最好上个效果图哈.
不然只有你自己看得懂
作者: alfly008    时间: 2014-4-15 22:35
不好意思,楼上版主哥,已经贴不了图片了。
55555~~~,我的20金呀,你不是没回复啥嘛。。。






欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4