在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 语句。