C# 使用表中的控件名称从控件库中动态选择和构建控件
我的服务器控件库中有一个自定义DDL 目前,我通过按惯常方式大力键入控件的名称,将此控件添加到表中C# 使用表中的控件名称从控件库中动态选择和构建控件,c#,asp.net,dynamic,controls,C#,Asp.net,Dynamic,Controls,我的服务器控件库中有一个自定义DDL 目前,我通过按惯常方式大力键入控件的名称,将此控件添加到表中 Control_Library.Report_NumberDDL newDDL = new Control_Library.Report_NumberDDL(); 我希望能够通过从表中提取控件名来动态创建该控件 因此,我会在我的代码中包含控件的名称,在本例中为“Report_NumberDDL”,然后我希望创建该控件,而不必强制键入它 像这样的,虽然我知道这不起作用: string contro
Control_Library.Report_NumberDDL newDDL = new Control_Library.Report_NumberDDL();
我希望能够通过从表中提取控件名来动态创建该控件
因此,我会在我的代码中包含控件的名称,在本例中为“Report_NumberDDL”,然后我希望创建该控件,而不必强制键入它
像这样的,虽然我知道这不起作用:
string controlName = "Report_NumberDDL";
Control_Library."controlName" controlNum1 = new Control_Library."controlName"();
既然这显然行不通,有人能帮我做点什么吗
谢谢
编辑:
我试着这样做:
Type type = Type.GetType("Control_Library.Report_NumberDDL");
object control = Activator.CreateInstance(type);
但是在CreateInstance(type)上,我得到一个空值异常。因此,无法正确创建类型。您需要使用反射来动态实例化对象。导入System.Reflection命名空间,然后执行以下操作:
Type type = Type.GetType(ControlName);
object control = Activator.CreateInstance(type);
好的,我正在努力解决这个问题,但这里有一个问题是我所做的:Type Type=Type.GetType(“One_Eva\u Control\u Library.Emu\u AIR\u Report\u NumberDDL”);对象控件=Activator.CreateInstance(类型);现在我得到了一个空类型异常,所以我不确定我做错了什么。请确保您的One_Eva_Control_库程序集已加载且可用。然后尝试Type=Type.GetType(“Emu\u AIR\u Report\u NumberDDL”);当您说loaded and available(已加载且可用)时,这是否意味着添加“使用一个Eva控件库;”到我的aspx.cs文件?或者是否还有其他需要确保程序集已加载且可用的内容。我也发现了这一点:如果您使用typeof(One_Eva_Control_Library.Emu_AIR_Report_NumberDDL).AssemblyQualifiedName,您应该获得用于GetType()的字符串。我只是说程序集在项目中被引用,并且在类文件的顶部有一个用于该程序集的using语句。我正在查看用于加载插件系统类型的代码,我还使用Assembly.LoadFile()通过反射加载程序集。我认为获得AssemblyQualifiedName将是你最好的选择。