2011-02-07 33 views
1

我只是试图向SimpleQueryControl添加一些动态控件(当然这是一种Web控件并相应地继承了所有的方法)。我不知道如何获得我动态添加的Child控件的值。无法获取动态添加的控件的ID(当然值)

class RoomPickerQueryControl : SimpleQueryControl 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      EnsureChildControls(); 
      mColumnList.Visible = false; 


     } 



    } 

    protected override void OnInit(EventArgs e) 
    { 
     DateTimeControl controlStartDate = new DateTimeControl(); 
     controlStartDate.LocaleId = 1053; 
     controlStartDate.CssClassTextBox = "ms-long"; 
     controlStartDate.TimeZoneID = 1053; 
     controlStartDate.LocaleId = 1053; 
     controlStartDate.MinDate = DateTime.Now; 
     controlStartDate.ID = "startDateTime"; 
     controlStartDate.Visible = true; 
     controlStartDate.Enabled = true; 
     controlStartDate.EnableViewState = true; 
     this.Controls.Add(controlStartDate); 




     base.OnInit(e); 
    } 

    protected override void CreateChildControls() 
    { 

     base.CreateChildControls(); 


    } 

    protected override int IssueQuery(string search, string groupName, int pageIndex, int pageSize) 
    { 

     //i'm unable to get the ids here 
     DateTimeControl dt = (DateTimeControl) FindControlRecursive(this, "startDateTime"); 
//i'm unable to get the ids here 
     DateTimeControl dt3 = (DateTimeControl)FindControlRecursive(this.Page, "startDateTime"); 
//i'm unable to get the ids here 
     DateTimeControl controlStartDate = (DateTimeControl)this.FindControl("startDateTime"); 
//i'm unable to get the ids here 
     DateTimeControl controlEndDate = (DateTimeControl)this.FindControl("endDateTime"); 



     return rowCount; 
    } 


    public static Control FindControlRecursive(Control Root, string Id) 
    { 
     if (Root.ID == Id) 
      return Root; 
     foreach (Control Ctl in Root.Controls) 
     { 
      Control FoundCtl = FindControlRecursive(Ctl, Id); 
      if (FoundCtl != null) 
       return FoundCtl; 
     } 
     return null; 
    } 

    protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 


    } 
} 
+0

你想如何使用这个值? – EvgK 2011-02-07 16:33:04

+0

我想在IssueQuery方法中使用DateTimeControl的值。 – 2011-02-07 16:34:31

+0

请提供您的解决方案,您正在尝试解决这些id和它的控件 – Luke 2011-02-07 16:41:09

回答

0

首先,我建议把你正在创建CreateChildControls任何控件。

其次,有几种方法可以使这项工作。首先是使用的FindControl得到关于你的控制(example here):

DateTimeControl dt = this.FindControl("startDateTime") as DateTimeControl; 

另一种方法是使你的DateTimeControl私有成员变量。

class RoomPickerQueryControl : SimpleQueryControl 
{ 
    DateTimeControl controlStartDate; 
    DateTimeControl controlEndDate; 
    // more code... 

初始化您的私有成员变量中的CreateChildControls:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 

    // using our private class variable 
    controlStartDate = new DateTimeControl(); 
    controlStartDate.LocaleId = 1053; 
    // more code... 
} 

然后你就可以在你的IssueQuery功能简单地引用controlStartDate

0

存储变量对其引用:

private DateTimeControl _controlStartDate; 

Oninit(..) 
{ 
    _controlStartDate = new DateTimeControl(); 
}