动态的加载控件

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值