如何根据用户的selecton生成动态控件?
我最近出现过一次实际测试,他们有下面提到的要求
他们有2个日历(asp.net默认)。
他们有两个选项(单选按钮列表):一个是“重复开启”,另一个是“重复开启”
重复有2下拉:
1)日下拉:它的价值是:每隔一天,每隔一天,每隔三天
2)持续时间下拉:值为:日,月,周,年
重复有2下拉:
1)周:值为第一周,第二周,第三周
2)日:周日,周一......周六
现在当我点击2010年8月10日的第一个日历日期和2011年1月26日的第二个日历时,我希望生成能够显示8月到1月的日历(包括两者)的动态日历
对于过滤目的,如果我选择第一个星期日(来自重复选项),则应选择第一个星期日的动态日历。如果我每隔三天选择一次,则应选择每隔3天(在动态生成的日历中)
我做的是:可以通过创建日历类的对象来生成动态日历..是吗?另外,我在谷歌搜索,他们表明DayRender事件可能是一个可能的解决方案,但这没有帮助......
怎么做?如何生成动态日历?
如果不理解问题,请告诉我。
传递给我类似于最少的代码
谢谢!
答案 0 :(得分:0)
听起来您想要做的是设置属性Calendar.SelectedDate
和Calendar.VisibleDate
。
我不确定你到底想要什么,因为我不知道用户将选择1月1日/ 6月1日日期的控制类型,或者第3个星期日与之相关的内容。只有一个日历吗?如果以下信息对您没有帮助,请再解释一下。
我会从我的某个应用中粘贴一些VB代码,希望它能帮到你。
Protected Sub calArrival_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles calArrival.SelectionChanged
SetFormDepartureEntry()
lblArrivalDate.Text = calArrival.SelectedDate.ToLongDateString
calDeparture.SelectedDate = calArrival.SelectedDate
calDeparture.VisibleDate = calArrival.SelectedDate
dtSelectedArrival = "1/1/2000"
'Determine if we need to see 2 months to view all possible departure dates.
If (DatePart(DateInterval.Month, calDeparture.SelectedDate) <> _
DatePart(DateInterval.Month, DateAdd(DateInterval.Day, 14, calDeparture.SelectedDate))) Then
calDeparture2.Visible = True
calDeparture2.SelectedDate = Nothing
calDeparture2.VisibleDate = DateAdd(DateInterval.Month, 1, calDeparture.SelectedDate)
Else
calDeparture2.Visible = False
End If
End Sub
现在好了,您已发布详细信息,这将成为另一个问题。您不知道需要多少个日历,因此您可能希望在代码中创建它们。我建议在标记中使用Panel控件来包含所有可能的结果日历。然后如前所述,根据需要创建新的Calendar对象,并将它们添加到“anchor”Panel的Controls集合中。
Calendar objCal = new Calendar();
pnlResultsContainer.Controls.Add(objCal);
就设置选定日期而言,我相信每个日历只能有一个“选定”日期。但是,您可以通过处理Calendar.DayRender事件来设置渲染样式,以及是否启用了日期等。也许有人可以帮助我在C#中为动态创建的控件设置处理程序?我认为它是这样的:
objCal.DayRender += AddressOf(DynamicDayRenderHandler());
如果这不对,请更正。
确定在处理程序中设置样式的正确日期将是对DayRenderEventArgs.Day对象进行编码的问题,该对象是事件的参数。我不知道如何找到您正在寻找的特定日期/间隔,但是可以通过以下文章中的一些研究来实现:
How to: Customize Individual Days in a Calendar Web Server Control
DayRenderEventArgs.Day Property
希望这有帮助。