业务的需求是:在日历上给出日期段,用户再从日期段中选择日期。
由于本人能力不强,只好调用MS的日历,并加上了以下属性:
private void Calendar1_DayRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
{
HtmlInputCheckBox cb = new HtmlInputCheckBox();
cb.ID = calID+"_chkDate";
cb.Name = calID+"_chkDate";
cb.Value = strDate(e.Day.Date.ToString().Trim()); if(availBeginDate != "" && availEndDate != "")//日期段
{
TimeSpan ts = DateTime.Parse(availEndDate.ToString().Trim()) - DateTime.Parse(availBeginDate.ToString().Trim()); for(int i=0;i<ts.Days+1;i++)
{
if(e.Day.Date == DateTime.Parse(availBeginDate.ToString().Trim()).AddDays(i))
{
e.Cell.Controls.Add(cb);
} } } }
问题就来了,日历所有事件都要回送服务器,我的页面不允许回送服务器。
我就想如果我的日历只显示日期段并保留日历的样式,就不需要翻到下月了,也就不需要任何作点击日历的动作了。
不知道能否有更好的解决多选日期的日历?

解决方案 »

  1.   

    使用梅花雨日历控件,他是客户端的(用js+div/iframe实现),无需回送然后加上客户端验证,以限制在要求的日期段内
      

  2.   

    第一次加载页面就都读出来了啊。
    还要postback干嘛?
      

  3.   

    TO: Proyang
    因为日期段可能跨月份,需要翻到下月。
    我现在就是想日历只加载日期段,而不需要整年整月的日历,这样就不用翻到下月了。
      

  4.   

    在日历的DayRender事件中绑定数据
    if(e.Day.Date.Year.Equals(int.Parse(date[0].ToString()+date[1].ToString()+date[2].ToString()+date[3].ToString())) && e.Day.Date.Month.Equals(int.Parse(date[6].ToString())) && e.Day.Date.Day.Equals(int.Parse(date[9].ToString())))
    {
    e.Day.IsSelectable = true;
    }
      

  5.   

    放到iframe里是最后我不得已之举了,因为我把这个日历做成用户控件,又放到DATAGRID里面了
      

  6.   

    int.Parse(date[0].ToString()+date[1].ToString()+date[2].ToString()+date[3].ToString()
    这是什么意思啊
      

  7.   

    Lutz Roeder's.NET Reflector
    是个不错的反编译器,你down下来看看能不能看到人家的代码.