4

Chart Control という Web ユーザー コントロール名があり、Chart Control 内にドロップダウン リストがあります。次のように、Chart Control の DropDown List にデータを入力します。

<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'"

設計時でも動かしたい。それに応じて私に提案できる体はありますか?ありがとう。

4

2 に答える 2

5

わかりました、何時間ものグーグルフーの後、私は、デザイナーでインナーチャイルドタグを見ることができないか、そうする方法について良い答えを出すことを誰も気にしていないという結論に達しました.

このMSDNサイトからの引用であるwonkim00の回答によると:

注:テンプレート化された ASP.NET ユーザー コントロールは、Visual Studio デザイナーではサポートされていません。ただし、Visual Studio でこの例をコンパイルして実行することはできます。これを行うには、ASP.NET ページを作成してこのコードをテストするときに、ページ内のデザイナーが生成したすべてのコードを、リスト例のコードとマークアップに置き換えます。

ただし、お分かりのように、これはテンプレートの通知ですが、他の多くのデータ型 (リスト、コレクション、配列リスト) で試してみたところ、同じように見えます。

デザイナーで表示できるようにするために私たち全員が見逃している属性があるかもしれませんが、それはかなり隠されているようです (誰か、私が間違っていることを自由に証明してください)。

コードがコンパイルされて機能するのは奇妙だと思いますが、プロパティの欠落についてデザイナーを黙らせることはできません。

私が使用したリンク:

多分それらは役立つかもしれませんが、そうではないかもしれません。悪いニュースで申し訳ありませんが、それは私が見つけることができる最高のものです.

于 2013-04-07T20:02:42.773 に答える
2

あなたのクラスが呼び出されていることを確認しChartControl、その派生元がthis ではUserControlないControlことがこのエラーの原因である可能性があることを確認してください。これが役立つことを願っています。

于 2013-04-05T10:29:42.527 に答える