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