在ASP.NET編程中,經常要做就是畫一個Form,然後堆砌我們的控制項,然後再重複的寫一些新增,編輯,更新的重複的工作.事實上,我們大部分時間在做的工作都一樣的工作,於是我們就是問:有沒有方法在客戶機上只要定製好介面[編輯aspx檔案,或編輯資源檔]上傳檔案,然後就可以實現我們要的功能,答案是肯定的.
依照我們的習慣,我們在做資料庫編輯的時候,無外乎就要擷取可以映射到資料表欄位的控制項的值,肯定的控制項是跟資料表欄位是對應的.不管是資料儲存和顯示時都需要.
問題1:如何映射?
1,要做到資料欄位跟控制項ID映射,常見的方法不外乎就是:在控制項ID上下功夫,在命名控制項ID時有欄位的影子,可通過資料表欄位找到控制項,形成映射;或者是通過資源檔約定映射關係,可直接擷取資料表字和控制項關係.
如:資料表的欄位名為:ID,Name,Title時,控制項可對應命名為:F_ID,F_Name,F_Title。
2,通XML資源檔定義。
如:Name表名欄位名,CtrlId表示控制項ID
<Mapper TableName="xS_Self_File" Cname="檔案管理">
<Field Name="ID" Type="C" Cname="單號" CtrlId="txt_Fid" CtrlType="Txt" KeyWord="Yes" Value="seq_self_file.NEXTVAL"/>
<Field Name="Title" Type="C" Cname="檔案標題" CtrlId="txt_Title" CtrlType="Txt" KeyWord="No"/>
<Field Name="Name" Type="C" Cname="檔案名稱" CtrlId="txt_FileName" CtrlType="Txt" KeyWord="No"/>
<Field Name="Path" Type="C" Cname="檔案路徑" CtrlId="txt_FilePath" CtrlType="Txt" KeyWord="No"/>
<Field Name="No" Type="C" Cname="檔案編號" CtrlId="txt_FileNo" CtrlType="Txt" KeyWord="No"/>
<Field Name="Source" Type="C" Cname="檔案來源" CtrlId="txt_FileSource" CtrlType="Txt" KeyWord="No"/>
<Field Name="Type" Type="C" Cname="檔案類型" CtrlId="dll_Type" CtrlType="Dll" KeyWord="No"/>
<Field Name="Stop" Type="C" Cname="是否停用" CtrlId="dll_Stop" CtrlType="Dll" KeyWord="No"/>
<Field Name="Content" Type="C" Cname="檔案說明" CtrlId="txt_Content" CtrlType="Txt" KeyWord="No"/>
<Field Name="addby" Type="C" Cname="操作時間" CtrlId="txt_addby" CtrlType="Txt" KeyWord="No"/>
<Field Name="addat" Type="C" Cname="操作人" CtrlId="txt_addat" CtrlType="Txt" KeyWord="No"/>
</Mapper>
問題2:如何擷取控制項?
1、 如果是通過控制項ID來影射時,可以通過遍曆[遞迴]控制項容器(如Page,HtmlForm)的子控制項,就看我們的控制項置身於什麼容器下.先搜尋到相關錄入控制項,然後對應資料表欄位。
/// <summary>
/// 擷取表欄位控制項,在自訂表格單中,控制項的命名是:F_欄位名
/// 必須定一個控m_Tablename控制項,用以儲存表名
/// </summary>
public Hashtable GetCtrlList()
{
Hashtable m_ht = new Hashtable();
foreach(Control m_Ctrl in this.Page.Controls)
{
foreach (Control m_tb in m_Ctrl.Controls)
{
// 如果有字控制項且不是使用者自訂控制項,則搜下層控制項!
if ( ( m_tb.HasControls() ) &&(!( m_tb is UserControl )))
{
GetCtrlList();
}
else
{
if ( m_tb.ID == null )
{
continue;
}
if ( m_tb.GetType().ToString() == "System.Web.UI.LiteralControl" ) // 如果是空格
{
continue;
}
if ( !m_tb.ID.StartsWith("F_")) // 如果是欄位
{
continue;
}
m_ht.Add(m_tb.ID.Replace("F_","").ToLower(),m_tb);
} // EndOf [ if ( ( tb.HasControls() ) &&(!( tb is UserControl )))]
} // End Of Loop For {tb}
} // End Of Loop For {Ctrl}
return m_ht;
}//End Of Function
2、如果是XML,我們就可通控制項ID去尋找控制項,Page的FindControl()去擷取控制項和值。
問題3:如何形成SQL語句?
可以根據二種影射關係,SQL的規則進行分拆,研究一下Insert ,Update,Delete,Select 語句。