动态的加载控件

    技术2022-05-11  93

         在动态加载网页控件时可以动态的加载相关的控件如实现网页整个模块时,模块的详细信息为:

    public class ModuleDetails  {  public int          ModuleId;  public int          TabId;  public int          ModuleOrder;  public int          ModuleKindId;  public String       PaneName;  public String       ModuleName;  public String       ModulePath; }

    public class TabAddModuleSettings {  public ArrayList DesktopTabs = new ArrayList();  public TabDetails ActiveTabs = new TabDetails();

      public TabAddModuleSettings(int TabId,int TabIndex)  {   //定义数据库的Connection and Command    SqlConnection myConnection = new SqlConnection(DBConnectionString.ConnectionString);   SqlCommand myCommand = new SqlCommand("Pr_GetTabModuleDetails",myConnection);

       //定义访问数据库的方式为存储过程   myCommand.CommandType = CommandType.StoredProcedure;

       //添加储存过程的参数   SqlParameter parameterTabId = new SqlParameter("@TabID",SqlDbType.Int,4);   parameterTabId.Value = TabId;   myCommand.Parameters.Add(parameterTabId);

       SqlDataReader dr = null;

       try   {    //打开数据库的连接    myConnection.Open();   }   catch(Exception ex)   {    throw new MyException("10001","数据库连接失败!",ex);   }

       try   {    //执行数据库的存储过程(访问数据库)    dr = myCommand.ExecuteReader();   }   catch(Exception ex)   {    throw new MyException("10001",ex.Message,ex);   }

         if(TabId == 0)   {    ActiveTabs.TabId = ((TabDetails)DesktopTabs[0]).TabId;   }   else   {    ActiveTabs.TabId = TabId;   }

       //读取下一条记录   dr.NextResult();

       //读取该页面(表)的模块信息   while(dr.Read())   {    ModuleDetails moduleDetails = new ModuleDetails();    moduleDetails.ModuleId      = Int32.Parse(dr["ModuleID"].ToString());    moduleDetails.ModuleKindId  = Int32.Parse(dr["ModuleKindID"].ToString());    moduleDetails.TabId         = Int32.Parse(dr["TabID"].ToString());    moduleDetails.ModuleName    = dr["ModuleName"].ToString();    moduleDetails.ModuleOrder   = Int32.Parse(dr["ModuleOrder"].ToString());    moduleDetails.ModulePath    = dr["ModulePath"].ToString();    moduleDetails.PaneName      = dr["PanelName"].ToString();

        ActiveTabs.Modules.Add(moduleDetails);   }

       ActiveTabs.TabIndex = TabIndex;

       dr.Close();   myConnection.Close();  } }

    存储过程为

    CREATE PROCEDURE Pr_GetTabModuleDetails(    @TabID int )AS

    IF @TabID = 0

      SET @TabID = 1       SELECT      TabModules.*,Modules.ModuleName,ModuleKinds.ModuleKindID,ModuleKinds.ModulePath      FROM      TabModulesINNER JOIN      Modules      ON      TabModules.ModuleID = Modules.ModuleID INNER JOIN      ModuleKinds      ON      Modules.ModuleKindID = Modulekinds.ModuleKindID      WHERE      TabID = @TabID      ORDER BY      ModuleOrder           GO

    调用模块代码为:

    private void AddUserModule()  {   TabAddModuleSettings moduleSetting = (TabAddModuleSettings)HttpContext.Current.Items["TabAddModuleSettings"];

         if(moduleSetting.ActiveTabs.Modules.Count > 0)   {    foreach(ModuleDetails moduleDetails in moduleSetting.ActiveTabs.Modules)    {     Control parent = Page.FindControl(moduleDetails.PaneName);

         UserModuleControl tabModule = (UserModuleControl)Page.LoadControl(moduleDetails.ModulePath);                tabModule.ModuleConfiguration = moduleDetails;     parent.Controls.Add(tabModule);          parent.Visible = true;    }   }  }

    这样便可以实现动态的添加控件功能


    最新回复(0)