创建在ASP.NET C中创建控件的通用方法#

时间:2011-05-04 14:01:35

标签: c# asp.net events controls custom-controls

我正在尝试在自定义控件上生成一个方法,该控件将使用与控件相关的元数据创建的对象,并在此一个方法中创建控件并添加到页面控件集合中。下面是我创建的包含控件元数据的对象。

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 :(得分:0)

您的问题的解决方案是代表。 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;

最后,要分配ListControlSetup的OnSelectedIndexChanged列表成员,请执行以下操作:

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

这假设您的事件处理程序方法当然是ddl_SelectedIndexChanged。

希望这有帮助!