none
关于用户控件动态加载的问题 RRS feed

  • 问题

  • 我设计了很多个用户控件,现在我需要动态的挑选几个用户控件出来,形成目录并加载到某控件里,可以是listBox也可以是DropDownList,或者其他控件,进行调用控制。
    我在网上找了很多,都没有找到合适的方法。自己也想了一些方法,但都测试没有通过。
    希望达人能给予帮助,给出示例代码。
    谢谢
    阿里路亚
    2009年11月25日 4:07

答案

  • 你好!

    1 首先用配置文件或是在变量集合中预制你的用户控件信息(名称,地址),将这个集合绑定到 DropDownList 或 ListBox
    2 页面上添加 PlaceHolder 或其它容量控件,在对应的控件选择事件中向容器控件添加选择的用户控件。

    客户端代码

    <asp:PlaceHolder ID="ucHolder" runat="server"></asp:PlaceHolder>

    服务端代码

    void LoadUserControl(int index)
    {
        Control ctl = this.LoadControl("~/WebUserControl.ascx");
        ctl.ID = string.Format("userControl_{0}", index);
        this.ucHolder.Controls.Add(ctl);
    }



    知识改变命运,奋斗成就人生!
    2009年11月25日 4:47
    版主
  • 比如你的网站做了 3 种用户控件。

    1 你可以用你的数据库,配置文件或硬编码中去记录这三种控件的信息。比如下面的记录。

    控件ID     控件名          地址

    1            用户控件1     ~/WebUserControl1.ascx
    2            用户控件2     ~/WebUserControl2.ascx
    3            用户控件3     ~/WebUserControl3.ascx

    2 用一张表记录某用户已关联的用户控件

    写一个公用的方法,返回所有的用户控件列表

    public List<int> GetAllUserControl();

    写一个公用的方法,传入用户 ID 返回他们已有的控件列表

    public List<int> GetUserControlByUserId(Guid userId);

    比如使用 CheclBoxList 控件。用所有的用户控件列表绑定控件,通过用户ID找到已关联的用户控件,通过这些 ID 将 CheclBoxList 打勾,并显示打勾的用户控件。




    知识改变命运,奋斗成就人生!
    • 已标记为答案 ccatcctv 2009年11月26日 2:14
    2009年11月25日 6:21
    版主

全部回复

  • 你好!

    1 首先用配置文件或是在变量集合中预制你的用户控件信息(名称,地址),将这个集合绑定到 DropDownList 或 ListBox
    2 页面上添加 PlaceHolder 或其它容量控件,在对应的控件选择事件中向容器控件添加选择的用户控件。

    客户端代码

    <asp:PlaceHolder ID="ucHolder" runat="server"></asp:PlaceHolder>

    服务端代码

    void LoadUserControl(int index)
    {
        Control ctl = this.LoadControl("~/WebUserControl.ascx");
        ctl.ID = string.Format("userControl_{0}", index);
        this.ucHolder.Controls.Add(ctl);
    }



    知识改变命运,奋斗成就人生!
    2009年11月25日 4:47
    版主
  • 先谢谢X.X.Y版主的回答,但这个答案没有满足我的要求。也许是我描述的比较模糊。
    首先我的这个需求是为了满足,多个用户,每个用户启用不同的用户控件。而需要DropDownList 或 ListBox来控制该用户的控件逐一加载。
    该问题的重点是,如何能够动态生成DropDownList 或 ListBox的选项和所选定项目所对应的值。
    阿里路亚
    2009年11月25日 6:07
  • 比如你的网站做了 3 种用户控件。

    1 你可以用你的数据库,配置文件或硬编码中去记录这三种控件的信息。比如下面的记录。

    控件ID     控件名          地址

    1            用户控件1     ~/WebUserControl1.ascx
    2            用户控件2     ~/WebUserControl2.ascx
    3            用户控件3     ~/WebUserControl3.ascx

    2 用一张表记录某用户已关联的用户控件

    写一个公用的方法,返回所有的用户控件列表

    public List<int> GetAllUserControl();

    写一个公用的方法,传入用户 ID 返回他们已有的控件列表

    public List<int> GetUserControlByUserId(Guid userId);

    比如使用 CheclBoxList 控件。用所有的用户控件列表绑定控件,通过用户ID找到已关联的用户控件,通过这些 ID 将 CheclBoxList 打勾,并显示打勾的用户控件。




    知识改变命运,奋斗成就人生!
    • 已标记为答案 ccatcctv 2009年11月26日 2:14
    2009年11月25日 6:21
    版主
  • 昨天晚上,花了一整晚的时间来验证这个方法,控件列表能正常返回。
    使用哪种数据源比较好。XmlDataSource还是SqlDataSource

    这里先谢谢你X.X.Y你的方法很好用
    阿里路亚
    2009年11月26日 1:44
  • 都是可以的。但即然要保存到数据库中就是 SQL 的吧。
    知识改变命运,奋斗成就人生!
    2009年11月26日 1:45
    版主