在动态加载网页控件时可以动态的加载相关的控件如实现网页整个模块时,模块的详细信息为:
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; } } }
这样便可以实现动态的添加控件功能
