Создание общего метода для создания элементов управления в ASP.NET C # - PullRequest
1 голос
/ 04 мая 2011

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

public class ListControlSetup
{
    public ListControl ListControl { get; set; }
    public String ControlId { get; set; }
    public String ControlCssClass { get; set; }
    public bool CausesValidation { get; set; }
    public IuIDropDownDictionary DropDownDictionary { get; set; }
    public String DropDownMethod { get; set; }
    public bool AutoPostback { get; set; }                      
}

Затем у меня есть метод, который принимает вышеуказанный объект в качестве параметра и создает элемент управления. Давайте скажем выпадающий список в этом случае. Допустим, я хотел передать событие для выпадающего списка события OnSelectedIndexchange. Как бы я сделал это в общем виде, чтобы можно было связать событие в вызываемой процедуре. Ниже приведена процедура, которую я сейчас выполняю.

    private void ControlSetUp(ListControlSetup control)
    {
        control.ListControl = this.CreateDropDownListControl(control.ControlId, control.ControlCssClass, control.CausesValidation);
        _myManager.DropDownMethod = control.DropDownMethod;
        _myManager.FillDropDown(control.DropDownDictionary, control.ListControl);                       
        this.Controls.Add(control.ListControl);
    }

ниже - вызов и создание объекта.

        ListControlSetup lcs = new ListControlSetup{ ListControl = ddlControl, DropDownMethod = SPConsts.GetData, 
                            DropDownDictionary = new DataDictionary(), ControlId="ddlControlId", ControlCssClass="inputfield", CausesValidation=false, AutoPostback=false};
        ControlSetUp(lcs);        

Был бы полезен любой совет относительно того, как добавить события в метод ControlSetUp.

Спасибо

1 Ответ

0 голосов
/ 04 мая 2011

Решение вашей проблемы с делегатами.Событие DropDownList.OnSelectedIndexChanged объявляется с использованием делегата типа EventHandler (который сам объявлен в System.dll).Поэтому добавьте метод того же типа EventHandler в ваш класс ListControlSetup, например:

public class ListControlSetup
{
    ...
    EventHandler OnSelectedIndexChanged;  
    // Don't let the stackoverflow coloring fool you, 
    // 'OnSelectedIndexChanged' is a member variable name.
}

Затем в вашем методе ControlSetUp() сделайте следующее:

if ( control.OnSelectedIndexChanged != null )
    ddlControl.SelectedIndexChanged += control.OnSelectedIndexChanged;

Наконец, чтобы назначить члена списка OnSelectedIndexChanged в ListControlSetup, сделайте следующее:

ListControlSetup lcs = new ListControlSetup() { ... };
lcs.OnSelectedIndexChanged += new EventHandler( ddl_SelectedIndexChanged );

Это предполагает, что ваш метод-обработчик событий, конечно, ddl_SelectedIndexChanged.

Надеюсь, это поможет!

...