日期:2014-05-17  浏览次数:20946 次

string类型转换成控件类型
如题
下面是我源码
 DataTable menuDt = menuBll.GetList(sql).Tables[0];
  KryptonPage page = new KryptonPage();
  page.Text = 
  page.Name = menuDt.Rows[0]["m_cname"].ToString();
  //page.Controls.Add(new Sert());//这里是对的

  // 我想将读取出来的用户控件添加到page.Controls里面

  // 如果我读取出来的值menuDt.Rows[0]["m_cFormPath"] 就是 Sert() 用户控件

  page.Controls.Add(new Control(menuDt.Rows[0]["m_cFormPath"].ToString()));
  // TODO:那怎么样能将上面一段代码和下面一段代码实现同样的功能
  page.Controls.Add(new Sert());

  Page_MainTable.Pages.Add(page);
  Page_MainTable.SelectedIndex = Page_MainTable.Pages.Count - 1;


 page.Controls.Add(new UserControl(menuDt.Rows[0]["m_cFormPath"].ToString()));
 page.Controls.Add(new Sert());
 // TODO:怎么能将这两段代码实现一样的效果 



------解决方案--------------------
你怎么保存的,你应该用序列化,保存流,然后再将流读出反序列化为组件
------解决方案--------------------
最简单:
switch(menuDt.Rows[0]["m_cFormPath"])
{
case "Sert":
page.Controls.Add(new Sert());
break;
}

要不然就能过反射,根据Control的名称来生成Control,然后再添加
------解决方案--------------------
http://blog.csdn.net/vvfish119/article/details/532246
------解决方案--------------------
探讨

引用:
最简单:
switch(menuDt.Rows[0]["m_cFormPath"])
{
case "Sert":
page.Controls.Add(new Sert());
break;
}

要不然就能过反射,根据Control的名称来生成Control,然后再添加


目前我用的就是这个方法,但是考虑到以后每添加一个菜单都需要用Visua……