Подкласс DropDownList в ASP.NET - PullRequest
       16

Подкласс DropDownList в ASP.NET

5 голосов
/ 24 октября 2008

Я хочу создать подкласс встроенного DropDownList в ASP.NET, чтобы я мог добавить к нему функциональность и использовать его на своих страницах. Я попытался сделать это с UserControl, но обнаружил, что он не раскрывает внутренний DropDownList (логично, я думаю). Я гуглил ответ, но ничего не могу найти.

Я дошел до написания фактического класса, и можно создать подкласс из DropDownList, но я не могу зарегистрировать файл на моей странице ASP.NET и использовать его в представлении исходного кода. Может быть, мне не хватает некоторых свойств в моем классе?

Есть идеи?

Ответы [ 2 ]

16 голосов
/ 24 октября 2008

Вы хотите расширить DropDownList в пользовательском элементе управления, а не в пользовательском.

Создайте новый проект библиотеки классов с именем MyLibrary.

Добавить класс с именем MyDropDownList.cs

namespace My.Namespace.Controls
{
[ToolboxData("<{0}:MyDropDownList runat=\"server\"></{0}:MyDropDownList>")]
public class MyDropDownList: DropDownList
{
    // your custom code goes here
    // e.g.
    protected override void  RenderContents(HtmlTextWriter writer)
    {
        //Your own render code
    }
}
}

Как только вы скомпилируете свою библиотеку, вы можете добавить ссылку на нее в свое веб-приложение.

И тег-префикс в вашем web.config

    <add tagPrefix="my" namespace="My.Namespace.Controls" assembly="MyLibrary" />

Это должно позволить вам добавить это к вашему aspx / ascx's

<my:MyDropDownList ID="myDDl" runat="server">
    ...
</my:MyDropDownList>
0 голосов
/ 24 октября 2008

В комментарии вы уточняете свою цель: «Единственное, что я хочу с ним сделать, это добавить свойство InitialValue, которое определяет первое значение, которое всегда присутствует в DDL.»

Я не думаю, что вам нужно создавать специальный пользовательский или пользовательский элемент управления для этого.

Я часто использую этот код в своих веб-приложениях для заполнения элементов управления списком. Вы передаете логическое значение, указывающее, должен ли дополнительный ListItem быть добавлен вверху списка, и текст для этого элемента.

    public static void BindListControl (ListControl ctl, SqlDataReader dr,
        String textColumn, String valueColumn, bool addBlankRow, string blankRowText)
    {
        ctl.Items.Clear();
        ctl.DataSource = dr;
        ctl.DataTextField = textColumn;
        ctl.DataValueField = valueColumn;
        ctl.DataBind();

        if (addBlankRow == true) ctl.Items.Insert(0, blankRowText);
    }

Это полезно, например, если вы хотите, чтобы каждый DropDownList имел в качестве начального значения пустое значение или текст, такой как «Выберите город».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...