2011-10-24 123 views
1

在dayrender事件中添加控件后,是否有办法在以后找到控件?我试过如何在asp.net日历控件中找到控件

calendar.FindControl("lblSample") 

但没有成功。

下面是一些我的代码更清晰:渲染事件和页面加载

protected void calSample_DayRender(object sender, DayRenderEventArgs e) 
{ 
    Label lblSample = new Label(); 
    lblSample.ID = "lblSample"; 
    lblSample.Text = "Sample"; 
    e.Cell.Controls.Add(lblSample); 
} 

一天之后完全,我有一个链接按钮事件,我尝试并获得控制权交还给

protected void lbtnSave_Click(object sender, EventArgs e) 
{ 
    //Not working 
    Label lblSample = calSample.FindControl(lblSample); 

    //Also can't get to work, this was using Ross' suggestion and the recursive find function he wrote about. I'm probably just not using it correctly. 
    Label lblSample = ControlFinder.FindControl<Label>(calSample, "lblSample"); 
} 
+1

'FindControl'不会递归搜索,所以你将需要使自己的,不仅是当前儿童搜索,但内的任何容器的孩子。 –

+0

您可能需要缓冲多个图层,例如如果你的窗体有一个你有控制权的asp:Panel,你将需要导航Form => Panel => Control。 – StuartLC

+1

请参阅http://stackoverflow.com/questions/2209854/find-all-child-controls-of-specific-type-using-enumerable-oftypet-or-linq – abatishchev

回答

0

这个答案是因为上面显示我,我可以用Page.Request.Params找到我后的值罗斯的评论。这不是最干净的解决方案,但它的工作原理!

如果添加一个下拉列表在一天日历控件呈现事件

protected void calSample_DayRender(object sender, DayRenderEventArgs e) 
    { 
     DropDownList ddlSample = new DropDownList(); 
     ddlSample.ID = "ddlSample"; 
     ddlSample.DataSource = sampleDS; 
     ddlSample.DataBind(); 
     e.Cell.Controls.Add(ddlSample); 
    } 

你可以选择的值改回这个样子,我当然需要投入更多的检查,以验证该下拉列表存在,但你得到的图片

protected void lbtnSave_Click(object sender, EventArgs e) 
    { 
     string sampleID = Page.Request.Params.GetValues("ddlSample")[0]; 
    } 
1

问题出在控件没有添加到页面,直到dayrender方法 - 意味着您无法在回发信息中获得对它的引用。使用Page.Request.Params集合,OP能够在回发中获取值。


的问题是,查找控制是不是递归的,你想控制可能是另一种控制内。

这说明你如何做一个递归查找控制方法,这将有助于:http://stevesmithblog.com/blog/recursive-findcontrol/

另外,如果你发布日历控件的代码,我也许可以帮你多一点。

罗斯

+0

感谢您的文章罗斯,我会用在一些我的项目。我对我的问题进行了编辑,并尝试将这个功能用于我的日历问题,但没有成功。你能告诉我我要去哪里吗? – stillsmallvoice

+1

好的,这里的问题是,按下按钮时,标签还没有添加到日历中。当你拿到它时,你真的试图用这个标签做什么? –

+0

我实际上在我的真实代码中添加了一个下拉列表,并尝试检索selectedvalue。我认为你是对的,linkbutton事件发生在dayrender事件之前,所以我的控件被清除了。我仍然不知道如何解决这个问题,虽然... – stillsmallvoice