动态的加载控件

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

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
      TabModules
INNER 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;
    }
   }
  }

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

阅读更多
个人分类: asp.net开发收集
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭