posted @ 2006-10-10 17:28 云自無心水自閑 閱讀(4386) | 評論 (3) | 編輯 收藏
最近, 想了個辦法來模擬.
????if?(obj1?==?null?&&?obj2?==?null?)?{
?????????//?調用無參數Add函數
?????????AddNoArgument();
????}
????else?if?(?typeof(obj1).toString().toLowerCase()?==?"string")?&&?obj2?==?null?)?{
?????????//?調用String參數的Add函數
?????????AddString(obj1.toString());
????}
}
第二種方法

????if?(args.length?==?0)?{
?????????//?調用無參數Add函數
?????????AddNoArgument();
????}
????else?if?(?args.length?==?1?&&?typeof(args[0])?==?"int")?)?{
?????????//?調用String參數的Add函數
?????????AddString(args[0].toString());
????}
}
其中addString是add函數的String類型的重載函數.
如果大家有什么更好的解決方案, 請不吝賜教.
posted @ 2006-09-28 10:28 云自無心水自閑 閱讀(972) | 評論 (0) | 編輯 收藏
??? 先介紹一下設計器的組成元件. 報表設計器主要是用于使用戶可以編輯報表. 標準的設計器是使用XRDesignFormEx類來展示的, 這個類提供了編輯和創建報表的主要功能.
??? 下圖是一個標準的報表設計器:

??? 這個Form里包含了不同的元件: 報表在XRDesignPanel對象中被編輯, 其他工具欄和停靠面板由XRDesignBarManager和XRDesignDockManager控制. 所有的這些控件都可以通過設計Form的XRDesignFormExBase.DesignPanel, XRDesignFormEx.DesignBarManager和XRDesignFormEx.DesignDockManager屬性來操作.
??? 下面列舉了設計器中使用的元件接口.
Element | Description |
---|---|
Design Panel | 這是報表設計器的主要元件. 它展示了一個面板用于創建一個新的報表或者編輯原有的報表. 它顯示報表帶并控制報表帶中控件的歸屬, 并可以移動, 縮放, 復制, 粘貼這些控件, 另外還可以在控件上綁定數據, 或者進行其他的操作.? 而且可以預覽報表效果. |
Main Menu | 展示報表設計器的主菜單. 包含了一系列的項目和子項目, 用于為用戶提供相關操作. 通常, 它復制所有的ToolBar按鈕, 格式化按鈕以及布局按鈕. |
Main Toolbar | 展示報表設計器的ToolBar. 包含創建報表, 保存裝載報表布局, 剪裁,復制,粘貼等按鈕, 以及撤銷, 重做等操作. |
Formatting Toolbar | 展示報表設計器的格式化Toolbar. 包含一些缺省的操作文本的按鈕. |
Layout Toolbar | 展示報表設計器的布局Toolbar. 包含縮放, 移動一組控件位置的按鈕. |
Status Bar | 在報表設計器底部展示StatusBar. 通常用于顯示報表編輯操作過程中的特殊信息. |
Toolbox | 展示報表設計器的控件工具箱. 包含所有報表控件, 可以拖放新的控件到報表區中. 可以添加自定義控件到工具箱中. |
Report Explorer | 展示報表設計器的Explorer. 它顯示了報表樹狀結構, 使用它可以很方便地瀏覽整個報表. |
Field List | 展示了報表設計器的樹狀字段列表. 顯示了數據源的樹狀結構. 用于將數據綁定到報表. |
Property Grid | 展示報表設計器的屬性容器. 可以修改報表元件的屬性. |
??? 激活報表設計器: 盡管報表設計器是XRDesignFromEx的實例, 但一般不需要手工創建此對象. 通常使用以下代碼:
XtraReport1?report?=?new?XtraReport1();
//?Invoke?the?End-User?Designer?and?load?the?report?into?it.
report.ShowDesigner();
//?Invoke?the?End-User?Designer?and?load?the?report?into?it,?modally.
report.ShowDesignerDialog();
posted @ 2006-09-26 16:53 云自無心水自閑 閱讀(3926) | 評論 (0) | 編輯 收藏
在此介紹創建報表過程中使用到的XtraReports的控件. 所有的控件都可以在設計時,運行時,或者通過設計器添加到報表中, 本文介紹的是一些最基本的信息.
報表控件概覽
XtraReports中的所有報表對象都通過在Bands中的控件來表現. 在設計時, 報表控件可以從工具箱添加到報表中, 只有點擊工具箱中需要的控件, 然后放到報表帶中即可. 另一種方式是使用字段列舉窗口添加控件, 這種情況下, 控件將和數據字段綁定.
如果要在運行時添加報表控件, 你只需要簡單地創建一個相應類型的變量, 并通過XRControlCollection.Add方法添加到報表帶中即可
所有的報表控件包括bands都是繼承自XRControl. 其中部分控件可以還作為容器, 這種情況下控件集合可以通過XRControl.Controls來獲得. 如果要獲取控件的容器, 可使用XRControl.Parent屬性.
下面列舉了XtraReports中的標準報表控件.
Class | Description |
---|---|
![]() |
用于在報表中添加子報表. 被添加的報表需要被包含在項目中, 并設置SubReport的ReportSource屬性. 子報表可用于合并報表和創建主從表. |
![]() |
用于添加Windows Forms或者第三方的控件. 此對實際上是添加的控件的封裝, 并提供對Drawing方法的支持 |
![]() |
用于在報表中顯示條形碼. 使用XRBarCode.Symbology和XRBarCode.SymbologyId來設置條形碼的類型 |
![]() |
在報表中顯示圖形, 使用此控件來根據一個或多個SeriesViewTypes來展示不同的數據. |
![]() |
用于在報表中展示復選框. |
![]() |
標簽. 可以是單行的, 也可以是多行的. |
![]() |
線條. 使用這個控件來畫線. |
![]() |
換頁. 如果是Band中需要換頁, 那么使用控件的Band.PageBreak屬性比較好. |
![]() |
顯示報表頁面的附加信息. 可以顯示頁碼, 日期或者其他信息. |
![]() |
用于包含其他控件的控件. 可以使用此控件來進行控件的分組. |
![]() |
在報表中顯示一個圖片 |
![]() |
顯示一個控件, 用于顯示,輸入,修改格式化的文本. 可以用XRRichText.LoadFile從文件中加載文本. |
![]() |
表格 |
![]() |
表格單元. 與XRControl.Text綁定 |
![]() |
表格中的行. 通過不需要用到此控件, 直接操作表格單元更普遍. |
![]() |
郵政編碼 |
posted @ 2006-09-25 11:55 云自無心水自閑 閱讀(11812) | 評論 (5) | 編輯 收藏
一個普通的XtraReport報表一般包含數個包含報表控件的帶. 在這里介紹一個XtraReports中的幾種不同類型的帶, 他們都有一些什么用途, 又是如何添加,編輯,刪除.
Report Bands
在把報表添加到應用之后, 缺省的樣子如下圖所示. 可以看到, 報表被初始化分為3個基本的帶(頁頭, 明細, 和頁腳), 這些帶中可以添加不同的報表控件.

每一種帶指明了控件在報表中是怎樣定位和被打印的, 即確定了打印的順序和次數. 注意, 有些<band strips>包含了帶是如何被打印的信息, 比如: PageHeader和PageFooter就說明了是每一頁都有這一帶的.
在創建報表時, 可以添加或者刪除任意的帶. 在XtraReports中有很多不同類型的帶, 每一個都是<Band>的子類. 列舉如下:
Bands類 | 描述 |
---|---|
TopMarginBand | 用于放置出現在報表每頁頁頭最上面的控件 |
ReportHeaderBand | 用于放置出現在報表開頭的控件 |
PageHeaderBand | 用于放置出現在報表頁上面, 僅次于TopMarginBand位置的控件. 主要是用于放置需要分頁的表格的頭, |
GroupHeaderBand | 用于放置明細帶中分組記錄的頭部控件.? |
DetailBand | 用于顯示綁定數據的每條記錄 |
DetailReportBand | 用于創建主從報表. 主從關系由從報表的XtraReportsBase.DataMember屬性指定 |
GroupFooterBand | 用于放置明細帶中分組記錄下方的控件 |
PageFooterBand | 用于放置報表頁下方的控件 |
ReportFooterBand | 用于放置報表結束的控件 |
BottomMarginBand | 用于放置報表每頁最下方的控件 |
|
下圖顯示了不同類型的帶的相對位置:

TopMarginBand and BottomMarginBand
ReportHeaderBand and ReportFooterBand
PageHeaderBand and PageFooterBand
GroupHeaderBand and GroupFooterBand
DetailBand
報表的預覽顯示的不是帶本身, 而是<PrintingSystem>的輸出. PageHeaderBand, PageFooterBand, TopMarginBand和BottomMarginBand在報表預覽的每一頁都有輸出. ReportHeaderBand和ReportFooterBand類只顯示一次. GroupHeaderBand和GroupFooterBand出現在每個記錄組中.
posted @ 2006-09-22 11:05 云自無心水自閑 閱讀(8067) | 評論 (0) | 編輯 收藏

? XtraReport中的報表類可以與數據綁定也可以不綁定. 如果要創建一個綁定數據的報表, 需要查看<數據綁定>和<綁定數據控件>這兩個主題的幫助.
? 在創建一個報表時, 可以從已有的報表中加載樣式和布局, 樣式中包含了報表控件外觀的屬性值, 而布局包含了報表的結構信息. 另外, 還可以從其他報表系統中導入報表, 比如: Access, 水晶報表等等, 如果要詳細了解XtraReport的導入功能, 請參閱<Importing Overview>主題.
? 報表類(XtraReport的子類)創建后, 就可以生成其實例. 需要注意的是, XtraReport對象可以在Windows Forms中使用也可以在Asp.net中使用. 在Windows應用中使用報表, 通常需要維護報表的<Printing System>, 這個對象提供了報表的輸出功能.
? 創建報表有兩種方式, 一種是簡單地添加一個"模板"報表, 一種是通過報表向導來創建報表. 在報表添加到項目后, 報表設計器提供了大量的設計時元素來加快簡化報表的創建. XtraReport工具箱包含了所有的控件, Report Navigator可以瀏覽整個報表, Feild List可以拖放數據字段來創建與數據綁定的報表控件.
?? XtraReport的所有報表都是由<Report Band>和<Report Control>組成的.
{
???private?DevExpress.XtraReports.UI.DetailBand?Detail;
???private?DevExpress.XtraReports.UI.PageHeaderBand?PageHeader;
???private?DevExpress.XtraReports.UI.PageFooterBand?PageFooter;
???private?DevExpress.XtraReports.UI.XRLabel?xrLabel1;
???private?DevExpress.XtraReports.UI.XRLabel?xrLabel2;
???private?System.ComponentModel.Container?components?=?null;
???public?XtraReport1()
???{
??????InitializeComponent();
???}
???protected?override?void?Dispose(?bool?disposing?)
???{
??????if(?disposing?)
??????{
?????????if(components?!=?null)
?????????{
????????????components.Dispose();
?????????}
??????}
??????base.Dispose(?disposing?);
???}
??
???//?

? 然后開始創建報表的結構, 首先在XtraReportBase.Bands屬性中添加Bands, 然后在相應的Bands的XRControl.Controls屬性中添加控件. 報表帶和控件的添加方法一般是這樣的
this.Bands.AddRange(new?DevExpress.XtraReports.UI.Band[]?{this.Detail,?this.PageHeader,?this.PageFooter});
//?Add?two?XRLabel?controls?to?the?Detail?band.
this.Detail.Controls.AddRange(new?DevExpress.XtraReports.UI.XRControl[]?{this.xrLabel1,?this.xrLabel2});
最后創建好的報表可以輸出給用戶看了
XtraReport1?report?=?new?XtraReport1();
//?Create?the?report's?document?so?it?can?then?be?previewed,?printed?or?exported.
//?NOTE:?Usually?you?don't?need?to?call?this?method?as?it's?automatically?called?by?all?of?the?following?methods.
//?See?the?corresponding?member?topic?to?find?out?when?it?needs?to?be?called.
report.CreateDocument();
//?Show?the?form?with?the?report's?print?preview.
report.ShowPreview();
//?Print?the?report?in?a?dialog?and?"silent"?mode.
report.PrintDialog();
report.Print();
//?Open?the?report?in?the?End-User?designer
report.RunDesigner();
//?Export?the?report.
report.CreateHtmlDocument("report.html");
report.CreatePdfDocument("report.pdf");
report.CreateImage("report.jpg",?System.Drawing.Imaging.ImageFormat.Gif);
附: XtraReport的類結構層次圖:

posted @ 2006-09-22 10:20 云自無心水自閑 閱讀(14544) | 評論 (1) | 編輯 收藏
使用Cairngorm放大或者說是加劇了學習曲線, 大多數第一次使用Flex的開發者是從創建小的應用開始逐步了解Flex的思想和概念. 所以最好先從使用容器和組件,創建動態界面,使用WebService/HTTP Service,綁定其返回結果這樣的步驟開始.
然后嘗試更新后臺的持久數據,使用ColdFunsion/Java/C#/PHP等等.這是Flex開發者學習道路上的一個里程碑.
接下來,可以去理解風格/狀態/效果這樣的Flex功能, 在Mxml中寫一些ActionScript.
以上的這些步驟都不涉及到Cairngorm,直到你能熟練地使用Flex后, 可以去閱讀Cairngorm的系列文章(http://www.adobe.com/devnet/flex/articles/cairngorm_pt1.html)
2. 你的應用與用戶的交互非常少,只有一兩個
這主要是用于衡量應用的復雜性,如果你的應用中的用戶用例(Use-Case)比較多,那么Cairngorm對你將會非常有價值.
相反,如果用例比較少,那么你完全可以不使用Cairngorm來完成應用.
最好的解決方案不是無物可加,而是無物可舍!
the best solution is not when there is nothing left to add, but when there is nothing left to take away!
3. 你是應用的唯一開發者
Cairngorm的優點是可控性/可維護性/伸縮性, 在別人的工作基礎添加功能變得非常非常容易.
而如果只有你一個開發者,那么不使用Cairngorm將會一種簡潔的做法.
4. 你發現了Cairngorm的Bug
如果你發現了Bug,那么就不適合在重要的項目中使用Cairngorm.
Cairngorm并不是完全沒有Bug,在早期的Beta版中,和其他軟件產品一樣,我們忽略了一些偶爾出現的Bug.
posted @ 2006-09-12 13:41 云自無心水自閑 閱讀(1149) | 評論 (0) | 編輯 收藏
1. Model Locator:保存應用的ValueObject(數據)和共享變量,與HttpSession類似,只不過是保存在客戶端而不是在服務器端而已
2. View:一個或者多個Flex組件(按鈕、Panel、下拉框等等)組合在成一個被命名的單元。綁定Model Locator中的數據,根據用戶動作(點擊、滾動、拖放)產生自定義的Cairngorm事件。
3. Front Controller:接收Cairngorm事件,并映射到對應的Cairngorm命令。
4. Command:處理業務邏輯,調用Cairngorm的代理或者其他命令,更新Model Locator中的Value Object和變量值。
5. Delegate:在命令中創建,初始化一個遠程調用(Http, WebService等等),并將返回結果傳遞給Command。
6. Service:定義遠程調用連接遠程的數據存儲。
Cairngorm的工作方式:
1. 客戶端界面由各個View組成,View通過綁定Model Locator的成員來顯示數據。View根據用戶操作生成事件。這些事件由Front Controller廣播并接收,然后映射到相應的命令。命令包含業務邏輯、創建代理來完成操作,處理代理返回的結果,并更新Model Locator的數據。因為View是與Model Locator中的數據綁定的,因此Model Locator中數據更新后,View自動反應出數據的變化。由代理調用服務并返回處理結果不是必須的,但是這是推薦做法。
posted @ 2006-08-31 09:36 云自無心水自閑 閱讀(4220) | 評論 (4) | 編輯 收藏
而且對于此組件的控制都需要自己編寫.
最近遇到一個問題,就是想通過設置PlayheadTime來實現視頻播放時間的跳轉時,發現有時會出現失靈的情況.
經研究后發現主要是因為組件加載視頻不完整的原因.
經過測試,如果是在本地的開發環境中,視頻的加載非常快,100M的Flv幾乎是瞬間加載完畢.
但是如果將編譯生成的SWF文件上傳到服務器,然后加載Flv文件,速度非常慢,主要是需要通過互聯網傳送.
所以會出現在本地開發時,視頻的跳轉一切正常.但是在服務器上卻屢屢出錯.
解決方法: 可以在視頻加載過程Progress事件中添加代碼,強制在全部加載完成后啟動播放.
??? if ( videoPlayer.bytesLoaded / videoPlayer.bytesTotal > 0.99 )
??? ??? videoPlayer.play();
posted @ 2006-08-21 08:42 云自無心水自閑 閱讀(1818) | 評論 (4) | 編輯 收藏
網站鏈接:http://fluorine.thesilentgroup.com/fluorine/index.html
Fluorine是與AmfPHP、OpenAmf類似的但是用于.net平臺的開源AMF網關。可以應用在Flex2與.net(1.1與2.0)中。
通過使用Fluorine可以在Flex中直接調用.net程序中類的相應方法,并且完成了Class Mapping。也就是說可以傳遞一個復雜對象作為參數。
通過我的試驗發現,.net返回的DataTable可以被正確地解析為AS3中的Array
下面是我在使用的發現的一些注意事項:
Flex端:
1. 在VO的構造函數中需要調用flash.net.registerClassAlias("com.ariaware.pizza.vo.OrderVO", OrderVO);
其中第一個參數是VO在.net端的Assemble全稱,即NameSpace+類名,第二個參數是ActionScript中的VO類
2. GateWayURL需要書寫正確,一般的形式是:var gatewayURL:String = "http://localhost/FluorinePizzaService/Gateway.aspx";
3. 在指定.net端類名和方法名的時候,注意大小寫一致 var pizzaService:AMF0Service = new AMF0Service ( gatewayURL, "pizzaService", null );
.net端
1. 注意VO中的字段名稱與Flex端VO類中的名稱一定要完全對應,否則就取不到對應的值。
2. 需要在Web.config中添加下面幾行,緊跟在<system.web>后面就行了
?? ?<httpModules>
?? ??? ?<add name="FluorineGateway" type="com.TheSilentGroup.Fluorine.FluorineGateway, com.TheSilentGroup.Fluorine" />
? </httpModules>
?
3. 項目中需要引用com.TheSilentGroup.Fluorine這個Dll
4. 需要在項目中添加Gateway.aspx這樣一個空的Web窗體
使用時:
1. 需要注意清除一下本地的Cookie,如果有一個名為.ASPXAUTH的Cookie如果不為空,會造成FormsAuthentication.Decrypt的錯誤。
posted @ 2006-08-03 17:34 云自無心水自閑 閱讀(2640) | 評論 (4) | 編輯 收藏