Web用户控件通过XML填充项目

时间:2013-03-28 06:57:54

标签: asp.net web-user-controls

我有一个Web用户控件名称作为Chart Control,我在Chart Control中有一个下拉列表 我想像这样填充DropDown图表控件列表:

<UC:ChartControl ID="abc" runat="server">
        <ChartDropDownItems>
            <asp:ListItem Text="Graph_Amount_Items_Sold" Value="0"></asp:ListItem>
            <asp:ListItem Text="Graph_Ranking" Value="1"></asp:ListItem>
            <asp:ListItem Text="Graph_Share_Amount_Items_Sold" Value="2"></asp:ListItem>
            <asp:ListItem Text="Graph_Share_Unit_items_Sold" Value="3" Selected="True"></asp:ListItem>
            <asp:ListItem Text="Graph_Unit_items_Sold" Value="4"></asp:ListItem>
        </ChartDropDownItems>
    </UC:ChartControl>

在.cs代码中

 [DefaultProperty("ChartDropDownItems"),
    ParseChildren(true, "ChartDropDownItems"), PersistChildren(false),
    ToolboxData("<{0}:ChartControl runat=\"server\"> </{0}:ChartControl>")]

    public partial class ChartControl : System.Web.UI.UserControl
    {
     private List<ListItem> lst;
            [Browsable(true)]
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
            [PersistenceMode(PersistenceMode.InnerProperty)]

            public List<ListItem> ChartDropDownItems
            {
                set
                {
                    lst = value;
                    Bind_ddChartChange();
                }
            }
     private void Bind_ddChartChange()
            {

                if (lst != null)
                {
                    ddChartChange.DataSource = lst;
                    ddChartChange.DataTextField = "Text";
                    ddChartChange.DataValueField = "Value";
                    ddChartChange.DataBind();
                    ListItem li = lst.Find(x => x.Selected == true);
                    ddChartChange.SelectedValue = li.Value;

                }
            }
}

当我编译并运行它对我来说很好,但在设计时它说

"Error Creating Control"
"Type'System.Web.UI.Control' does not have a public property named 'ChartDropDownItems'"

我想在设计时工作。 任何身体可以相应地建议我吗? 感谢。

2 个答案:

答案 0 :(得分:5)

好的,经过几个小时的google-fu之后,我得出的结论是,要么设计师不能看到内在的儿童标签,要么没有人愿意为如何做到这一点给出一个好的答案。

根据wonkim00's answer,这是MSDN site的引用:

  

注意: Visual Studio设计器不支持模板化ASP.NET用户控件。但是,您可以在Visual Studio中编译并运行此示例。为此,当您创建ASP.NET页面以测试此代码时,请使用示例列表中的代码和标记替换页面中所有设计器生成的代码。

但是,正如您所知,这是模板的通知,但在我尝试使用许多其他数据类型(列表,集合,数组列表)后,它似乎是相同的。

可能有一个我们都缺少的属性让它在设计师中可见,但它似乎非常隐藏(请,任何人都可以随意证明我的错误。)

我发现代码编译和工作很奇怪,但你不能让设计师关闭缺少的属性。

我使用的链接:

也许那些会有所帮助,也许不会。对不起,这是我能找到的最好的消息。

答案 1 :(得分:2)

确保您的课程名为ChartControl,而且该课程来自UserControl而不是来自Control,这可能是造成此错误的原因,希望这会有所帮助。