云自无心水自闲

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Fiddler是一个微软开发的Http代理,可以用于跟踪调试客户端与服务器之间的Http信息,Fiddler监控所有的Http往来,可以设置断点,窜改出入数据。


posted @ 2006-10-10 17:28 云自无心水自闲 阅读(4375) | 评论 (3)编辑 收藏

在ActionScript3.0中是不支持函数重载的.
最近, 想了个办法来模拟.
public function add(obj1 : Object = null, obj2: Object = null) : void {
    
if (obj1 == null && obj2 == null ) {
         
// 调用无参数Add函数
         AddNoArgument();
    }
    
else if ( typeof(obj1).toString().toLowerCase() == "string"&& obj2 == null ) {
         
// 调用String参数的Add函数
         AddString(obj1.toString());
    }
}
当然这个方法也会有一些问题.
第二种方法
public function add( args) : void {
    
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 云自无心水自闲 阅读(969) | 评论 (0)编辑 收藏

XtraReports的设计器可以作为给终端用户使用的独立的报表设计器, 也就是说用户可以自己编辑,预览,甚至创建报表. 这个设计器和Visual Studio的集成开发环境很象, 可以定制外观, 满足用户的需要. 甚至, 你可以自己创建报表设计器, 因为在XtraReport中设计器是一个分开独立的控件.
    先介绍一下设计器的组成元件. 报表设计器主要是用于使用户可以编辑报表. 标准的设计器是使用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的实例, 但一般不需要手工创建此对象. 通常使用以下代码:
// Create a new report.
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 云自无心水自闲 阅读(3906) | 评论 (0)编辑 收藏

在此介绍创建报表过程中使用到的XtraReports的控件. 所有的控件都可以在设计时,运行时,或者通过设计器添加到报表中, 本文介绍的是一些最基本的信息.

报表控件概览

XtraReports中的所有报表对象都通过在Bands中的控件来表现. 在设计时, 报表控件可以从工具箱添加到报表中, 只有点击工具箱中需要的控件, 然后放到报表带中即可. 另一种方式是使用字段列举窗口添加控件, 这种情况下, 控件将和数据字段绑定.

如果要在运行时添加报表控件, 你只需要简单地创建一个相应类型的变量, 并通过XRControlCollection.Add方法添加到报表带中即可

所有的报表控件包括bands都是继承自XRControl. 其中部分控件可以还作为容器, 这种情况下控件集合可以通过XRControl.Controls来获得. 如果要获取控件的容器, 可使用XRControl.Parent属性.

下面列举了XtraReports中的标准报表控件.

Class Description
Subreport 用于在报表中添加子报表. 被添加的报表需要被包含在项目中, 并设置SubReport的ReportSource属性. 子报表可用于合并报表和创建主从表.
WinControlContainer 用于添加Windows Forms或者第三方的控件. 此对实际上是添加的控件的封装, 并提供对Drawing方法的支持
XRBarCode 用于在报表中显示条形码. 使用XRBarCode.Symbology和XRBarCode.SymbologyId来设置条形码的类型
XRChart 在报表中显示图形, 使用此控件来根据一个或多个SeriesViewTypes来展示不同的数据.
XRCheckBox 用于在报表中展示复选框.
XRLabel 标签. 可以是单行的, 也可以是多行的.
XRLine 线条. 使用这个控件来画线.
XRPageBreak 换页. 如果是Band中需要换页, 那么使用控件的Band.PageBreak属性比较好.
XRPageInfo 显示报表页面的附加信息. 可以显示页码, 日期或者其他信息.
XRPanel 用于包含其他控件的控件. 可以使用此控件来进行控件的分组.
XRPictureBox 在报表中显示一个图片
XRRichText 显示一个控件, 用于显示,输入,修改格式化的文本. 可以用XRRichText.LoadFile从文件中加载文本.
XRTable 表格
XRTableCell 表格单元. 与XRControl.Text绑定
XRTableRow 表格中的行. 通过不需要用到此控件, 直接操作表格单元更普遍.
XRZipCode 邮政编码


posted @ 2006-09-25 11:55 云自无心水自闲 阅读(11792) | 评论 (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 云自无心水自闲 阅读(8044) | 评论 (0)编辑 收藏

在XtraReport中, 每一个报表都是XtraReport或者其子类. 打个比方说, XtraReport就好象Windows Forms. 同样的道理, 所有的form都Form类的子类.

  XtraReport中的报表类可以与数据绑定也可以不绑定. 如果要创建一个绑定数据的报表, 需要查看<数据绑定>和<绑定数据控件>这两个主题的帮助.
  在创建一个报表时, 可以从已有的报表中加载样式和布局, 样式中包含了报表控件外观的属性值, 而布局包含了报表的结构信息. 另外, 还可以从其他报表系统中导入报表, 比如: Access, 水晶报表等等, 如果要详细了解XtraReport的导入功能, 请参阅<Importing Overview>主题.
  报表类(XtraReport的子类)创建后, 就可以生成其实例. 需要注意的是, XtraReport对象可以在Windows Forms中使用也可以在Asp.net中使用. 在Windows应用中使用报表, 通常需要维护报表的<Printing System>, 这个对象提供了报表的输出功能.

  创建报表有两种方式, 一种是简单地添加一个"模板"报表, 一种是通过报表向导来创建报表. 在报表添加到项目后, 报表设计器提供了大量的设计时元素来加快简化报表的创建. XtraReport工具箱包含了所有的控件, Report Navigator可以浏览整个报表, Feild List可以拖放数据字段来创建与数据绑定的报表控件.
   XtraReport的所有报表都是由<Report Band>和<Report Control>组成的.
public class XtraReport1 : DevExpress.XtraReports.UI.XtraReport
{
   
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属性中添加控件. 报表带和控件的添加方法一般是这样的
// Add Detail, PageHeader and PageFooter bands to the report's collection of bands.
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});

最后创建好的报表可以输出给用户看了
// Create a report.
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 云自无心水自闲 阅读(14497) | 评论 (1)编辑 收藏

1. 我从未创建过一个不使用Cairngorm的RIA应用, 甚至是连一个Mini项目我也使用了Cairngorm.
使用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 云自无心水自闲 阅读(1139) | 评论 (0)编辑 收藏

Cairngorm的组成:
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 云自无心水自闲 阅读(4207) | 评论 (4)编辑 收藏

在Flex2中VideoDisplay取代了1.5中的MediaPlay,提供播放Flv视频的功能.
而且对于此组件的控制都需要自己编写.
最近遇到一个问题,就是想通过设置PlayheadTime来实现视频播放时间的跳转时,发现有时会出现失灵的情况.
经研究后发现主要是因为组件加载视频不完整的原因.
经过测试,如果是在本地的开发环境中,视频的加载非常快,100M的Flv几乎是瞬间加载完毕.
但是如果将编译生成的SWF文件上传到服务器,然后加载Flv文件,速度非常慢,主要是需要通过互联网传送.
所以会出现在本地开发时,视频的跳转一切正常.但是在服务器上却屡屡出错.

解决方法: 可以在视频加载过程Progress事件中添加代码,强制在全部加载完成后启动播放.

    if ( videoPlayer.bytesLoaded / videoPlayer.bytesTotal > 0.99 )
        videoPlayer.play();

posted @ 2006-08-21 08:42 云自无心水自闲 阅读(1814) | 评论 (4)编辑 收藏

开源项目fluorine(Flex与.net的AMF0网关、WebORB的替代者)使用注意事项
网站链接: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 云自无心水自闲 阅读(2602) | 评论 (4)编辑 收藏

仅列出标题
共29页: First 上一页 21 22 23 24 25 26 27 28 29 下一页