注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Dotnet >> C# >> Dotnet正文

C#高级编程:定制日历控件

文章来源:中国IT实验室收集整理 作者:佚名 更新时间:2008-8-23 15:17:18 【 】 【加入收藏

  在把会议添加到数据库中之前,先修改一下日历的显示。最好用另一种颜色显示登记之前的日期,以防该日期被选中。这要求修改我们在日历中设置日期的方式,以及日期单元格的显示方式。

  首先是日期选择。有3个地方需要查看会议登记的日期,并修改相应选择:一是在Page_ Load()中设置初始日期时,第二是在用户试图从日历中选择日期时,第三情况是登记一个会议,并设置一个新的日期,以防用户在选择新日期前,在同一天连续登记两个会议。这些都是很常见的情况,也可以创建一个私有方法来执行这个计算。这个方法应接受一个试用日期作为参数,并返回要使用的日期,该日期与试用日期相同,也可以是试用日期之后的某个日期。

  把这个getFreeDate()方法添加到后台编码文件中:

  private System.DateTime getFreeDate(System.DateTime trialDate)

  {

  if (eventTable.Rows.Count >0)

  {

  System.DateTime testDate;

  bool trialDateOK = false;

  while (!trialDateOK)

  {

  trialDateOK = true;

  foreach (System.Data.DataRow testRow in eventTable.Rows)

  {

  testDate = (System.DateTime)testRow["EventDate"];

  if (testDate.Date == trialDate.Date)

  {

  trialDateOK = false;

  trialDate = trialDate.AddDays(1);

  }

  }

  }

  }

  return trialDate;

  }

  这段简单的代码使用在Page_Load()中填充的对象eventTable提取会议数据。首先看看一般情况:没有登记任何会议,此时返回该试用日期,以确认该日期,接着对Event表中的日期进行迭代,把该日期与试用日期比较。如果找到一个匹配,就给试用日期加一天,执行另一次搜索。

  从DataTable中提取数据是相当简单的:testDate = (System.DateTime)testRow["EventDate"];

  把列数据转换为Sytem.DateTime,这样会更精确。

  使用getFreeDate()的第一个地方是在Page_Load()后面。这意味只需对设置SelectedDate属性的代码稍加修改:

  if (!this.IsPostBack)

  {

  System.DateTime trialDate = System.DateTime.Now;

  calendar.SelectedDate = getFreeDate(trialDate);

  this.DataBind();

  }

[NextPage]

  接着需要响应日历上的日期选择。为此,需要先为日历的SelectionChanged事件添加一个事件处理程序,强制检查现有会议的日期。双击设计器中的日历,添加如下代码:

  private void calendar_SelectionChanged(object sender,

  System.EventArgs e)

  {

  System.DateTime trialDate = calendar.SelectedDate;

  calendar.SelectedDate = getFreeDate(trialDate);

  }

  这段代码与Page_Load()相同。

  执行这种检查的第三个地方是响应登记按钮的单击。后面会解释它,因为后面进行了许多改变。

  接着把日历的日期单元格变为另一种颜色,以表示现存的会议。为此,需要给日期对象的DayRender事件添加一个事件处理程序。每次显示一个日期时,都会触发这个事件,并允许通过在处理程序中接收到的DayRenderEventArgs参数的Cell 和 Date属性,访问要显示的单元格对象和这个单元格的日期。我们需要比较要显示的单元格中的日期和eventTable对象中的日期,如果匹配,就可以使用Cell.BackColor属性为单元格着色:

  protected void calendar_DayRender(object sender,

  System.Web.UI.WebControls.DayRenderEventArgs e)

  {

  if (eventTable.Rows.Count >0)

  {

  System.DateTime testDate;

  foreach (System.Data.DataRow testRow in eventTable.Rows)

  {

  testDate = (System.DateTime)testRow["EventDate"];

  if (testDate.Date == e.Day.Date)

  {

  e.Cell.BackColor = Color.Red;

  }

  }

  }

  }

  这里使用红色,得到屏幕图25-6。三月的15、27、28、29和30日都有会议,所以用户选择了17日。

  添加了日期选择逻辑后,就不可能选择显示为红色的一天,如果要选择这样的日期,就会选择该日期后面的某一天。例如,在图25-6的日历中单击3月28日,就会选择31日。

  • 上一篇Dotnet:

  • 下一篇Dotnet:
  • 最 新 热 门
     SOA and Web services 新手入门i学习
     浅谈Web Services版本控制
     J2EE vs .NET-建置XML WebServices
     利用.NET FileStreams将DTD插入XML文件中_Q…
     XML开发入门基础:XML和HTML的区别
     带你认识Eclipse XML编辑器
     XML开发入门基础:使用CSS显示XML
     XML开发入门基础:查看 XML 文件
     XML开发入门基础:XML 浏览器支持
     XML开发入门基础:XML 验证
    最 新 推 荐
     C#编程中给数据库添加会议数据
     提高C#编程水平的50个要点
     C#与Java相似之处的对比
     一个独立的.通用分页控件c#源码
     认识C#中使用Nullable类型
     C#高级编程:给数据库添加会议数据
     C#高级编程:会议登记 Web服务
     C#高级编程:定制日历控件
     C #中几个线程同步对象的使用方法
     认识开发多语言界面支持的方法
    相 关 文 章

    Visual C#多线程参数传递浅析
    怎样在 Visual C# .NET 中跟踪和调试
    C #中的几个线程同步对象方法
    使用C#的BitmapData编程实例
    C#编程中给数据库添加会议数据
    提高C#编程水平的50个要点
    C#与Java相似之处的对比
    一个独立的.通用分页控件c#源码
    认识C#中使用Nullable类型
    C#高级编程:给数据库添加会议数据

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用