表單互相連結,專案使用,不一定符合不同專案
1.
開啟連結與被連結的表單,均可能需要修改,以下用IFITA30F為例說明
a.
宣告formCode & formNumber,在最外層(page_load之外) ,formCode可以直接指定
#region 連結用,避免formNumber抓到錯誤的上一頁面或下一頁面定義變數
string formCode = "IFITA30F";
string formNumber = string.Empty;
#endregion
b.
page_load,連結formNumber,所有用到this.FormNumber的地方都要修改為formNumber
注意生命週期Page_Init、Page_PreInit、Page_InitComplete,會在page_load前生成,我目前表單沒有,如果有用到的要注意
#region 連結用,避免formNumber抓到錯誤的上一頁面或下一頁面
if (!IsPostBack)
{
if (Request["FormNumber"] != null)
{
formNumber = Request["FormNumber"].ToString();
}
else
{
formNumber = this.FormNumber;
}
}
#endregion
c.
Gridview中,使用連結HyperLink,直接鍵結DB data 欄位IFFORMNUM
<asp:TemplateField HeaderText="表單單號">
<ItemTemplate>
<asp:HyperLink runat="server" ID="Hbtn" Text='<%# Bind("IFFORMNUM") %>' HeaderText="表單單號" ItemStyle-Width="150px" />
</ItemTemplate>
</asp:TemplateField>
RowDataBound裡面
foreach (Control c in e.Row.Cells[3].Controls)
{
if (c.GetType().Equals(typeof(HyperLink)))
{
HyperLink hl = (HyperLink)c;
string FormCode = "IFITA30F";
HyperLink Hbtn = (HyperLink)e.Row.Cells[3].FindControl("Hbtn");
string FormNumber = Hbtn.Text;
string COMPID = ftbCOMPID.Text;
string PARM = "FormCode=" + FormCode + "&FormNumber=" + FormNumber + "&COMPID=" + COMPID;
string TempURL = ResolveClientUrl("~/Apps/FORM/" + FormCode + "/" + FormCode + ".aspx?PGMID=VIEW&" + PARM + "&");
string URL = (DataManager.ResolveValidUrl(TempURL, "FCOM010"));
hl.Attributes.Add("onclick", "opened2=window.open('" + URL + "','資訊類請採購單','width=1000,height=700,scrollbars=yes',''); opened2.opener=null; setTimeout('opened2.close()', 180000); return false;");
hl.NavigateUrl = "#";
}
}
2.
注意事項(原表單和被開啟表單均須要查看)
A.
Gridview中其他控制項,在傳送表單時,會有值需要在page_load重抓一次的寫法
a.
請在gridview做RowDataBound時,將值丟給ViewState,例如ViewState["IFITA31FD80"]
b.
Page_load重抓值時,請用ViewState["IFITA31FD80"]傳回給dataset
B.
如果Gridview有使用temptable,例如Gridview1.Temptable => 注意開啟與被開啟表單的Gridview1名稱,如果重複,可能導致抓錯Temptable
a.
如果開啟同一formCode的表單,需要開啟自己本身的表單,盡可能避開使用Temptable,改用ViewState可以有相同作用但不會錯誤
b.
開啟不同formCode的表單,只要在命名Gridview時,加入formCode名稱就可以避開問題,例如fgvD1 => fgvIFITA30D1
C.
如果有使用,關號、支號等判斷,請注意,this.StepA or (B)=> 會抓到你正在處理的表單的關號,而非被開啟的表單視窗的關號
a.
簡單判斷為formNumber == this.FormNumber,如果相等,就是正在處理的表單,如果不相等,就是被開啟的表單
b.
如必須在被開啟的表單抓到關號,請從DB抓對應formCode & formNumber的關號支號,才會正確
沒有留言:
張貼留言