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()中实现如下(部分代码 ):
TSM.Model.CK_Alloc modelCK_Alloc = m_bllCK_Alloc.GetModel(id);
string searchText = modelCK_Alloc.CK_AllocID.ToString();
string strWhere = "CK_AllocID = '" + searchText + "'";
ds = m_bllCK_AllocDet.GetList(strWhere);
其中GetQueryIntValue函数如下:
protected int GetQueryIntValue(string queryKey)
{
int queryIntValue = -1;
try
{
queryIntValue = Convert.ToInt32(Request.QueryString[queryKey]);
}
catch (Exception)
{
// TODO
}
return queryIntValue;
}
复制代码
而第二级窗体中打开第三级窗体的代码如下: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的后台代码里执行的,我怎么来用这个字段呢?
下面是详细代码段,烦请教我,拜谢拜谢。
第一级窗体前台代码中,定义的第二级窗体:
<x:BoundField DataField="SumNum" SortField="SumNum" ExpandUnusedSpace="true" HeaderText="配送总数" />
<x:WindowField ColumnID="editField" TextAlign="Center" Icon="Pencil" Text="编辑明细" ToolTip="编辑" WindowID="Window1"
Title="编辑" DataIFrameUrlFields="CK_AllocInID" DataIFrameUrlFormatString="~/CK_AllocIn_edit.aspx?id={0}"
Width="100px" />
<x:LinkButtonField ColumnID="deleteField" TextAlign="Center" Icon="Delete" ToolTip="删除" ConfirmText="确定删除此记录?"
ConfirmTarget="Top" CommandName="Delete" Width="50px" />
</Columns>
</x:Grid>
</Items>
</x:Panel>
<x:Window ID="Window1" CloseAction="Hide" runat="server" IsModal="true" [color=Red]HiddenFields="hFields" [/color]Hidden="true" Target="Top"
EnableResize="true" EnableMaximize="true" EnableIFrame="true" IFrameUrl="about:blank"
Width="800px" Height="600px" OnClose="Window1_Close">
</x:Window>
复制代码
对应打开的二级窗体的前台如下<即绑定配送单下的配送明细> 虽然是编辑窗体,但是btnNew按钮打开的也是这个窗体:
<x:BoundField DataField="CK_ProductSizeNo" SortField="CK_ProductSizeNo" Width="50px" HeaderText="尺码" />
<x:BoundField DataField="CK_ProductNum" SortField="CK_ProductNum" ExpandUnusedSpace="true" HeaderText="数量" />
<x:WindowField ColumnID="editField" TextAlign="Center" Icon="Pencil" ToolTip="编辑" WindowID="Window2"
Title="编辑" DataIFrameUrlFields="CK_AllocInDetID" DataIFrameUrlFormatString="~/CK_AllocInDet_edit.aspx?id={0}"
Width="50px" />
<x:LinkButtonField ColumnID="deleteField" TextAlign="Center" Icon="Delete" ToolTip="删除" ConfirmText="确定删除此记录?"
ConfirmTarget="Top" CommandName="Delete" Width="50px" />
</Columns>
</x:Grid>
</Items>
</x:Panel>
<x:Window ID="Window2" CloseAction="Hide" runat="server" IsModal="true" Hidden="true" Target="Top"
EnableResize="true" EnableMaximize="true" EnableIFrame="true" IFrameUrl="about:blank"
Width="400px" Height="250px" OnClose="Window1_Close">
</x:Window>
复制代码
二级窗体的后台代码如下:
LoadData()//加载数据:
btnNew2.OnClientClick = Window2.GetShowReference("~/CK_AllocInDet_new.aspx", "新增配送货品");
BindGrid() 绑定数据时,取到AllocID:
DataSet ds;
int id = GetQueryIntValue("id");
TSM.Model.CK_AllocIn modelCK_AllocIn = m_bllCK_AllocIn.GetModel(id);
string searchText = modelCK_AllocIn.CK_AllocInID.ToString();
string strWhere = "CK_AllocInID = '" + searchText + "'";
ds = m_bllCK_AllocInDet.GetList(strWhere);
复制代码
三级窗体的后台:
btnSaveClose_Click()
TSM.Model.CK_AllocInDet modelCK_AllocInDet = new TSM.Model.CK_AllocInDet();
modelCK_AllocInDet.CK_ProductID = int.Parse(ddlPNo.SelectedValue);
modelCK_AllocInDet.CK_ProductSizeNo = tbxPSize.Text.Trim();
modelCK_AllocInDet.CK_ProductNum = int.Parse(tbxPNum.Text.Trim());
//modelCK_AllocInDet.CK_AllocInID = 2;//这个字段即我所想要的, m_bllCK_AllocInDet.Add(modelCK_AllocInDet);
复制代码
作者:
alfly008
时间:
2014-4-13 22:23
问题已经搞定,感谢2楼的 csalx 的友情指导。
在二级窗体bindgrid()最后,添加如下代码。其中hidId为前台定义的一个文本textBox,属性置为隐藏。
string s_url;
s_url = "~/CK_BackInDet_new.aspx?id=" + hidId.Text;
//Response.Redirect(s_url);
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