65.9K
CodeProject 正在变化。 阅读更多。
Home

甘特图 / 事件日历 / 日历计划器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.62/5 (41投票s)

2005年6月9日

CPOL

4分钟阅读

viewsIcon

1108151

downloadIcon

20158

可滚动的 ASP.NET 甘特图 / 事件日历 / 日历计划器 Web 控件。

Sample Image - EventCalendarControl.jpg

引言

EventCalendar 控件是一个非复合 Web 控件,它创建一个甘特风格的日历视图,按季度显示。事件在左侧窗格中详细说明,右侧窗格则将事件显示为水平日历上的条带。您可以在这些条带上添加超链接,将用户引导到另一个文档。右侧窗格是可滚动的。事件可以分组显示,并在其事件上方高亮显示。该控件接收 XML 数据来表示事件。

我接到一个慈善机构的请求,要求开发这个工具来帮助项目协调,让大家了解彼此的进展。该网站允许人们在一个 Web 表单中输入事件详情,然后根据“业务计划”进行分组显示。事件存储在 MS SQL 服务器中。通过一个包含表和数据关系的 DataSet,很容易从数据库中提取数据并将其格式化为 Calendar Control 所需的分层 XML,然后使用 DataSetGetXml() 方法。

Using the Code

要在您的网站上使用 EventCalendar 控件,您需要通过右键单击控件,选择“自定义工具箱”,选择“.NET Framework 组件”选项卡,然后单击浏览按钮,将控件添加到工具箱。导航到 EventCalendarControl.dll。这将将其添加到工具箱中。然后只需将此控件拖放到您想要的位置即可。

之后,您可以在属性窗口中设置控件的 Font 属性为您喜欢的样式。我喜欢 Arial, 8pt。

接下来,在代码隐藏页的 onload 事件中,您需要设置控件的一些属性。

   EventCalendarControl1.XMLData = xmlData;
   EventCalendarControl1.BlankGifPath = "trans.gif";
   EventCalendarControl1.Year = 2005;
   EventCalendarControl1.Quarter = 2;
   EventCalendarControl1.BlockColor = "blue";
   EventCalendarControl1.ToggleColor = "#dcdcdc";
   EventCalendarControl1.CellHeight = 15;
   EventCalendarControl1.CellWidth = 15;
  • XMLData:包含日历事件的数据,稍后我会详细介绍其格式。
  • BlankGifPath:指向透明 1 X 1 GIF 的网站路径。这是控件正确格式化日历网格所需的路径。我无法在不采用这种常见的 Web 开发技术的情况下,让左右窗格之间的网格正确同步。如果您知道如何实现,请告诉我!
  • Year:您希望日历显示的年份。
  • Quarter:您希望日历显示的季度(1, 2, 3, 4)。
  • BlockColor:这是日历的默认块颜色。您可以在 XML 中为单个组覆盖此颜色。
  • ToggleColor:日历将用于分隔周和组的颜色。
  • CellHeight:日历网格中单元格的高度。
  • CellWidth:日历网格中单元格的宽度。

现在来看 XML

XML 格式非常简单,只有组,组包含块(事件)。每个组都会“分组”一个事件列表。请注意,不管组节点或顶级节点包含什么,我都会使用 // XPath 进行全局搜索。

  • 每个组都有节点:nameblockcolor,然后是一系列块节点。
  • 每个块包含:namestartdateenddate 和一个 href

XML 示例

xmlData = "<NewDataSet>"
   xmlData += "    <group>";
   xmlData += "      <name>Develop Specifications</name>";
   xmlData += "      <blockcolor>#cc66cc</blockcolor>";
   xmlData += "      <block>";
   xmlData += "        <href>activity.aspx?ActID=17</href>";
   xmlData += "        <StartDate>2005-04-10T00:00:00.0000000+01:00</StartDate>";
   xmlData += "        <EndDate>2005-05-10T00:00:00.0000000+01:00</EndDate>";
   xmlData += "        <name>Technical Architecture</name>";
   xmlData += "      </block>";
   xmlData += "      <block>";
   xmlData += "        <href>activity.aspx?ActID=18</href>";
   xmlData += "        <StartDate>2005-04-15T00:00:00.0000000+01:00</StartDate>";
   xmlData += "        <EndDate>2005-05-15T00:00:00.0000000+01:00</EndDate>";
   xmlData += "        <name>Software Architecture</name>";
   xmlData += "      </block>";
   xmlData += "    </group>";
   xmlData += "</NewDataSet>"

假设数据包含在一个数据库中,生成此 XML 的最佳方法是使用一个 DataSet,其中包含两个表:第一个表包含组,第二个表包含块。为 DataSet 添加表关系(表示父子关系),并将 Nested = true,然后对 DataSet 调用 ToXML(),即可神奇地生成所需的嵌套或分层 XML。

关于代码

该控件是一个非复合控件,这意味着它不基于或派生自标准的 Web 控件。有时,当您需要更精细地控制生成的 HTML 时,可以考虑创建此类控件来封装它。这很简单,您只需创建一个“Web 控件库”,然后重写 RenderRenderContents 方法。

我还在控件中使用了 JavaScript。该 JavaScript 允许控件调整大小,以便事件日历右侧窗格的滚动条随之调整。JavaScript 在 OnPreRender 事件处理程序中注册。

进一步的工作

使用这段代码,可以很容易地对其进行增强,例如在左侧窗格中添加持续时间,或高亮显示关键路径。

© . All rights reserved.