天天看點

Silverlight——施工計劃日報表(二)

近來一直在加班,基本上沒有個人時間。是以更新不會很即時。

長話短說,先從界面代碼開始吧。界面代碼很簡單,如下所示:

<a href="http://www.cnblogs.com/codelove/archive/2011/05/28/2060806.html#">?</a>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

<code>    </code><code>xmlns:BubbleCremeTheme</code><code>=</code><code>"System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.BubbleCremeTheme"</code>

<code>    </code><code>mc:Ignorable</code><code>=</code><code>"d"</code>

<code>    </code><code>d:DesignHeight</code><code>=</code><code>"300"</code> <code>d:DesignWidth</code><code>=</code><code>"400"</code> <code>Loaded</code><code>=</code><code>"UserControl_Loaded"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>toolkit:BubbleCremeTheme</code><code>&gt;</code>

<code>        </code><code>&lt;</code><code>StackPanel</code>   <code>Name</code><code>=</code><code>"stackPanel1"</code> <code>FlowDirection</code><code>=</code><code>"LeftToRight"</code> <code>HorizontalAlignment</code><code>=</code><code>"Left"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>StackPanel</code> <code>Orientation</code><code>=</code><code>"Vertical"</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>TextBlock</code> <code>Height</code><code>=</code><code>"23"</code> <code>Name</code><code>=</code><code>"txtTitle"</code> <code>HorizontalAlignment</code><code>=</code><code>"Center"</code> <code>Text</code><code>=</code><code>"标題"</code> <code>FontSize</code><code>=</code><code>"18"</code> <code>FontWeight</code><code>=</code><code>"Bold"</code> <code>Opacity</code><code>=</code><code>"0.7"</code> <code>RenderTransformOrigin</code><code>=</code><code>"0.5,0.5"</code> <code>&gt;</code>

<code>                    </code><code>&lt;</code><code>TextBlock.RenderTransform</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>CompositeTransform</code><code>/&gt;</code>

<code>                    </code><code>&lt;/</code><code>TextBlock.RenderTransform</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>TextBlock.Foreground</code><code>&gt;</code>

<code>                    </code><code>&lt;</code><code>LinearGradientBrush</code> <code>EndPoint</code><code>=</code><code>"0.5,1"</code> <code>MappingMode</code><code>=</code><code>"RelativeToBoundingBox"</code> <code>StartPoint</code><code>=</code><code>"0.5,0"</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>GradientStop</code> <code>Color</code><code>=</code><code>"Black"</code> <code>Offset</code><code>=</code><code>"1"</code><code>/&gt;</code>

<code>                        </code><code>&lt;</code><code>GradientStop</code> <code>Color</code><code>=</code><code>"#FFE49C9C"</code><code>/&gt;</code>

<code>                    </code><code>&lt;/</code><code>LinearGradientBrush</code><code>&gt;</code>

<code>                </code><code>&lt;/</code><code>TextBlock.Foreground</code><code>&gt;</code>

<code>                </code><code>&lt;/</code><code>TextBlock</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>StackPanel</code> <code>Orientation</code><code>=</code><code>"Horizontal"</code> <code>HorizontalAlignment</code><code>=</code><code>"Right"</code><code>&gt;</code>

<code>                    </code> 

<code>                    </code><code>&lt;</code><code>Button</code> <code>Content</code><code>=</code><code>"一鍵标記為完成"</code> <code>Name</code><code>=</code><code>"btnFilishAll"</code> <code>Width</code><code>=</code><code>"130"</code> <code>Margin</code><code>=</code><code>"5,0,5,0"</code> <code>Click</code><code>=</code><code>"btnFilishAll_Click"</code> <code>/&gt;</code>

<code>                    </code><code>&lt;</code><code>Button</code> <code>Content</code><code>=</code><code>"全屏"</code> <code>Name</code><code>=</code><code>"BtnFullScreen"</code> <code>Width</code><code>=</code><code>"100"</code> <code>Margin</code><code>=</code><code>"5,0,5,0"</code> <code>Click</code><code>=</code><code>"BtnFullScreen_Click"</code> <code>/&gt;</code>

<code>                    </code><code>&lt;</code><code>Button</code> <code>Content</code><code>=</code><code>"送出"</code> <code>Name</code><code>=</code><code>"btnSubmit"</code> <code>Width</code><code>=</code><code>"100"</code>  <code>Click</code><code>=</code><code>"Button_Click"</code> <code>Margin</code><code>=</code><code>"5,0,5,0"</code><code>/&gt;</code>

<code>                </code><code>&lt;/</code><code>StackPanel</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>ScrollViewer</code> <code>HorizontalContentAlignment</code><code>=</code><code>"Left"</code> <code>HorizontalAlignment</code><code>=</code><code>"Left"</code> <code>HorizontalScrollBarVisibility</code><code>=</code><code>"Auto"</code> <code>VerticalScrollBarVisibility</code><code>=</code><code>"Auto"</code> <code>MaxHeight</code><code>=</code><code>"513"</code><code>&gt;</code>

<code>                    </code><code>&lt;</code><code>ScrollViewer.BorderBrush</code><code>&gt;</code>

<code>                        </code><code>&lt;</code><code>LinearGradientBrush</code> <code>EndPoint</code><code>=</code><code>"0.5,1.5"</code> <code>StartPoint</code><code>=</code><code>"0.5,0"</code><code>&gt;</code>

<code>                            </code><code>&lt;</code><code>GradientStop</code> <code>Color</code><code>=</code><code>"#FFE0E3BC"</code><code>/&gt;</code>

<code>                            </code><code>&lt;</code><code>GradientStop</code> <code>Color</code><code>=</code><code>"#FF6C6C5C"</code> <code>Offset</code><code>=</code><code>"1"</code><code>/&gt;</code>

<code>                        </code><code>&lt;/</code><code>LinearGradientBrush</code><code>&gt;</code>

<code>                    </code><code>&lt;/</code><code>ScrollViewer.BorderBrush</code><code>&gt;</code>

<code>                    </code><code>&lt;</code><code>Border</code> <code>BorderBrush</code><code>=</code><code>"#FF333333"</code> <code>BorderThickness</code><code>=</code><code>"2"</code> <code>Background</code><code>=</code><code>"#FFC1C1C1"</code> <code>&gt;</code>

<code>                        </code><code>&lt;</code><code>Grid</code> <code>x:Name</code><code>=</code><code>"gdPlans"</code> <code>Background</code><code>=</code><code>"#FFC1C1C1"</code> <code>MouseRightButtonDown</code><code>=</code><code>"gdPlans_MouseRightButtonDown"</code><code>&gt;</code>

<code>                        </code><code>&lt;/</code><code>Grid</code><code>&gt;</code>

<code>                    </code><code>&lt;/</code><code>Border</code><code>&gt;</code>

<code>                </code><code>&lt;/</code><code>ScrollViewer</code><code>&gt;</code>

<code>            </code><code>&lt;/</code><code>StackPanel</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>StackPanel</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>toolkit:BubbleCremeTheme</code><code>&gt;</code>

<code>&lt;/</code><code>UserControl</code><code>&gt;</code>

值得注意的是,這裡用到了Silverlight 4.0工具包裡面的BubbleCremeTheme主題。在使用的時候,注意引用,如 “xmlns:BubbleCremeTheme="System.Windows.Controls.Theming; assembly=System.Windows.Controls.Theming.BubbleCremeTheme"”。然後需要注意的是,使用了 ScrollViewer 實作滾動條,在ScrollViewer 裡面放了一個Border 控件,用于繪制邊框。在Border 控件裡面,用到了Grid 控件。所有的資料都是基于Grid 控件生成的。

界面元素定義好了。接下來如下公共屬性:

46

<code>#region 公共屬性</code>

<code>        </code><code>/// &lt;summary&gt;</code>

<code>        </code><code>/// 日期格式(day、week、month)</code>

<code>        </code><code>/// &lt;/summary&gt;</code>

<code>        </code><code>public</code> <code>string</code> <code>DateType {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 行号</code>

<code>        </code><code>public</code> <code>int</code> <code>RowIndex {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 開始時間</code>

<code>        </code><code>public</code> <code>DateTime StartDate {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 設定日期列數</code>

<code>        </code><code>public</code> <code>int</code> <code>DateColCount {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 文本列列數</code>

<code>        </code><code>public</code> <code>int</code> <code>NameColumns {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 計劃列頭</code>

<code>        </code><code>public</code> <code>string</code><code>[] PlanHeads {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 日期列背景色</code>

<code>        </code><code>public</code> <code>Color DayBackGroundColor {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 資料</code>

<code>        </code><code>List&lt;PlansData&gt; LstPlansData {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否已經顯示設定完成的提示</code>

<code>        </code><code>public</code> <code>bool</code> <code>HasShowSetFilishTip {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>Dictionary&lt;</code><code>string</code><code>,</code><code>string</code><code>&gt; dicInitParams;</code>

<code>        </code><code>//行背景(用于時間段)</code>

<code>        </code><code>private</code> <code>static</code> <code>List&lt;ImageBrush&gt; RowBackGroundLst;</code>

<code>        </code><code>private</code> <code>ImageBrush FilishImageBrush;</code>

<code>        </code><code>/// 周的日數(預設7)</code>

<code>        </code><code>int</code> <code>_weekDayCount;</code>

<code>        </code><code>#endregion</code>

<code>屬性定義好了,那麼這些值是怎麼傳遞過來的呢?使用的是InitParams。如下面代碼:</code>

<code> </code> 

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

<code>public</code> <code>ShowPlans()</code>

<code>{</code>

<code>    </code><code>try</code>

<code>    </code><code>{</code>

<code>        </code><code>InitializeComponent();</code>

<code>        </code><code>SetInitialValue();</code>

<code>        </code><code>#region 設定顯示的時間段</code>

<code>        </code><code>if</code> <code>(DateType ==</code><code>"day"</code> <code>&amp;&amp; txtTitle.Text.Length &gt; 0)</code>

<code>        </code><code>{</code>

<code>            </code><code>txtTitle.Text +=</code><code>string</code><code>.Format(</code><code>"({0}~{1})"</code><code>, StartDate.ToShortDateString(), StartDate.AddDays(DateColCount).ToShortDateString());</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

<code>    </code><code>catch</code> <code>(Exception ex)</code>

<code>        </code><code>MessageBox.Show(</code><code>"參數初始化出錯:"</code> <code>+ ex.Message,</code><code>"錯誤"</code><code>, MessageBoxButton.OK);</code>

<code>}</code>

<code>#region 參數初始化</code>

<code>/// &lt;summary&gt;</code>

<code>/// 資料初始化</code>

<code>/// StartDate:開始日期,預設為目前時間</code>

<code>/// DateType:日期類型,可選值為(day、week、month),預設為day</code>

<code>/// DateColCount:日期列數,day預設為30,week預設為10,month預設為12</code>

<code>/// Title:标題</code>

<code>/// PlanHeads:文字标頭,多列需用“;”分隔。值需用Url編碼。</code>

<code>/// Data:資料。格式為Json,需用Url編碼。映射的類為PlansData。</code>

<code>/// DayBackGroundColor:日期列背景色</code>

<code>/// WeekDayCount:周涵蓋的天數(預設7)</code>

<code>/// OnlyResponseHasEdit:僅僅隻輸出編輯項</code>

<code>/// &lt;/summary&gt;</code>

<code>private</code> <code>void</code> <code>SetInitialValue()</code>

<code>    </code><code>RowIndex = 0;</code>

<code>    </code><code>#region 設定預設值</code>

<code>    </code><code>StartDate = DateTime.Now;</code>

<code>    </code><code>DateColCount = 30;</code>

<code>    </code><code>DateType =</code><code>"day"</code><code>;</code>

<code>    </code><code>NameColumns = 1;</code>

<code>    </code><code>DayBackGroundColor = Colors.White;</code>

<code>    </code><code>HasShowSetFilishTip =</code><code>false</code><code>;</code>

<code>    </code><code>#region 圖檔畫刷</code>

<code>    </code><code>RowBackGroundLst =</code><code>new</code> <code>List&lt;ImageBrush&gt;()</code>

<code>        </code><code>new</code> <code>ImageBrush()</code>

<code>            </code><code>ImageSource=</code><code>new</code> <code>BitmapImage(</code><code>new</code> <code>Uri(</code><code>"plink.png"</code><code>, UriKind.Relative))</code>

<code>        </code><code>},</code>

<code>            </code><code>ImageSource=</code><code>new</code> <code>BitmapImage(</code><code>new</code> <code>Uri(</code><code>"blue.png"</code><code>, UriKind.Relative))</code>

<code>            </code><code>ImageSource=</code><code>new</code> <code>BitmapImage(</code><code>new</code> <code>Uri(</code><code>"red.png"</code><code>, UriKind.Relative))</code>

<code>            </code><code>ImageSource=</code><code>new</code> <code>BitmapImage(</code><code>new</code> <code>Uri(</code><code>"green.png"</code><code>, UriKind.Relative))</code>

<code>    </code><code>};</code>

<code>    </code><code>FilishImageBrush =</code>

<code>       </code><code>{</code>

<code>           </code><code>ImageSource =</code><code>new</code> <code>BitmapImage(</code><code>new</code> <code>Uri(</code><code>"red.png"</code><code>, UriKind.Relative))</code>

<code>       </code><code>};</code>

<code>    </code><code>#endregion</code>

<code>    </code><code>#region 設定初始化參數</code>

<code>    </code><code>dicInitParams = App.Current.Host.InitParams</code><code>as</code> <code>Dictionary&lt;</code><code>string</code><code>,</code><code>string</code><code>&gt;;</code>

<code>    </code><code>if</code> <code>(dicInitParams !=</code><code>null</code> <code>&amp;&amp; dicInitParams.Count &gt; 0)</code>

<code>        </code><code>//标題</code>

<code>        </code><code>if</code> <code>(dicInitParams.ContainsKey(</code><code>"Title"</code><code>))</code>

<code>            </code><code>txtTitle.Text = dicInitParams[</code><code>"Title"</code><code>] ??</code><code>string</code><code>.Empty;</code>

<code>        </code><code>else</code>

<code>            </code><code>txtTitle.Visibility = Visibility.Collapsed;</code>

<code>        </code><code>//設定開始日期</code>

<code>        </code><code>if</code> <code>(dicInitParams.ContainsKey(</code><code>"StartDate"</code><code>))</code>

<code>            </code><code>StartDate = Convert.ToDateTime(dicInitParams[</code><code>"StartDate"</code><code>]);</code>

<code>        </code><code>//周涵蓋天數(僅當DateType=week時啟用)</code>

<code>        </code><code>_weekDayCount = 7;</code>

<code>        </code><code>//日期列背景色</code>

<code>        </code><code>if</code> <code>(dicInitParams.ContainsKey(</code><code>"DayBackGroundColor"</code><code>))</code>

<code>            </code><code>DayBackGroundColor = ReturnColorFromString(dicInitParams[</code><code>"DayBackGroundColor"</code><code>]);</code>

<code>        </code><code>//日期類型</code>

<code>        </code><code>if</code> <code>(dicInitParams.ContainsKey(</code><code>"DateType"</code><code>))</code>

<code>            </code><code>DateType = dicInitParams[</code><code>"DateType"</code><code>];</code>

<code>            </code><code>if</code> <code>(DateType ==</code><code>"week"</code><code>)</code>

<code>            </code><code>{</code>

<code>                </code><code>if</code> <code>(!dicInitParams.ContainsKey(</code><code>"DateColCount"</code><code>))</code>

<code>                </code><code>{</code>

<code>                    </code><code>DateColCount = 10;</code>

<code>                </code><code>}</code>

<code>                </code><code>if</code> <code>(dicInitParams.ContainsKey(</code><code>"WeekDayCount"</code><code>))</code>

<code>                    </code><code>_weekDayCount = Convert.ToInt32(dicInitParams[</code><code>"WeekDayCount"</code><code>]);</code>

<code>            </code><code>}</code>

<code>            </code><code>else</code> <code>if</code> <code>(DateType ==</code><code>"month"</code><code>)</code>

<code>                    </code><code>DateColCount = 12;</code>

<code>        </code><code>//日期列列數</code>

<code>        </code><code>if</code> <code>(dicInitParams.ContainsKey(</code><code>"DateColCount"</code><code>))</code>

<code>            </code><code>DateColCount = Convert.ToInt32(dicInitParams[</code><code>"DateColCount"</code><code>]);</code>

<code>        </code><code>//文本列列頭</code>

<code>        </code><code>if</code> <code>(dicInitParams.ContainsKey(</code><code>"PlanHeads"</code><code>))</code>

<code>            </code><code>PlanHeads = HttpUtility.UrlDecode(dicInitParams[</code><code>"PlanHeads"</code><code>]).Split(</code><code>';'</code><code>);</code>

<code>            </code><code>NameColumns = PlanHeads.Length;</code>

<code>    </code><code>else</code>

<code>        </code><code>MessageBox.Show(</code><code>"啟動參數未設定"</code><code>);</code>

<code>#endregion</code>

<code>using</code> <code>System;</code>

<code>using</code> <code>System.Collections.Generic;</code>

<code>namespace</code> <code>PlansView</code>

<code>    </code><code>/// &lt;summary&gt;</code>

<code>    </code><code>/// 資料</code>

<code>    </code><code>/// &lt;/summary&gt;</code>

<code>    </code><code>public</code> <code>class</code> <code>PlansData</code>

<code>        </code><code>public</code> <code>List&lt;Plan&gt; LstPlan {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 計劃時間集合</code>

<code>        </code><code>public</code> <code>List&lt;PlanDate&gt; LstPlanDate {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>    </code><code>/// 計劃</code>

<code>    </code><code>public</code> <code>class</code> <code>Plan</code>

<code>        </code><code>/// 計劃名稱</code>

<code>        </code><code>public</code> <code>string</code> <code>PlanName {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>    </code><code>/// 計劃日期</code>

<code>    </code><code>public</code> <code>class</code> <code>PlanDate</code>

<code>        </code><code>/// 說明</code>

<code>        </code><code>public</code> <code>string</code> <code>Explain {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>public</code> <code>DateTime? StartDate {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 結束時間</code>

<code>        </code><code>public</code> <code>DateTime? EndDate {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 允許的最小值</code>

<code>        </code><code>public</code> <code>DateTime? MinDate {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 允許的最大值</code>

<code>        </code><code>public</code> <code>DateTime? MaxDate {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否隻讀</code>

<code>        </code><code>public</code> <code>bool</code> <code>IsReadOnly {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否允許超過目前時間</code>

<code>        </code><code>public</code> <code>bool</code> <code>CanGreaterThanNow {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否已編輯</code>

<code>        </code><code>public</code> <code>bool</code> <code>HasEdit {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否已完成</code>

<code>        </code><code>public</code> <code>bool</code> <code>IsFlish {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否允許撤銷</code>

<code>        </code><code>public</code> <code>bool</code> <code>AllowCancel {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 是否允許為空(必填情況下,無法送出資料)</code>

<code>        </code><code>public</code> <code>bool</code> <code>AllowBlank {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>        </code><code>/// 自定義标記</code>

<code>        </code><code>public</code> <code>string</code> <code>Tag {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

下載下傳好該元件後, 引用Json.Silverlight(Silverlight的JSON元件用起來不友善)。這樣我們就可以很友善的将JSON字元串反序列化成對象 了,也可以将對象序列化成JSON字元串。于是,隻需要在InitParams傳入JSON字元串,然後反序列話即可。如下所示:

<code>#region 設定資料</code>

<code>private</code> <code>void</code> <code>LoadData()</code>

<code>    </code><code>if</code> <code>(dicInitParams !=</code><code>null</code> <code>&amp;&amp; dicInitParams.ContainsKey(</code><code>"Data"</code><code>))</code>

<code>        </code><code>LstPlansData = JsonConvert.DeserializeObject&lt;List&lt;PlansData&gt;&gt;(HttpUtility.UrlDecode(dicInitParams[</code><code>"Data"</code><code>]));</code>

那麼InitParams如何設定呢,測試頁(.aspx頁面)頁面元素如下:

<code>&lt;</code><code>form</code> <code>id</code><code>=</code><code>"form1"</code> <code>runat</code><code>=</code><code>"server"</code> <code>style</code><code>=</code><code>"height:100%"</code><code>&gt;</code>

<code>&lt;</code><code>div</code> <code>id</code><code>=</code><code>"silverlightControlHost"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>object</code> <code>data</code><code>=</code><code>"data:application/x-silverlight-2,"</code> <code>type</code><code>=</code><code>"application/x-silverlight-2"</code> <code>width</code><code>=</code><code>"100%"</code> <code>height</code><code>=</code><code>"100%"</code><code>&gt;</code>

<code>      </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"source"</code> <code>value</code><code>=</code><code>"ClientBin/PlansView.xap"</code><code>/&gt;</code>

<code>      </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"onError"</code> <code>value</code><code>=</code><code>"onSilverlightError"</code> <code>/&gt;</code>

<code>      </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"background"</code> <code>value</code><code>=</code><code>"white"</code> <code>/&gt;</code>

<code>      </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"minRuntimeVersion"</code> <code>value</code><code>=</code><code>"4.0.50826.0"</code> <code>/&gt;</code>

<code>      </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"autoUpgrade"</code> <code>value</code><code>=</code><code>"true"</code> <code>/&gt;</code>

<code>      </code><code>&lt;</code><code>param</code> <code>name</code><code>=</code><code>"initParams"</code> <code>value='&lt;%=InitParams %&gt;' /&gt;</code>

<code>      </code><code>&lt;/</code><code>a</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>object</code><code>&gt;&lt;</code><code>iframe</code> <code>id</code><code>=</code><code>"_sl_historyFrame"</code> <code>style</code><code>=</code><code>"visibility:hidden;height:0px;width:0px;border:0px"</code><code>&gt;&lt;/</code><code>iframe</code><code>&gt;&lt;/</code><code>div</code><code>&gt;</code>

<code>&lt;/</code><code>form</code><code>&gt;</code>

在後來代碼中,InitParams 如此定義:

<code>public</code> <code>string</code> <code>InitParams {</code><code>get</code><code>;</code><code>set</code><code>; }</code>

<code>protected</code> <code>void</code> <code>Page_Load(</code><code>object</code> <code>sender, EventArgs e)</code>

<code>    </code><code>if</code> <code>(!IsPostBack)</code>

<code>        </code><code>try</code>

<code>            </code><code>InitParams =</code><code>"Title=施工計劃,DateColCount=80,PlanHeads=工程名稱,Data="</code><code>;</code>

<code>            </code><code>List&lt;PlansData&gt; _lstPlansData =</code><code>new</code> <code>List&lt;PlansData&gt;();</code>

<code>            </code><code>LoadData(_lstPlansData);</code>

<code>            </code><code>InitParams += HttpUtility.UrlEncode(JsonConvert.SerializeObject(_lstPlansData, Formatting.Indented));</code>

<code>            </code><code>//LogManager.WriteTraceLog(JsonConvert.SerializeObject(_lstPlansData, Formatting.Indented));</code>

<code>        </code><code>catch</code> <code>(Exception ex)</code>

<code>            </code><code>LogManager.WriteErrorLog(ex);</code>

<code>private</code> <code>static</code> <code>void</code> <code>LoadData(List&lt;PlansData&gt; _lstPlansData)</code>

<code>    </code><code>PlansData _planData1 =</code><code>new</code> <code>PlansData()</code>

<code>        </code><code>LstPlan =</code><code>new</code> <code>List&lt;Plan&gt;()</code>

<code>            </code><code>new</code> <code>Plan(){PlanName=</code><code>"木工輕鋼割斷牆"</code><code>}</code>

<code>        </code><code>LstPlanDate =</code><code>new</code> <code>List&lt;PlanDate&gt;()</code>

<code>                </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now,EndDate=DateTime.Now.AddDays(3),Explain=</code><code>"基準時間"</code><code>,IsReadOnly=</code><code>true</code><code>},</code>

<code>                </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(1),EndDate=DateTime.Now.AddDays(4),Explain=</code><code>"計劃時間"</code><code>,CanGreaterThanNow=</code><code>true</code><code>},</code>

<code>                </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(2),EndDate=DateTime.Now.AddDays(5),Explain=</code><code>"實際時間"</code><code>,IsFlish=</code><code>true</code><code>,AllowBlank=</code><code>false</code><code>}</code>

<code>    </code><code>_lstPlansData.Add(_planData1);</code>

<code>    </code><code>PlansData _planData2 =</code><code>new</code> <code>PlansData()</code>

<code>            </code><code>new</code> <code>Plan(){PlanName=</code><code>"貼文化石,刷漆"</code><code>}</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(5),EndDate=DateTime.Now.AddDays(16),Explain=</code><code>"計劃時間"</code><code>,CanGreaterThanNow=</code><code>true</code><code>},</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(4),EndDate=DateTime.Now.AddDays(15),Explain=</code><code>"實際時間"</code><code>}</code>

<code>    </code><code>_lstPlansData.Add(_planData2);</code>

<code>    </code><code>PlansData _planData3 =</code><code>new</code> <code>PlansData()</code>

<code>            </code><code>new</code> <code>Plan(){PlanName=</code><code>"石膏闆吊棚"</code><code>}</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(5),EndDate=DateTime.Now.AddDays(18),Explain=</code><code>"基準時間"</code><code>,IsReadOnly=</code><code>true</code><code>,CanGreaterThanNow=</code><code>true</code><code>},</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(8),EndDate=DateTime.Now.AddDays(12),Explain=</code><code>"計劃時間"</code><code>},</code>

<code>    </code><code>_lstPlansData.Add(_planData3);</code>

<code>    </code><code>PlansData _planData4 =</code><code>new</code> <code>PlansData()</code>

<code>            </code><code>new</code> <code>Plan(){PlanName=</code><code>"大白乳膠漆"</code><code>}</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(15),EndDate=DateTime.Now.AddDays(18),Explain=</code><code>"基準時間"</code><code>,IsReadOnly=</code><code>true</code><code>},</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(19),EndDate=DateTime.Now.AddDays(25),Explain=</code><code>"計劃時間"</code><code>},</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now,EndDate=DateTime.Now.AddDays(5),Explain=</code><code>"實際時間"</code><code>}</code>

<code>    </code><code>_lstPlansData.Add(_planData4);</code>

<code>    </code><code>PlansData _planData5 =</code><code>new</code> <code>PlansData()</code>

<code>            </code><code>new</code> <code>Plan(){PlanName=</code><code>"鋪地闆"</code><code>}</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(3),EndDate=DateTime.Now.AddDays(5),Explain=</code><code>"基準時間"</code><code>},</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(6),EndDate=DateTime.Now.AddDays(15),Explain=</code><code>"計劃時間"</code><code>},</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(7),EndDate=DateTime.Now.AddDays(19),Explain=</code><code>"實際時間"</code><code>}</code>

<code>    </code><code>_lstPlansData.Add(_planData5);</code>

<code>    </code><code>PlansData _planData6 =</code><code>new</code> <code>PlansData()</code>

<code>            </code><code>new</code> <code>Plan(){PlanName=</code><code>"測試1"</code><code>}</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now,EndDate=DateTime.Now,Explain=</code><code>"基準時間"</code><code>},</code>

<code>            </code><code>new</code> <code>PlanDate(){StartDate=DateTime.Now.AddDays(79),EndDate=DateTime.Now.AddDays(79),Explain=</code><code>"實際時間"</code><code>}</code>

<code>    </code><code>_lstPlansData.Add(_planData6);</code>