<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>天地无用</title>
<link>http://blogger.org.cn/blog/blog.asp?name=kkk888929</link>
<description>kkk888929的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[oracle to_char 用法(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=47311</link>
<author>kkk888929</author>
<pubDate>2009/10/21 22:24:01</pubDate>
<description><![CDATA[<A>　
<DIV class=tit>oracle to_char 用法</DIV>
<DIV class=date>2008-08-04 13:38</DIV>
<TABLE style="TABLE-LAYOUT: fixed; WIDTH: 100%">
<TBODY>
<TR>
<TD>
<DIV class=cnt id=blog_text>
<DIV class=postText>
<P>The following are number examples for the <STRONG>to_char</STRONG> function.</P>
<BLOCKQUOTE>
<TABLE cellSpacing=0 cellPadding=3 width=432 border=0>
<TBODY>
<TR>
<TD class=function_example width=207>to_char(1210.73, '9999.9')</TD>
<TD class=function_desc>would return '1210.7'</TD></TR>
<TR>
<TD class=function_example>to_char(1210.73, '9,999.99')</TD>
<TD class=function_desc>would return '1,210.73'</TD></TR>
<TR>
<TD class=function_example>to_char(1210.73, '$9,999.00')</TD>
<TD class=function_desc>would return '$1,210.73'</TD></TR>
<TR>
<TD class=function_example>to_char(21, '000099')</TD>
<TD class=function_desc>would return '000021'</TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P></P>
<P>The following is a list of valid parameters when the <STRONG>to_char</STRONG> function is used to convert a date to a string. These parameters can be used in many combinations.</P>
<BLOCKQUOTE>
<TABLE class=parm_values cellSpacing=0 cellPadding=3 width=500 border=1>
<TBODY>
<TR class=th_left_top>
<TH width=93>Parameter</TH>
<TH>Explanation</TH></TR>
<TR class=tr_left_top>
<TD>YEAR</TD>
<TD>Year, spelled out</TD></TR>
<TR class=tr_left_top>
<TD>YYYY</TD>
<TD>4-digit year</TD></TR>
<TR class=tr_left_top>
<TD>YYY<BR>YY<BR>Y</TD>
<TD>Last 3, 2, or 1 digit(s) of year.</TD></TR>
<TR class=tr_left_top>
<TD>IYY<BR>IY<BR>I</TD>
<TD>Last 3, 2, or 1 digit(s) of ISO year.</TD></TR>
<TR class=tr_left_top>
<TD>IYYY</TD>
<TD>4-digit year based on the ISO standard</TD></TR>
<TR class=tr_left_top>
<TD>Q</TD>
<TD>Quarter of year (1, 2, 3, 4; JAN-MAR = 1).</TD></TR>
<TR class=tr_left_top>
<TD>MM</TD>
<TD>Month (01-12; JAN = 01).</TD></TR>
<TR class=tr_left_top>
<TD>MON</TD>
<TD>Abbreviated name of month.</TD></TR>
<TR class=tr_left_top>
<TD>MONTH</TD>
<TD>Name of month, padded with blanks to length of 9 characters.</TD></TR>
<TR class=tr_left_top>
<TD>RM</TD>
<TD>Roman numeral month (I-XII; JAN = I).</TD></TR>
<TR class=tr_left_top>
<TD>WW</TD>
<TD>Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.</TD></TR>
<TR class=tr_left_top>
<TD>W</TD>
<TD>Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.</TD></TR>
<TR class=tr_left_top>
<TD>IW</TD>
<TD>Week of year (1-52 or 1-53) based on the ISO standard.</TD></TR>
<TR class=tr_left_top>
<TD>D</TD>
<TD>Day of week (1-7).</TD></TR>
<TR class=tr_left_top>
<TD>DAY</TD>
<TD>Name of day.</TD></TR>
<TR class=tr_left_top>
<TD>DD</TD>
<TD>Day of month (1-31).</TD></TR>
<TR class=tr_left_top>
<TD>DDD</TD>
<TD>Day of year (1-366).</TD></TR>
<TR class=tr_left_top>
<TD>DY</TD>
<TD>Abbreviated name of day.</TD></TR>
<TR class=tr_left_top>
<TD>J</TD>
<TD>Julian day; the number of days since January 1, 4712 BC.</TD></TR>
<TR class=tr_left_top>
<TD>HH</TD>
<TD>Hour of day (1-12).</TD></TR>
<TR class=tr_left_top>
<TD>HH12</TD>
<TD>Hour of day (1-12).</TD></TR>
<TR class=tr_left_top>
<TD>HH24</TD>
<TD>Hour of day (0-23).</TD></TR>
<TR class=tr_left_top>
<TD>MI</TD>
<TD>Minute (0-59).</TD></TR>
<TR class=tr_left_top>
<TD>SS</TD>
<TD>Second (0-59).</TD></TR>
<TR class=tr_left_top>
<TD>SSSSS</TD>
<TD>Seconds past midnight (0-86399).</TD></TR>
<TR class=tr_left_top>
<TD>FF</TD>
<TD>Fractional seconds.</TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P></P>
<P>The following are date examples for the <STRONG>to_char</STRONG> function.</P>
<BLOCKQUOTE>
<TABLE cellSpacing=0 cellPadding=3 width=460 border=0>
<TBODY>
<TR>
<TD class=function_example width=253>to_char(sysdate, 'yyyy/mm/dd');</TD>
<TD class=function_desc>would return '2003/07/09'</TD></TR>
<TR>
<TD class=function_example>to_char(sysdate, 'Month DD, YYYY');</TD>
<TD class=function_desc>would return 'July 09, 2003'</TD></TR>
<TR>
<TD class=function_example>to_char(sysdate, 'FMMonth DD, YYYY');</TD>
<TD class=function_desc>would return 'July 9, 2003'</TD></TR>
<TR>
<TD class=function_example>to_char(sysdate, 'MON DDth, YYYY');</TD>
<TD class=function_desc>would return 'JUL 09TH, 2003'</TD></TR>
<TR>
<TD class=function_example>to_char(sysdate, 'FMMON DDth, YYYY');</TD>
<TD class=function_desc>would return 'JUL 9TH, 2003'</TD></TR>
<TR>
<TD class=function_example>to_char(sysdate, 'FMMon ddth, YYYY');</TD>
<TD class=function_desc>would return 'Jul 9th, 2003'</TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P></P>
<P>You will notice that in some examples, the <EM>format_mask</EM> parameter begins with "FM". This means that zeros and blanks are suppressed. This can be seen in the examples below.</P>
<BLOCKQUOTE>
<TABLE cellSpacing=0 cellPadding=3 width=460 border=0>
<TBODY>
<TR>
<TD class=function_example width=253>to_char(sysdate, 'FMMonth DD, YYYY');</TD>
<TD class=function_desc>would return 'July 9, 2003'</TD></TR>
<TR>
<TD class=function_example>to_char(sysdate, 'FMMON DDth, YYYY');</TD>
<TD class=function_desc>would return 'JUL 9TH, 2003'</TD></TR>
<TR>
<TD class=function_example>to_char(sysdate, 'FMMon ddth, YYYY');</TD>
<TD class=function_desc>would return 'Jul 9th, 2003'</TD></TR></TBODY></TABLE></BLOCKQUOTE>
<P>The zeros have been suppressed so that the day component shows as "9" as opposed to "09".</P><BR><BR>
<P>Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=670282<BR><BR><STRONG>PS: </STRONG><A href="http://hi.baidu.com/joecom/blog/item/07a4d6ca4a120546f31fe754.html"><STRONG>http://hi.baidu.com/joecom/blog/item/07a4d6ca4a120546f31fe754.html</STRONG></A><BR><STRONG>Oracle函数to_char转化数字型指定小数点位数的用法</STRONG></P>
<P>to_char，函数功能，就是将数值型或者日期型转化为字符型。</P>
<P>比如最简单的应用：</P>
<DIV style="BORDER-RIGHT: #8a8a8a 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #8a8a8a 1px solid; PADDING-LEFT: 6px; FONT-SIZE: 12px; PADDING-BOTTOM: 6px; MARGIN: 1px; OVERFLOW: auto; BORDER-LEFT: #8a8a8a 1px solid; PADDING-TOP: 6px; BORDER-BOTTOM: #8a8a8a 1px solid"><SPAN style="COLOR: #008000">/*1.0123---&gt;'1.0123'*/</SPAN> <BR><SPAN style="COLOR: #0000ff">Select</SPAN> <SPAN style="COLOR: #0000ff">TO_CHAR</SPAN>(1.0123) <SPAN style="COLOR: #0000ff">FROM</SPAN> <SPAN style="COLOR: #0000ff">DUAL</SPAN> <BR><SPAN style="COLOR: #008000">/*123---&gt;'123'*/</SPAN> <BR><SPAN style="COLOR: #0000ff">Select</SPAN> <SPAN style="COLOR: #0000ff">TO_CHAR</SPAN>(123) <SPAN style="COLOR: #0000ff">FROM</SPAN> <SPAN style="COLOR: #0000ff">DUAL</SPAN></DIV>
<P>接下来再看看下面：</P>
<DIV style="BORDER-RIGHT: #8a8a8a 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #8a8a8a 1px solid; PADDING-LEFT: 6px; FONT-SIZE: 12px; PADDING-BOTTOM: 6px; MARGIN: 1px; OVERFLOW: auto; BORDER-LEFT: #8a8a8a 1px solid; PADDING-TOP: 6px; BORDER-BOTTOM: #8a8a8a 1px solid"><SPAN style="COLOR: #008000">/*0.123 ---&gt; '.123' */</SPAN> <BR>SELEC <SPAN style="COLOR: #0000ff">TO_CHAR</SPAN>(0.123) <SPAN style="COLOR: #0000ff">FROM</SPAN> <SPAN style="COLOR: #0000ff">DUAL</SPAN></DIV>
<P>上面的结果 '.123' 在大多数情况下都不是我们想要的结果，我们想要的应该是 '0.123'。</P>
<P>我们来看一下to_char函数的具体用法：</P><PRE><STRONG>TO_CHAR</STRONG> ( n [, fmt [, 'nlsparam']] )</PRE>
<DIV style="BORDER-RIGHT: #8a8a8a 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #8a8a8a 1px solid; PADDING-LEFT: 6px; FONT-SIZE: 12px; PADDING-BOTTOM: 6px; MARGIN: 1px; OVERFLOW: auto; BORDER-LEFT: #8a8a8a 1px solid; PADDING-TOP: 6px; BORDER-BOTTOM: #8a8a8a 1px solid">该函数将NUMBER类型的n按数值格式fmt转换成VARCHAR2类型的值。<SPAN style="COLOR: #ff00ff">'nlsparams'</SPAN>指定由数值格式的元素返回的字符,包括: <BR><BR>．小数点字符 <BR><BR>．组分隔符 <BR><BR>．本地钱币符号 <BR><BR>．国际钱币符号 <BR><BR>变元的形式为： <BR><BR><SPAN style="COLOR: #ff00ff">'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'</SPAN> <BR><BR>其中d为小数点字符,g为组分隔符。 <BR><BR>例 :TO_CHAR (17145,<SPAN style="COLOR: #ff00ff">'L099G999'</SPAN>,<SPAN style="COLOR: #ff00ff">'NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"'</SPAN>)=NUD017,145</DIV>
<P>通过上面的了解，再查看fmt的一些格式，我们可以用以下表达式得到'0.123'的值：</P>
<DIV style="BORDER-RIGHT: #8a8a8a 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #8a8a8a 1px solid; PADDING-LEFT: 6px; FONT-SIZE: 12px; PADDING-BOTTOM: 6px; MARGIN: 1px; OVERFLOW: auto; BORDER-LEFT: #8a8a8a 1px solid; PADDING-TOP: 6px; BORDER-BOTTOM: #8a8a8a 1px solid"><SPAN style="COLOR: #008000">/*0.123 ---&gt; ' 0.123' */</SPAN> <BR><SPAN style="COLOR: #0000ff">Select</SPAN> <SPAN style="COLOR: #0000ff">TO_CHAR</SPAN>(0.123,<SPAN style="COLOR: #ff00ff">'0.999'</SPAN>) <SPAN style="COLOR: #0000ff">FROM</SPAN> <SPAN style="COLOR: #0000ff">DUAL</SPAN> <BR><SPAN style="COLOR: #008000">/*100.12 ---&gt; '######' */</SPAN> <BR><SPAN style="COLOR: #0000ff">Select</SPAN> <SPAN style="COLOR: #0000ff">TO_CHAR</SPAN>(100.12,<SPAN style="COLOR: #ff00ff">'0.999'</SPAN>) <SPAN style="COLOR: #0000ff">FROM</SPAN> <SPAN style="COLOR: #0000ff">DUAL</SPAN> <BR><SPAN style="COLOR: #008000">/*1.12 ---&gt; ' 1.120' */</SPAN> <BR><SPAN style="COLOR: #0000ff">Select</SPAN> <SPAN style="COLOR: #0000ff">TO_CHAR</SPAN>(1.12,<SPAN style="COLOR: #ff00ff">'0.999'</SPAN>) <SPAN style="COLOR: #0000ff">FROM</SPAN> <SPAN style="COLOR: #0000ff">DUAL</SPAN></DIV>
<P>' 0.123'是出来了，可是前面又多了一个空格。</P>
<P>对于 100.12 的值却是######，以及'1.12'的值变成了 '1.120'。</P>
<P>我们重新确定一个新的需求：</P>
<P>1、去空格</P>
<P>2、小数点最多4位，最少保留2位。</P>
<P>&nbsp;&nbsp;&nbsp; 1---&gt;'1.00'；1.1---&gt;'1.00'；1.12--&gt;'1.12'；1.1234---&gt;'1.1234'；</P>
<P>&nbsp;&nbsp;&nbsp; 1.12345---&gt;'1.1235'</P>
<P>最终实现如下：</P>
<DIV style="BORDER-RIGHT: #8a8a8a 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #8a8a8a 1px solid; PADDING-LEFT: 6px; FONT-SIZE: 12px; PADDING-BOTTOM: 6px; MARGIN: 1px; OVERFLOW: auto; BORDER-LEFT: #8a8a8a 1px solid; PADDING-TOP: 6px; BORDER-BOTTOM: #8a8a8a 1px solid"><SPAN style="COLOR: #008000">/* <BR>&nbsp;&nbsp; FM ：除空格&nbsp;&nbsp; <BR>&nbsp;&nbsp; 9999999.0099：允许小数点左边最大正数为7位，小数点右边最少2位，最多4位，且在第5位进行四舍五入 <BR>*/</SPAN> <BR><SPAN style="COLOR: #0000ff">Select</SPAN> <SPAN style="COLOR: #0000ff">TO_CHAR</SPAN>(123.0233,<SPAN style="COLOR: #ff00ff">'FM9999999.0099'</SPAN>) <SPAN style="COLOR: #0000ff">FROM</SPAN> <SPAN style="COLOR: #0000ff">DUAL</SPAN></DIV>
<P><BR>---------------JoeCom 2006-08-08</P></DIV>
<P class=postfoot>posted on 2007-01-04 18:12 <A href="http://www.cnblogs.com/songsh96/">Sammy</A> 阅读(9889) <A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#Post">评论(5)</A> <A href="http://www.cnblogs.com/songsh96/admin/EditPosts.aspx?postid=611654">编辑</A> <A href="http://www.cnblogs.com/songsh96/AddToFavorite.aspx?id=611654">收藏</A></P><IMG height=1 src="http://www.cnblogs.com/songsh96/aggbug/611654.html?type=1&amp;webview=1" width=1> 
<DIV><A name=pagedcomment></A><A name=评论>
<DIV>
<H3>评论</H3>
<H4></H4>
<P>PLSQL小经验一、 Oracle的to_char()函数功能很强大但是在用它格式化数值型数据时应该请注意以下几项。如果是小数如：0.23这样的数据经过to_char后再显示会变为.23，如果你为了让它显示出原来的0.23的话就得用To_char(要格式化的数值,’0.999’)保留三个小数，并显示但这里就要注意了。他为你截取小数的时候是四舍五入了。所以如果是要求截掉小数而不四舍五入的话就应该自己写个函数截下去后再规格化。以保证它不四舍五入。 <BR><BR>二、 To_char(1.9999,’FM90.0999’)这个函数规格化时90.0999的含义是有9的地方如果有数字就显示如果没有数字就不显示，有0的地方在没有数字的时候也会有０来占位.但这样做也有一个很大的缺点,就是如果是整数时它也仍然会显示”.”,不要小瞧这个点,一般来讲页面上要显示的话这个点就是多余的.也给我们造成了不小的麻烦.还要自己再写函数来把这个小点搞定. <BR><BR>三、 对于日期型的Oracle倒时提供了一个好的处理方法,可以把日期做成数值型的.然后再To_char就能显示出你所需要的类型了. <BR><BR>四、 在使用select into时一定要注意,这种方法你一定要确认肯定会有数据被查出时才能使用.如果查询结果为空时会导致报错.还有一种情况是查出来的数据是多条也会报错.所以应该尽量便宜游标来做.会减少错误产生的机率. <BR><BR>五、 还有注意一点rownum不支持排序,就是说你想用这个来控制行数的话就会发现他没有按你指定的排序方式显示.,这是一个很难办的事.而且如果你用rownum=2这样的语句来输出第二行的话也是行不通的. 六、 最恶心的一点是Oracle对null的判断变态到极点.如果你说某个变量 aa=null它是判断不出来的.尽管aa的确是空.即使在选择条件里也是判断不出来的.不知道为什么,只好用nvl()这个函数来判断了.在条件之外可以用 aa is null 来判断. <BR><BR>六 补充一点.就是在写存储过程时要注意参数名不能与数据库字段名相同.否则Oracle会把这个参数名看成是字段名的,即使你用表的别名区分也不行.所以起参数名的时候一定要注意这点.了 <BR>&nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">回复</A>&nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">引用</A>&nbsp;&nbsp;<A title=查看该作者发表过的评论 href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Sammy" target=_blank>查看</A>&nbsp;&nbsp;&nbsp;&nbsp;</P>
<H4><A title="permalink: re: oracle to_char 用法" href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#611671">#2楼</A> <A name=611671></A>[<SPAN class=louzhu>楼主</SPAN>] <SPAN>2007-01-04 18:50 </SPAN><A href="http://www.cnblogs.com/songsh96/" target=_blank>Sammy</A> <A class=sendMsg2This title=给此人发送站内短消息 href="http://space.cnblogs.com/msg/send/Sammy">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</A></H4>
<P>PLSQL小经验一、 Oracle的to_char()函数功能很强大但是在用它格式化数值型数据时应该请注意以下几项。如果是小数如：0.23这样的数据经过to_char后再显示会变为.23，如果你为了让它显示出原来的0.23的话就得用To_char(要格式化的数值,’0.999’)保留三个小数，并显示但这里就要注意了。他为你截取小数的时候是四舍五入了。所以如果是要求截掉小数而不四舍五入的话就应该自己写个函数截下去后再规格化。以保证它不四舍五入。 <BR><BR>二、 To_char(1.9999,’FM90.0999’)这个函数规格化时90.0999的含义是有9的地方如果有数字就显示如果没有数字就不显示，有0的地方在没有数字的时候也会有０来占位.但这样做也有一个很大的缺点,就是如果是整数时它也仍然会显示”.”,不要小瞧这个点,一般来讲页面上要显示的话这个点就是多余的.也给我们造成了不小的麻烦.还要自己再写函数来把这个小点搞定. <BR><BR>三、 对于日期型的Oracle倒时提供了一个好的处理方法,可以把日期做成数值型的.然后再To_char就能显示出你所需要的类型了. <BR><BR>四、 在使用select into时一定要注意,这种方法你一定要确认肯定会有数据被查出时才能使用.如果查询结果为空时会导致报错.还有一种情况是查出来的数据是多条也会报错.所以应该尽量便宜游标来做.会减少错误产生的机率. <BR><BR>五、 还有注意一点rownum不支持排序,就是说你想用这个来控制行数的话就会发现他没有按你指定的排序方式显示.,这是一个很难办的事.而且如果你用rownum=2这样的语句来输出第二行的话也是行不通的. 六、 最恶心的一点是Oracle对null的判断变态到极点.如果你说某个变量 aa=null它是判断不出来的.尽管aa的确是空.即使在选择条件里也是判断不出来的.不知道为什么,只好用nvl()这个函数来判断了.在条件之外可以用 aa is null 来判断. <BR><BR>六 补充一点.就是在写存储过程时要注意参数名不能与数据库字段名相同.否则Oracle会把这个参数名看成是字段名的,即使你用表的别名区分也不行.所以起参数名的时候一定要注意这点.了 <BR>&nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">回复</A>&nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">引用</A>&nbsp;&nbsp;<A title=查看该作者发表过的评论 href="http://www.cnblogs.com/CommentsByAuthor.aspx?author=Sammy" target=_blank>查看</A>&nbsp;&nbsp;&nbsp;&nbsp;</P>
<H4><A title="permalink: re: oracle to_char 用法" href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#691269">#3楼</A> <A name=691269></A><SPAN>2007-03-28 14:43 </SPAN><A target=_blank>Derek [未注册用户]</A></H4>
<P>=NULL 本来就不行啊，任何值都不等于null<BR><BR>To_char(1.9999,’FM90.0999’)这个函数规格化时90.0999的含义是有9的地方如果有数字就显示如果没有数字就不显示，有0 的地方在没有数字的时候也会有０来占位.但这样做也有一个很大的缺点,就是如果是整数时它也仍然会显示”.”,不要小瞧这个点,一般来讲页面上要显示的话这个点就是多余的.也给我们造成了不小的麻烦.还要自己再写函数来把这个小点搞定.-&gt;直接调用系统函数:<BR>rtrim(to_char(1,'FM90.999'),'.')就行了 &nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">回复</A>&nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">引用</A>&nbsp;&nbsp;&nbsp;&nbsp;</P>
<H4><A title="permalink: re: oracle to_char 用法" href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#1184761">#4楼</A> <A name=1184761></A><SPAN>2008-05-06 11:18 </SPAN><A target=_blank>kz [未注册用户]</A></H4>
<P>/* <BR>FM ：除空格 <BR>9999999.0099：允许小数点左边最大正数为7位，小数点右边最少2位，最多4位，且在第5位进行四舍五入 <BR>*/ <BR>如果第五位不想四舍五入怎么办？比如第五位就舍去。 &nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">回复</A>&nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">引用</A>&nbsp;&nbsp;&nbsp;&nbsp;</P>
<H4><A title="permalink: re: oracle to_char 用法" href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#1184809">#5楼</A> <A name=1184809></A><A name=Post></A><SPAN>2008-05-06 11:39 </SPAN><A target=_blank>ac [未注册用户]</A></H4>
<P>1.Select TO_CHAR(trunc(&amp;abc,3),'FM9999990.009') FROM DUAL <BR>2.Select TO_CHAR(&amp;abc-0.0005,'FM9999990.009') FROM DUAL &nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">回复</A>&nbsp;&nbsp;<A href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#post">引用</A>&nbsp;&nbsp;&nbsp;&nbsp;</P></DIV></A><A title="permalink: re: oracle to_char 用法" href="http://www.cnblogs.com/songsh96/archive/2007/01/04/611654.aspx#611670">#1楼</A> <A name=611670></A>[<SPAN class=louzhu>楼主</SPAN>] <SPAN>2007-01-04 18:49 </SPAN><A href="http://www.cnblogs.com/songsh96/" target=_blank>Sammy</A> <A class=sendMsg2This title=给此人发送站内短消息 href="http://space.cnblogs.com/msg/send/Sammy">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</A></DIV></DIV></TD></TR></TBODY></TABLE></A>]]></description>
</item><item>
<title><![CDATA[javascript操作cookie( 转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=46089</link>
<author>kkk888929</author>
<pubDate>2009/6/18 23:17:57</pubDate>
<description><![CDATA[
<P>编程快3年了，没用过COOKIE，今天看了看，用起来好简单<IMG src="http://blogger.org.cn/blog/images/emot/face2.gif">！</P>
<P>以下是转的文章，看过你就懂了！～～</P>
<DIV class=bar>
<DIV class=tools>Js代码 <A title=复制代码 onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://lectery.javaeye.com/blog/260488#"></A></DIV></DIV>
<OL class=dp-c>
<LI><SPAN><SPAN>&lt;script&gt; &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;</SPAN></LI>
<LI><SPAN></SPAN><SPAN class=comment><FONT color=#008200>//写cookies函数&nbsp;作者：翟振凯 </FONT></SPAN><SPAN>&nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>function</FONT></STRONG></SPAN><SPAN>&nbsp;SetCookie(name,value)</SPAN><SPAN class=comment><FONT color=#008200>//两个参数，一个是cookie的名子，一个是值 </FONT></SPAN><SPAN>&nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>{ &nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>var</FONT></STRONG></SPAN><SPAN>&nbsp;Days&nbsp;=&nbsp;30;&nbsp;</SPAN><SPAN class=comment><FONT color=#008200>//此&nbsp;cookie&nbsp;将被保存&nbsp;30&nbsp;天 </FONT></SPAN><SPAN>&nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>var</FONT></STRONG></SPAN><SPAN>&nbsp;exp&nbsp;&nbsp;=&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>new</FONT></STRONG></SPAN><SPAN>&nbsp;Date();&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=comment><FONT color=#008200>//new&nbsp;Date("December&nbsp;31,&nbsp;9998"); </FONT></SPAN><SPAN>&nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;exp.setTime(exp.getTime()&nbsp;+&nbsp;Days*24*60*60*1000); &nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;document.cookie&nbsp;=&nbsp;name&nbsp;+&nbsp;</SPAN><SPAN class=string><FONT color=#0000ff>"="</FONT></SPAN><SPAN>+&nbsp;escape&nbsp;(value)&nbsp;+&nbsp;</SPAN><SPAN class=string><FONT color=#0000ff>";expires="</FONT></SPAN><SPAN>&nbsp;+&nbsp;exp.toGMTString(); &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>} &nbsp;&nbsp;</SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>function</FONT></STRONG></SPAN><SPAN>&nbsp;getCookie(name)</SPAN><SPAN class=comment><FONT color=#008200>//取cookies函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN><SPAN>&nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>{ &nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>var</FONT></STRONG></SPAN><SPAN>&nbsp;arr&nbsp;=&nbsp;document.cookie.match(</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>new</FONT></STRONG></SPAN><SPAN>&nbsp;RegExp(</SPAN><SPAN class=string><FONT color=#0000ff>"(^|&nbsp;)"</FONT></SPAN><SPAN>+name+</SPAN><SPAN class=string><FONT color=#0000ff>"=([^;]*)(;|$)"</FONT></SPAN><SPAN>)); &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>if</FONT></STRONG></SPAN><SPAN>(arr&nbsp;!=&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>null</FONT></STRONG></SPAN><SPAN>)&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>return</FONT></STRONG></SPAN><SPAN>&nbsp;unescape(arr[2]);&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>return</FONT></STRONG></SPAN><SPAN>&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>null</FONT></STRONG></SPAN><SPAN>; &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>} &nbsp;&nbsp;</SPAN></LI>
<LI><SPAN></SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>function</FONT></STRONG></SPAN><SPAN>&nbsp;delCookie(name)</SPAN><SPAN class=comment><FONT color=#008200>//删除cookie </FONT></SPAN><SPAN>&nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>{ &nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>var</FONT></STRONG></SPAN><SPAN>&nbsp;exp&nbsp;=&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>new</FONT></STRONG></SPAN><SPAN>&nbsp;Date(); &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;exp.setTime(exp.getTime()&nbsp;-&nbsp;1); &nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>var</FONT></STRONG></SPAN><SPAN>&nbsp;cval=getCookie(name); &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>if</FONT></STRONG></SPAN><SPAN>(cval!=</SPAN><SPAN class=keyword><STRONG><FONT color=#7f0055>null</FONT></STRONG></SPAN><SPAN>)&nbsp;document.cookie=&nbsp;name&nbsp;+&nbsp;</SPAN><SPAN class=string><FONT color=#0000ff>"="</FONT></SPAN><SPAN>+cval+</SPAN><SPAN class=string><FONT color=#0000ff>";expires="</FONT></SPAN><SPAN>+exp.toGMTString(); &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>} &nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>&nbsp;&nbsp;</SPAN></LI>
<LI><SPAN>SetCookie&nbsp;(</SPAN><SPAN class=string><FONT color=#0000ff>"xiaoqi"</FONT></SPAN><SPAN>,&nbsp;</SPAN><SPAN class=string><FONT color=#0000ff>"3"</FONT></SPAN><SPAN>) &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>alert(getCookie(</SPAN><SPAN class=string><FONT color=#0000ff>'xiaoqi'</FONT></SPAN><SPAN>)); &nbsp;&nbsp;</SPAN></SPAN></LI>
<LI><SPAN>&lt;/script&gt;&nbsp;&nbsp;</SPAN></LI></OL>
<P><SPAN></SPAN>&nbsp;</P>
<P><SPAN>以下是俺的代码</SPAN></P>
<P><SPAN></SPAN>&nbsp;</P>
<P><SPAN></SPAN>&nbsp;</P>
<P>
<SCRIPT>   
//写cookies函数  
function SetCookie(name,value)//两个参数，一个是cookie的名子，一个是值   
{   
    var Days = 365; //此 cookie 将被保存 1 years   
    var exp  = new Date();    //new Date("December 31, 9998");   
    exp.setTime(exp.getTime() + Days*24*60*60*1000);   
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();   
}   
function getCookie(name)//取cookies函数           
{   
    var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));   
     if(arr != null) return unescape(arr[2]); return null;   
  
}   
function delCookie(name)//删除cookie   
{   
    var exp = new Date();   
    exp.setTime(exp.getTime() - 1);   
    var cval=getCookie(name);   
    if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();   
}   
  
  
  
//SetCookie ("xiaoqi", "3")   
//alert(getCookie('xiaoqi'));
function getSafeValue(){
 var tempV = getCookie('loginmail');
 if (tempV){
  document.getElementById('id1').value = tempV
  document.getElementById('checkbox1').checked=true
 }
}
function getSumit(){
 if (document.getElementById('checkbox1').checked){
  SetCookie("loginmail", document.getElementById('id1').value);
 }else{
  delCookie("loginmail");
 }
}
</SCRIPT>
<INPUT id=id1> <BR>记住我：<INPUT id=checkbox1 type=checkbox> <INPUT id=button1 onclick=getSumit() type=button value=提交></P>
<P>body 加入 onload时间,由于该日志被自动更改,所以您无法看到我的例子</P>
<P>&nbsp;</P>
<P>&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;SCRIPT&gt;&nbsp;&nbsp; </P>
<P>function SetCookie(name,value)//两个参数，一个是cookie的名子，一个是值&nbsp;&nbsp;&nbsp; <BR>{&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; var Days = 30; //此 cookie 将被保存 30 天&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; var exp&nbsp; = new Date();&nbsp;&nbsp;&nbsp; //new Date("December 31, 9998");&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; exp.setTime(exp.getTime() + Days*24*60*60*1000);&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();&nbsp;&nbsp;&nbsp; <BR>}&nbsp;&nbsp;&nbsp; <BR>function getCookie(name)//取cookies函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>{&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; if(arr != null) return unescape(arr[2]); return null;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; <BR>}&nbsp;&nbsp;&nbsp; <BR>function delCookie(name)//删除cookie&nbsp;&nbsp;&nbsp; <BR>{&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; var exp = new Date();&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; exp.setTime(exp.getTime() - 1);&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; var cval=getCookie(name);&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();&nbsp;&nbsp;&nbsp; <BR>}&nbsp; </P>
<P>function getSumit(){<BR>&nbsp;if (document.getElementById('checkbox1').checked){<BR>&nbsp; SetCookie("loginmail", document.getElementById('id1').value);<BR>&nbsp;}else{<BR>&nbsp; delCookie("loginmail");<BR>&nbsp;}<BR>}</P>
<P>function getSafeValue(){<BR>&nbsp;var tempV = getCookie('loginmail');<BR>&nbsp;if (tempV){<BR>&nbsp; document.getElementById('id1').value = tempV<BR>&nbsp; document.getElementById('checkbox1').checked=true<BR>&nbsp;}<BR>}</P>
<P>&lt;/SCRIPT&gt;<BR>&lt;/head&gt;<BR>&lt;body onload="getSafeValue()"&gt;<BR>&lt;INPUT type="text" id="id1"&gt; &lt;BR&gt;记住我：&lt;INPUT id="checkbox1" type="checkbox"&gt; &lt;INPUT id="button1" onclick=getSumit() type=button value=提交&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;</P>]]></description>
</item><item>
<title><![CDATA[jsp中session创建或失效时自动触发------谈谈Listener Servlet的应用(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=45918</link>
<author>kkk888929</author>
<pubDate>2009/6/10 14:30:38</pubDate>
<description><![CDATA[
<P>&nbsp;</P>
<P>通过一篇文单我终于明白了，呵呵！接口中的这个监听过程是在session创建或失效时自动触发！ &nbsp; <BR>&nbsp; http://tech.ccidnet.com/pub/article/c322_a180671_p1.html</P>
<P>import &nbsp; javax.servlet.http.*; &nbsp; <BR>&nbsp; 6 import &nbsp; javax.servlet.*; &nbsp; <BR>&nbsp; 7 &nbsp; <BR>&nbsp; 8 public &nbsp; class &nbsp; OnLineCountListener &nbsp; implements &nbsp; HttpSessionListener, &nbsp; <BR>&nbsp; ServletContextListener,ServletContextAttributeListener &nbsp; <BR>&nbsp; 9 { &nbsp; <BR>&nbsp; 10 private &nbsp; int &nbsp; count; &nbsp; <BR>&nbsp; 11 private &nbsp; ServletContext &nbsp; context &nbsp; = &nbsp; null; &nbsp; <BR>&nbsp; 12 &nbsp; <BR>&nbsp; 13 public &nbsp; OnLineCountListener() &nbsp; <BR>&nbsp; 14 { &nbsp; <BR>&nbsp; 15 count=0; &nbsp; <BR>&nbsp; 16 //setContext(); &nbsp; <BR>&nbsp; 17 } &nbsp; <BR>&nbsp; 18 //创建一个session时激发 &nbsp; <BR>&nbsp; 19 public &nbsp; void &nbsp; sessionCreated(HttpSessionEvent &nbsp; se) &nbsp; &nbsp; <BR>&nbsp; 20 { &nbsp; <BR>&nbsp; 21 count++; &nbsp; <BR>&nbsp; 22 setContext(se); &nbsp; <BR>&nbsp; 23 &nbsp; <BR>&nbsp; 24 } &nbsp; <BR>&nbsp; 25 //当一个session失效时激发 &nbsp; <BR>&nbsp; 26 public &nbsp; void &nbsp; sessionDestroyed(HttpSessionEvent &nbsp; se) &nbsp; &nbsp; <BR>&nbsp; 27 { &nbsp; <BR>&nbsp; 28 count--; &nbsp; <BR>&nbsp; 29 setContext(se); &nbsp; <BR>&nbsp; 30 } &nbsp; <BR>&nbsp; 31 //设置context的属性，它将激发attributeReplaced或attributeAdded方法 &nbsp; <BR>&nbsp; 32 public &nbsp; void &nbsp; setContext(HttpSessionEvent &nbsp; se) &nbsp; <BR>&nbsp; 33 { &nbsp; <BR>&nbsp; 34 se.getSession().getServletContext(). &nbsp; <BR>&nbsp; setAttribute("onLine",new &nbsp; Integer(count)); &nbsp; <BR>&nbsp; 35 } &nbsp; <BR>&nbsp; 36 &nbsp; //增加一个新的属性时激发 &nbsp; <BR>&nbsp; 37 public &nbsp; void &nbsp; attributeAdded(ServletContextAttributeEvent &nbsp; event) &nbsp; { &nbsp; <BR>&nbsp; 38 &nbsp; <BR>&nbsp; 39 log("attributeAdded('" &nbsp; + &nbsp; event.getName() &nbsp; + &nbsp; "', &nbsp; '" &nbsp; + &nbsp; <BR>&nbsp; 40 &nbsp; &nbsp; &nbsp; &nbsp; event.getValue() &nbsp; + &nbsp; "')"); &nbsp; <BR>&nbsp; 41 &nbsp; <BR>&nbsp; 42 &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; <BR>&nbsp; 43 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; 44 &nbsp; &nbsp; &nbsp; //删除一个新的属性时激发 &nbsp; <BR>&nbsp; 45 &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; void &nbsp; attributeRemoved(ServletContextAttributeEvent &nbsp; event) &nbsp; { &nbsp; <BR>&nbsp; 46 &nbsp; <BR>&nbsp; 47 log("attributeRemoved('" &nbsp; + &nbsp; event.getName() &nbsp; + &nbsp; "', &nbsp; '" &nbsp; + &nbsp; <BR>&nbsp; 48 &nbsp; &nbsp; &nbsp; &nbsp; event.getValue() &nbsp; + &nbsp; "')"); &nbsp; <BR>&nbsp; 49 &nbsp; <BR>&nbsp; 50 &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; <BR>&nbsp; 51 &nbsp; <BR>&nbsp; 52 //属性被替代时激发 &nbsp; <BR>&nbsp; 53 &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; void &nbsp; attributeReplaced(ServletContextAttributeEvent &nbsp; event) &nbsp; { &nbsp; <BR>&nbsp; 54 &nbsp; <BR>&nbsp; 55 log("attributeReplaced('" &nbsp; + &nbsp; event.getName() &nbsp; + &nbsp; "', &nbsp; '" &nbsp; + &nbsp; <BR>&nbsp; 56 &nbsp; &nbsp; &nbsp; &nbsp; event.getValue() &nbsp; + &nbsp; "')"); &nbsp; <BR>&nbsp; 57 &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; <BR>&nbsp; 58 &nbsp; &nbsp; &nbsp; &nbsp; //context删除时激发 &nbsp; <BR>&nbsp; 59 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; void &nbsp; contextDestroyed(ServletContextEvent &nbsp; event) &nbsp; { &nbsp; <BR>&nbsp; 60 &nbsp; <BR>&nbsp; 61 log("contextDestroyed()"); &nbsp; <BR>&nbsp; 62 this.context &nbsp; = &nbsp; null; &nbsp; <BR>&nbsp; 63 &nbsp; <BR>&nbsp; 64 &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; <BR>&nbsp; 65 &nbsp; <BR>&nbsp; 66 &nbsp; &nbsp; &nbsp; &nbsp; //context初始化时激发 &nbsp; <BR>&nbsp; 67 &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; void &nbsp; contextInitialized(ServletContextEvent &nbsp; event) &nbsp; { &nbsp; <BR>&nbsp; 68 &nbsp; <BR>&nbsp; 69 this.context &nbsp; = &nbsp; event.getServletContext(); &nbsp; <BR>&nbsp; 70 log("contextInitialized()"); &nbsp; <BR>&nbsp; 71 &nbsp; <BR>&nbsp; 72 &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; <BR>&nbsp; 73 &nbsp; &nbsp; &nbsp; &nbsp; private &nbsp; void &nbsp; log(String &nbsp; message) &nbsp; { &nbsp; <BR>&nbsp; 74 &nbsp; <BR>&nbsp; 75 &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("ContextListener: &nbsp; " &nbsp; + &nbsp; message); &nbsp; <BR>&nbsp; 76 &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; &nbsp; <BR>&nbsp; 77 } &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; &nbsp; <BR>&nbsp; &lt;font &nbsp; color=red&gt;&lt;%=getServletContext().getAttribute("onLine")%&gt;&lt;/font&gt;&lt;br&gt; &nbsp; <BR>&nbsp; 为何onLine的值一直增加，当一个用户关闭浏览器时，onLine的值也不减1?&nbsp;&nbsp;</P>
<P>&nbsp;</P>
<P><SPAN class=b>被转文件发布时间：2004.11.23 11:26</SPAN></P>
<P>Listener是Servlet的监听器，它可以监听客户端的请求、服务端的操作等。通过监听器，可以自动激发一些操作，比如监听在线的用户的数量。当增加一个HttpSession时，就激发sessionCreated(HttpSessionEvent se)方法，这样就可以给在线人数加1。常用的监听接口有以下几个：<BR>&nbsp;&nbsp;&nbsp;&nbsp; </P>
<LI>ServletContextAttributeListener监听对ServletContext属性的操作，比如增加、删除、修改属性。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
<LI>ServletContextListener监听ServletContext。当创建ServletContext时，激发contextInitialized(ServletContextEvent sce)方法；当销毁ServletContext时，激发contextDestroyed(ServletContextEvent sce)方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
<LI>HttpSessionListener监听HttpSession的操作。当创建一个Session时，激发session Created(HttpSessionEvent se)方法；当销毁一个Session时，激发sessionDestroyed (HttpSessionEvent se)方法。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
<LI>HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时，激发attributeAdded(HttpSessionBindingEvent se) 方法；当在Session删除一个属性时，激发attributeRemoved(HttpSessionBindingEvent se)方法；当在Session属性被重新设置时，激发attributeReplaced(HttpSessionBindingEvent se) 方法。 
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;下面我们开发一个具体的例子，这个监听器能够统计在线的人数。在ServletContext初始化和销毁时，在服务器控制台打印对应的信息。当ServletContext里的属性增加、改变、删除时，在服务器控制台打印对应的信息。 
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;要获得以上的功能，监听器必须实现以下3个接口：<BR>&nbsp;&nbsp;&nbsp;&nbsp;</P>
<LI>HttpSessionListener<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
<LI>ServletContextListener<BR>&nbsp;&nbsp;&nbsp;&nbsp; 
<LI>ServletContextAttributeListener 
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;我们看具体的代码，见示例14-9。 
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;【程序源代码】 
<P style="TEXT-INDENT: 2em"><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>1	// ==================== Program Discription =====================
2	// 程序名称：示例14-9 : EncodingFilter .java
3	// 程序目的：学习使用监听器
4	// ==============================================================
5	import javax.servlet.http.*;
6	import javax.servlet.*;
7
8	public class OnLineCountListener implements HttpSessionListener,
ServletContextListener,ServletContextAttributeListener
9	{
10		private int count;
11		private ServletContext context = null;
12		
13		public OnLineCountListener()
14		{
15			count=0;
16			//setContext();
17		}
18		//创建一个session时激发
19		public void sessionCreated(HttpSessionEvent se) 
20		{
21			count++;
22			setContext(se);
23			
24		}
25		//当一个session失效时激发
26		public void sessionDestroyed(HttpSessionEvent se) 
27		{
28			count--;
29			setContext(se);
30		}
31		//设置context的属性，它将激发attributeReplaced或attributeAdded方法
32		public void setContext(HttpSessionEvent se)
33		{
34			se.getSession().getServletContext().
setAttribute("onLine",new Integer(count));
35		}
36		 //增加一个新的属性时激发
37		public void attributeAdded(ServletContextAttributeEvent event) {
38	
39		log("attributeAdded('" + event.getName() + "', '" +
40		    event.getValue() + "')");
41	
42	    }
43	    
44	   //删除一个新的属性时激发
45	    public void attributeRemoved(ServletContextAttributeEvent event) {
46
47		log("attributeRemoved('" + event.getName() + "', '" +
48		    event.getValue() + "')");
49	
50	    }
51
52		//属性被替代时激发
53	    public void attributeReplaced(ServletContextAttributeEvent event) {
54	
55			log("attributeReplaced('" + event.getName() + "', '" +
56			    event.getValue() + "')");
57	    }
58	    //context删除时激发
59	     public void contextDestroyed(ServletContextEvent event) {
60	
61			log("contextDestroyed()");
62			this.context = null;
63	
64	    }
65	
66	    //context初始化时激发
67	    public void contextInitialized(ServletContextEvent event) {
68	
69			this.context = event.getServletContext();
70			log("contextInitialized()");
71	
72	    }
73	    private void log(String message) {
74	
75		    System.out.println("ContextListener: " + message);
76	    }   
77	}</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;【程序注解】<BR>&nbsp;&nbsp;&nbsp;&nbsp;在OnLineCountListener里，用count代表当前在线的人数，OnLineCountListener将在Web服务器启动时自动执行。当OnLineCountListener构造好后，把count设置为0。每增加一个Session，OnLineCountListener会自动调用sessionCreated(HttpSessionEvent se)方法；每销毁一个Session，OnLineCountListener会自动调用sessionDestroyed(HttpSessionEvent se)方法。当调用sessionCreated(HttpSessionEvent se)方法时，说明又有一个客户在请求，此时使在线的人数（count）加1，并且把count写到ServletContext中。ServletContext的信息是所有客户端共享的，这样，每个客户端都可以读取到当前在线的人数。 
<P style="TEXT-INDENT: 2em">为了使监听器生效，需要在web.xml里进行配置，如下所示： 
<P style="TEXT-INDENT: 2em"><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>&lt;listener&gt;
        &lt;listener-class&gt;OnLineCountListener&lt;/listener-class&gt;
    &lt;/listener&gt;</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR>
<P style="TEXT-INDENT: 2em">测试程序： 
<P style="TEXT-INDENT: 2em"><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>&lt;%@ page contentType="text/html;charset=gb2312" %&gt;</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR>
<P style="TEXT-INDENT: 2em">目前在线人数： 
<P style="TEXT-INDENT: 2em"><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>&lt;font color=red&gt;&lt;%=getServletContext().getAttribute("onLine")%&gt;&lt;/font&gt;&lt;br&gt;</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR>
<P style="TEXT-INDENT: 2em">退出会话： 
<P style="TEXT-INDENT: 2em"><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>&lt;form action="exit.jsp" method=post&gt;
&lt;input type=submit value="exit"&gt;
&lt;/form&gt;</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR>
<P style="TEXT-INDENT: 2em">getServletContext().getAttribute("onLine")获得了count的具体值。客户端调用 
<P style="TEXT-INDENT: 2em"><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>&lt;%session.invalidate() ;%&gt;</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR>
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;使Session失效，这样监听器就会使count减1。 
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;【运行程序】<BR>&nbsp;&nbsp;&nbsp;&nbsp;web.xml做好以上的配置，把OnLineCountListener放在WEB-INF/class目录下，启动Web服务器，在浏览器里输入以下URL（根据具体情况不同）：http://127.0.0.1:8080/ch14/listener.jsp 
<P style="TEXT-INDENT: 2em">&nbsp;&nbsp;&nbsp;&nbsp;浏览器将会打印目前在线人数。在服务器端有以下输出： 
<P style="TEXT-INDENT: 2em"><CCID_NOBR>
<TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
<TBODY>
<TR>
<TD class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6><PRE><CCID_CODE>…
ContextListener: contextInitialized()
ContextListener: attributeReplaced('org.apache.
catalina.WELCOME_FILES', '[Ljava.lang.String;@1d98a')
…
ContextListener: attributeAdded('onLine', '1')
ContextListener: attributeReplaced('onLine', '1')
ContextListener: attributeReplaced('onLine', '0')
ContextListener: attributeReplaced('onLine', '1')
ContextListener: attributeReplaced('onLine', '2')</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR>
<P style="TEXT-INDENT: 2em">(T111) 
<P style="TEXT-INDENT: 2em">本文选自飞思图书《精通Java核心技术》 </P>&nbsp;</LI>]]></description>
</item><item>
<title><![CDATA[Cewolf+JFreeChart之报表代码实例大全不断更新中...(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=45809</link>
<author>kkk888929</author>
<pubDate>2009/6/4 16:44:59</pubDate>
<description><![CDATA[<P>报表代码实例大全：<BR>本实例采用Cewolf+JFreeChart做成。Cewolf是基于JFreechart的,利用JFreechart的绘制引擎,将最终的图片写入客户端.在服务器端不会创建任何文件。<BR>其中这些实例中的web.xml的配置都是一样的，所以配置一次后就不再动它了<BR>后面的每一个实例我都会给出java类和jsp页面的代码，并附上对应的显示出来的图形(这些实例中有些来自网上,我也都一并做过并成功实现)<BR>#########################*************************#########################<BR>==============&gt;web.xml<BR>&lt;servlet&gt;<BR>&nbsp; &lt;servlet-name&gt;CewolfServlet&lt;/servlet-name&gt;<BR>&nbsp; &lt;servlet-class&gt;de.laures.cewolf.CewolfRenderer&lt;/servlet-class&gt;<BR>&nbsp; &lt;!-- sets storage implementation --&gt;<BR>&nbsp; &lt;init-param&gt;<BR>&nbsp;&nbsp; &lt;param-name&gt;storage&lt;/param-name&gt;<BR>&nbsp;&nbsp; &lt;param-value&gt;<BR>&nbsp;&nbsp;&nbsp; de.laures.cewolf.storage.TransientSessionStorage<BR>&nbsp;&nbsp; &lt;/param-value&gt;<BR>&nbsp; &lt;/init-param&gt;<BR>&nbsp; &lt;!-- sets overlib.js location relative to webapp --&gt;<BR>&nbsp; &lt;init-param&gt;<BR>&nbsp;&nbsp; &lt;param-name&gt;overliburl&lt;/param-name&gt;<BR>&nbsp;&nbsp; &lt;param-value&gt;/etc/overlib.js&lt;/param-value&gt;<BR>&nbsp; &lt;/init-param&gt;<BR>&nbsp; &lt;!-- turn on or off debugging logging --&gt;<BR>&nbsp; &lt;init-param&gt;<BR>&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt;<BR>&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;<BR>&nbsp; &lt;/init-param&gt;<BR>&nbsp; &lt;load-on-startup&gt;4&lt;/load-on-startup&gt;<BR>&nbsp;&lt;/servlet&gt;<BR>&nbsp;&lt;servlet-mapping&gt;<BR>&nbsp; &lt;servlet-name&gt;CewolfServlet&lt;/servlet-name&gt;<BR>&nbsp; &lt;url-pattern&gt;/adChart/*&lt;/url-pattern&gt;<BR>&nbsp;&lt;/servlet-mapping&gt;<BR>#########################*************************#########################<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 时间序列图<BR>==============&gt;JAVA类<BR>package cewolf;<BR>&nbsp;<BR>import java.io.Serializable;<BR>import java.text.DateFormat;<BR>import java.text.ParseException;<BR>import java.util.Date;<BR>import java.util.Map;<BR>&nbsp;<BR>import org.jfree.data.time.TimeSeries;<BR>import org.jfree.data.time.TimeSeriesCollection;<BR>&nbsp;<BR>import de.laures.cewolf.DatasetProducer;<BR>&nbsp;<BR>public class AdDateLineDataset implements DatasetProducer, Serializable {<BR>&nbsp;&nbsp;&nbsp; private Number[] data;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; private Date[] dateCategories;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; public AdDateLineDataset() {<BR>&nbsp; super();<BR>&nbsp;&nbsp; data = new Number[]{11,33,27};<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateFormat df = DateFormat.getDateTimeInstance();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp; dateCategories = new Date[]{df.parse("2008-03-5 08:00:00"),df.parse("2008-03-5 10:00:00"),df.parse("2008-03-5 15:00:00")};<BR>&nbsp;&nbsp; } catch (ParseException e) {<BR>&nbsp;&nbsp;&nbsp; e.printStackTrace();<BR>&nbsp;&nbsp; }<BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;public AdDateLineDataset(Date[] d, Number[] a) {<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; public Object produceDataset(Map params) {<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeSeries ts1 = new TimeSeries("My Title", org.jfree.data.time.Hour.class);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; data.length; i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts1.add(new org.jfree.data.time.Hour(dateCategories[i]),&nbsp;&nbsp;&nbsp; data[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeSeriesCollection collect = new TimeSeriesCollection(ts1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return collect;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; public String getProducerId() {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "TimeDataProducer";<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; public boolean hasExpired(Map params, Date since) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;<BR>==============&gt;JSP页面<BR>&nbsp;<BR>&lt;%@ page language="java" pageEncoding="UTF-8" %&gt;<BR>&lt;<A href="mailto:%@page">%@page</A> import="java.util.Date"%&gt;<BR>&lt;<A href="mailto:%@taglib">%@taglib</A> uri=''/WEB-INF/tlds/cewolf.tld'' prefix=''cewolf'' %&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;html&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;test&lt;/title&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;body&gt;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jsp:useBean id="data1"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="cewolf.AdDateLineDataset"/&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:chart id="pageChart2" title="时间序列图" type="timeseries"&nbsp;&nbsp;&nbsp;&nbsp; xaxislabel="时间" yaxislabel="数量"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:producer id="data1" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/cewolf:chart&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;cewolf:img chartid="pageChart2" renderer="/adChart" width="500" height="500"/&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; &lt;/body&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/html&gt;</P>
<P>==============&gt;<BR>&nbsp;<BR>#########################*************************#########################</P>
<P>==============&gt;JAVA类<BR>package cewolf;<BR>&nbsp;<BR>import java.io.Serializable;<BR>import java.util.Date;<BR>import java.util.Map;<BR>import org.apache.commons.logging.Log;<BR>import org.apache.commons.logging.LogFactory;<BR>import org.jfree.data.category.CategoryDataset;<BR>import org.jfree.data.category.DefaultCategoryDataset;<BR>import de.laures.cewolf.DatasetProduceException;<BR>import de.laures.cewolf.DatasetProducer;<BR>import de.laures.cewolf.links.CategoryItemLinkGenerator;<BR>import de.laures.cewolf.tooltips.CategoryToolTipGenerator;<BR>/** <BR>&nbsp;* An example data producer.<BR>&nbsp;* @author&nbsp; Guido Laures <BR>&nbsp;*/<BR>public class PageViewCountData implements DatasetProducer, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CategoryToolTipGenerator, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CategoryItemLinkGenerator, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serializable {<BR>&nbsp;&nbsp;&nbsp; private static final Log log = LogFactory.getLog(PageViewCountData.class);<BR>&nbsp;&nbsp;&nbsp; // These values would normally not be hard coded but produced by<BR>&nbsp;&nbsp;&nbsp; // some kind of data source like a database or a file<BR>&nbsp;&nbsp;&nbsp; private final String[] categories = { "mon",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "tue", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "wen", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "thu",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "fri",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "sat", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "sun"};<BR>&nbsp;&nbsp;&nbsp; private final String[] seriesNames = { "cewolfset.jsp",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "tutorial.jsp", <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "testpage.jsp",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "performancetest.jsp"};<BR>&nbsp;/**<BR>&nbsp; *&nbsp; Produces some random data.<BR>&nbsp; */<BR>&nbsp;&nbsp;&nbsp; public Object produceDataset(Map params) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws DatasetProduceException {<BR>&nbsp;&nbsp;&nbsp;&nbsp; log.debug("producing data.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DefaultCategoryDataset dataset = new DefaultCategoryDataset(){<BR>&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp; * @see java.lang.Object#finalize()<BR>&nbsp;&nbsp;&nbsp; *当垃圾回收器确定不存在对该对象的更多引用时，<BR>&nbsp;&nbsp;&nbsp; *由对象的垃圾回收器调用此方法<BR>&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp; protected void finalize() throws Throwable {<BR>&nbsp;&nbsp;&nbsp; super.finalize();<BR>&nbsp;&nbsp;&nbsp; log.debug(this +" finalized.");<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int series = 0; series &lt; seriesNames.length; series ++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int lastY = (int)(Math.random() * 1000 + 1000);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; categories.length; i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final int y = lastY + (int)(Math.random() * 200 - 100);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastY = y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.addValue(y, seriesNames[series], categories[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return dataset;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * This producer''s data is invalidated after 5 seconds. By this method the<BR>&nbsp;&nbsp;&nbsp;&nbsp; * producer can influence Cewolf''s caching behaviour the way it wants to.<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;public boolean hasExpired(Map params, Date since) {&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.debug(getClass().getName() + "hasExpired()");<BR>&nbsp; return (System.currentTimeMillis() - since.getTime())&nbsp; &gt; 5000;<BR>&nbsp;}<BR>&nbsp;/**<BR>&nbsp; * Returns a unique ID for this DatasetProducer<BR>&nbsp; */<BR>&nbsp;public String getProducerId() {<BR>&nbsp; return "PageViewCountData DatasetProducer";<BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Returns a link target for a special data item.<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; public String generateLink(Object data, int series, Object category) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return seriesNames[series];<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;/**<BR>&nbsp; * @see java.lang.Object#finalize()<BR>&nbsp; */<BR>&nbsp;protected void finalize() throws Throwable {<BR>&nbsp; super.finalize();<BR>&nbsp; log.debug(this + " finalized.");<BR>&nbsp;}<BR>&nbsp;/**<BR>&nbsp; * @see org.jfree.chart.tooltips.CategoryToolTipGenerator#generateToolTip(CategoryDataset, int, int)<BR>&nbsp; */<BR>&nbsp;public String generateToolTip(CategoryDataset arg0, int series, int arg2) {<BR>&nbsp; return seriesNames[series];<BR>&nbsp;}<BR>}<BR><BR>==============&gt;JSP页面<BR>&lt;<A href="mailto:%@page">%@page</A> contentType="text/html;charset=utf8"%&gt;<BR>&lt;<A href="mailto:%@taglib">%@taglib</A> uri=''/WEB-INF/tlds/cewolf.tld'' prefix=''cewolf'' %&gt;<BR>&lt;HTML&gt;<BR>&nbsp;&lt;BODY&gt;<BR>&nbsp; &lt;H1&gt;Page View Statistics&lt;/H1&gt;<BR>&nbsp;&nbsp; &lt;HR&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;jsp:useBean id="pageViews"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="cewolf.PageViewCountData"/&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;cewolf:chart id="line" title="折线图" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="line" xaxislabel="Page" yaxislabel="Views"&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:data&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:producer id="pageViews"/&gt; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/cewolf:chart&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;p&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;cewolf:img chartid="line" renderer="/adChart"&nbsp; width="500" height="400"/&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &lt;P&gt;<BR>&nbsp;&lt;/BODY&gt;<BR>&lt;/HTML&gt;</P>
<P>==============&gt;<BR>&nbsp;<BR>#########################*************************#########################<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 垂直柱条图</P>
<P>==============&gt;JAVA类<BR>&nbsp;package cewolf;<BR>&nbsp;<BR>import java.util.Date;<BR>import java.util.Map;<BR>&nbsp;<BR>import org.jfree.data.category.DefaultCategoryDataset;<BR>&nbsp;<BR>import de.laures.cewolf.DatasetProduceException;<BR>import de.laures.cewolf.DatasetProducer;<BR>&nbsp;<BR>public class VerticalBarData implements DatasetProducer {<BR>&nbsp;<BR>&nbsp;String chartTitle = "垂直直方图";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; String name[] = {"张三", "李四", "王五", "刘六", "赵七"};<BR>&nbsp;&nbsp;&nbsp; String category[] = {"第1周", "第2周", "第3周", "第4周" };<BR>&nbsp;<BR>&nbsp;@Override<BR>&nbsp;public String getProducerId() {<BR>&nbsp; return null;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;@Override<BR>&nbsp;public boolean hasExpired(Map arg0, Date arg1) {<BR>&nbsp; return true;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;@Override<BR>&nbsp;public Object produceDataset(Map arg0) throws DatasetProduceException {<BR>&nbsp; DefaultCategoryDataset dataset = new DefaultCategoryDataset();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 往数据集中添加绘制图表所需的数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int bookSales;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0; i &lt; name.length; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j=0; j &lt; category.length; j++ )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //随机生成销售量<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bookSales = 50 + (int)(Math.random() * 50);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.addValue(bookSales, name[i], category[j]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return dataset;<BR>&nbsp;<BR>&nbsp;}<BR>&nbsp;<BR>}</P>
<P>==============&gt;JSP页面<BR>&nbsp;&lt;%@ page language="java" pageEncoding="UTF-8" %&gt;<BR>&lt;<A href="mailto:%@page">%@page</A> import="java.util.Date"%&gt;<BR>&lt;<A href="mailto:%@taglib">%@taglib</A> uri=''/WEB-INF/tlds/cewolf.tld'' prefix=''cewolf'' %&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;html&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;test&lt;/title&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;body&gt;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jsp:useBean id="data1"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="cewolf.VerticalBarData"/&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:chart <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="verticalBar" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title="金牌公司推销人员业绩" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="verticalBar" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xaxislabel="销售时间:2005年4月" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yaxislabel="销售量"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:producer id="data1" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cewolf:chart&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:img <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chartid="verticalBar" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; renderer="/adChart" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width="500" <BR>&nbsp;&nbsp;&nbsp; &amp;</P>
<P>nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height="375"/&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; &lt;/body&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/html&gt;</P>
<P>==============&gt;<BR>&nbsp;<BR>&nbsp;<BR>#########################*************************#########################<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 饼图</P>
<P>==============&gt;JAVA类<BR>package cewolf;<BR>&nbsp;<BR>import java.util.Date;<BR>import java.util.Map;<BR>&nbsp;<BR>import org.jfree.data.general.DefaultPieDataset;<BR>&nbsp;<BR>import de.laures.cewolf.DatasetProduceException;<BR>import de.laures.cewolf.DatasetProducer;<BR>&nbsp;<BR>public class PieData&nbsp; implements DatasetProducer {<BR>&nbsp;<BR>&nbsp;@Override<BR>&nbsp;public String getProducerId() {<BR>&nbsp; return null;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;@Override<BR>&nbsp;public boolean hasExpired(Map arg0, Date arg1) {<BR>&nbsp; return true;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;@Override<BR>&nbsp;public Object produceDataset(Map arg0) throws DatasetProduceException {<BR>&nbsp; DefaultPieDataset defaultpiedataset = new DefaultPieDataset();&nbsp; <BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaultpiedataset.setValue("One", new Double(43.200000000000003D)); <BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaultpiedataset.setValue("Two", new Double(10D)); <BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaultpiedataset.setValue("Three", new Double(27.5D)); <BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; defaultpiedataset.setValue("Four", new Double(17.5D)); <BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return defaultpiedataset; <BR>&nbsp;<BR>&nbsp;}<BR>&nbsp;<BR>}</P>
<P>==============&gt;JSP页面<BR>&lt;%@ page language="java" pageEncoding="UTF-8" %&gt;<BR>&lt;<A href="mailto:%@page">%@page</A> import="java.util.Date"%&gt;<BR>&lt;<A href="mailto:%@taglib">%@taglib</A> uri=''/WEB-INF/tlds/cewolf.tld'' prefix=''cewolf'' %&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;html&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;test&lt;/title&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;body&gt;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jsp:useBean id="data1"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="cewolf.PieData"/&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:chart <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id="pieChart" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; title="饼图" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="pie" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:producer id="data1" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cewolf:chart&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:img <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chartid="pieChart" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; renderer="/adChart" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width="500" <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height="375"/&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; &lt;/body&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/html&gt;</P>
<P>==============&gt;<BR>&nbsp;<BR>#########################*************************#########################<BR>==============&gt;JAVA类<BR>&nbsp;package cewolf;<BR>&nbsp;<BR>import java.io.Serializable;<BR>import java.util.Date;<BR>import java.util.Map;<BR>import org.jfree.data.category.DefaultIntervalCategoryDataset;<BR>import de.laures.cewolf.DatasetProduceException;<BR>import de.laures.cewolf.DatasetProducer;<BR>&nbsp;<BR>public class Tu implements DatasetProducer, Serializable{<BR>&nbsp;&nbsp;&nbsp; String categories[] = {"mon","tues","sun","xxx"};<BR>&nbsp;&nbsp;&nbsp; String seriesNames [] = {"show","click","ctr"};<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; public String getProducerId() {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "CategoryDataProducer";<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; public boolean hasExpired(Map arg0, Date arg1) {<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; public Object produceDataset(Map arg0) throws DatasetProduceException {<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //以下是测试数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Number[][] datasets = new Number[4][3];<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[0][0] = new Int</P>
<P>eger(201);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[0][1] = new Integer(2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[0][2] = new Integer(3);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[1][0] = new Integer(11);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[1][1] = new Integer(22);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[1][2] = new Integer(33);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[2][0] = new Integer(44);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[2][1] = new Integer(55);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[2][2] = new Integer(66);&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[3][0] = new Integer(77);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[3][1] = new Integer(88);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; datasets[3][2] = new Integer(99);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //参数1:横轴 参数2:纵轴&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DefaultIntervalCategoryDataset ds = new DefaultIntervalCategoryDataset(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; categories,seriesNames,&nbsp; datasets,datasets);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ds;<BR>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <BR>}<BR>==============&gt;JSP页面<BR>&nbsp;&lt;%@ page language="java" pageEncoding="UTF-8" %&gt;<BR>&lt;<A href="mailto:%@taglib">%@taglib</A> uri=''/WEB-INF/tlds/cewolf.tld'' prefix=''cewolf'' %&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;html&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;test&lt;/title&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;body&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cewolf.Tu tu = new cewolf.Tu();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageContext.setAttribute("data1",tu);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:chart id="pageChart2" title="日期柱状图" type="stackedHorizontalBar"&nbsp;&nbsp;&nbsp;&nbsp; xaxislabel="时间" yaxislabel="数量"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cewolf:producer id="data1" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cewolf:data&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/cewolf:chart&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;cewolf:img chartid="pageChart2" renderer="/adChart" width="500" height="500"/&gt;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; &lt;/body&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/html&gt;</P>
<P>==============&gt;</P>]]></description>
</item><item>
<title><![CDATA[ASP.NET中上传文件到数据库(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=44490</link>
<author>kkk888929</author>
<pubDate>2009/4/7 15:26:21</pubDate>
<description><![CDATA[<A>　
<P>CREATE TABLE tblBooksUpload <BR><BR>( <BR><BR>DocID int NOT NULL IDENTITY Primary Key , <BR><BR>DocTitle varchar (200) , <BR><BR>Doc image, <BR><BR>DocType varchar (50) , <BR><BR>Entrydate datetime Default GetDate() <BR><BR>) <BR><BR>************************************<BR>CREATE PROCEDURE uSP_BooksUploadFile <BR><BR>@Title varchar(200), <BR><BR>@Doc image, <BR><BR>@DocType varchar(4) <BR><BR>AS <BR><BR>INSERT tblBooksUpload(DocTitle,Doc,DocType) <BR><BR>VALUES (@Title,@Doc,@DocType) <BR><BR>GO <BR><BR><BR><BR>*********************************<BR>using System;<BR>using System.Collections;<BR>using System.ComponentModel;<BR>using System.Data;<BR>using System.Drawing;<BR>using System.Web;<BR>using System.Web.SessionState;<BR>using System.Web.UI;<BR>using System.Web.UI.WebControls;<BR>using System.Web.UI.HtmlControls;</P>
<P>using System.IO;<BR>using System.Data.SqlClient;</P>
<P><BR>namespace WebApplication200501<BR>{<BR>&nbsp;/// &lt;summary&gt;<BR>&nbsp;/// WebForm3_Ftp 的摘要说明。<BR>&nbsp;/// &lt;/summary&gt;<BR>&nbsp;public class WebForm3_Ftp : System.Web.UI.Page<BR>&nbsp;{<BR>&nbsp;&nbsp;protected System.Web.UI.HtmlControls.HtmlInputFile ftpfiles;<BR>&nbsp;&nbsp;protected System.Web.UI.WebControls.Label LabelStat;<BR>&nbsp;&nbsp;protected System.Web.UI.WebControls.TextBox TextBoxFileName;<BR>&nbsp;&nbsp;protected System.Web.UI.WebControls.Label Label1;<BR>&nbsp;&nbsp;protected System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1;<BR>&nbsp;&nbsp;protected System.Data.SqlClient.SqlConnection sqlConnection1;<BR>&nbsp;&nbsp;protected System.Data.SqlClient.SqlCommand sqlSelectCommand1;<BR>&nbsp;&nbsp;protected System.Data.SqlClient.SqlCommand sqlInsertCommand1;<BR>&nbsp;&nbsp;protected System.Data.SqlClient.SqlCommand sqlUpdateCommand1;<BR>&nbsp;&nbsp;protected System.Data.SqlClient.SqlCommand sqlDeleteCommand1;<BR>&nbsp;&nbsp;protected System.Web.UI.WebControls.Button Button1;<BR>&nbsp;<BR>&nbsp;&nbsp;private void Page_Load(object sender, System.EventArgs e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;// 在此处放置用户代码以初始化页面<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;#region Web 窗体设计器生成的代码<BR>&nbsp;&nbsp;override protected void OnInit(EventArgs e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。<BR>&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;InitializeComponent();<BR>&nbsp;&nbsp;&nbsp;base.OnInit(e);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;/// &lt;summary&gt;<BR>&nbsp;&nbsp;/// 设计器支持所需的方法 - 不要使用代码编辑器修改<BR>&nbsp;&nbsp;/// 此方法的内容。<BR>&nbsp;&nbsp;/// &lt;/summary&gt;<BR>&nbsp;&nbsp;private void InitializeComponent()<BR>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;this.sqlDataAdapter1 = new System.Data.SqlClient.SqlDataAdapter();<BR>&nbsp;&nbsp;&nbsp;this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();<BR>&nbsp;&nbsp;&nbsp;this.sqlSelectCommand1 = new System.Data.SqlClient.SqlCommand();<BR>&nbsp;&nbsp;&nbsp;this.sqlInsertCommand1 = new System.Data.SqlClient.SqlCommand();<BR>&nbsp;&nbsp;&nbsp;this.sqlUpdateCommand1 = new System.Data.SqlClient.SqlCommand();<BR>&nbsp;&nbsp;&nbsp;this.sqlDeleteCommand1 = new System.Data.SqlClient.SqlCommand();<BR>&nbsp;&nbsp;&nbsp;this.Button1.Click += new System.EventHandler(this.Button1_Click);<BR>&nbsp;&nbsp;&nbsp;// <BR>&nbsp;&nbsp;&nbsp;// sqlDataAdapter1<BR>&nbsp;&nbsp;&nbsp;// <BR>&nbsp;&nbsp;&nbsp;this.sqlDataAdapter1.DeleteCommand = this.sqlDeleteCommand1;<BR>&nbsp;&nbsp;&nbsp;this.sqlDataAdapter1.InsertCommand = this.sqlInsertCommand1;<BR>&nbsp;&nbsp;&nbsp;this.sqlDataAdapter1.SelectCommand = this.sqlSelectCommand1;<BR>&nbsp;&nbsp;&nbsp;this.sqlDataAdapter1.TableMappings.AddRange(new System.Data.Common.DataTableMapping[] {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new System.Data.Common.DataTableMapping("Table", "tblBooksUpload", new System.Data.Common.DataColumnMapping[] {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new System.Data.Common.DataColumnMapping("DocID", "DocID"),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new System.Data.Common.DataColumnMapping("DocTitle", "DocTitle"),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new System.Data.Common.DataColumnMapping("Doc", "Doc"),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new System.Data.Common.DataColumnMapping("DocType", "DocType"),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new System.Data.Common.DataColumnMapping("Entrydate", "Entrydate")})});<BR>&nbsp;&nbsp;&nbsp;this.sqlDataAdapter1.UpdateCommand = this.sqlUpdateCommand1;<BR>&nbsp;&nbsp;&nbsp;// <BR>&nbsp;&nbsp;&nbsp;// sqlConnection1<BR>&nbsp;&nbsp;&nbsp;// <BR>&nbsp;&nbsp;&nbsp;this.sqlConnection1.ConnectionString = "workstation id="DAYANG-C";packet size=4096;integrated security=SSPI;data source="" +<BR>&nbsp;&nbsp;&nbsp;&nbsp;"DAYANG-C";persist security info=False;initial catalog=MyDb";<BR>&nbsp;&nbsp;&nbsp;// <BR>&nbsp;&nbsp;&nbsp;// sqlSelectCommand1<BR>&nbsp;&nbsp;&nbsp;// <BR>&nbsp;&nbsp;&nbsp;this.sqlSelectCommand1.CommandText = "[NewSelectCommand]";<BR>&nbsp;&nbsp;&nbsp;this.sqlSelectCommand1.CommandType = System.Data.CommandType.StoredProcedure;<BR>&nbsp;&nbsp;&nbsp;this.sqlSelectCommand1.Connection = this.sqlConnection1;<BR>&nbsp;&nbsp;&nbsp;this.sqlSelectCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));<BR>&nbsp;&nbsp;&nbsp;// <BR>&nbsp;&nbsp;&nbsp;// sqlInsertCommand1<BR>&nbsp;&nbsp;&nbsp;// <BR>&nbsp;&nbsp;&nbsp;this.sqlInsertCommand1.CommandText = "[NewInsertCommand]";<BR>&nbsp;&nbsp;&nbsp;this.sqlInsertCommand1.CommandType = System.Data.CommandType.StoredProcedure;<BR>&nbsp;&nbsp;&nbsp;this.sqlInsertCommand1.Connection = this.sqlConnection1;<BR>&nbsp;&nbsp;&nbsp;this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));<BR>&nbsp;&nbsp;&nbsp;this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@DocTitle", System.Data.SqlDbType.VarChar, 200, "DocTitle"));<BR>&nbsp;&nbsp;&nbsp;this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Doc", System.Data.SqlDbType.VarBinary, 2147483647, "Doc"));<BR>&nbsp;&amp;n </P></A>]]></description>
</item><item>
<title><![CDATA[C#读写EXCEL(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=44489</link>
<author>kkk888929</author>
<pubDate>2009/4/7 15:19:34</pubDate>
<description><![CDATA[<A>　 
<P>C#读写EXCEL方法一<BR>using System;<BR>using System.Collections.Generic;<BR>using System.Drawing;<BR>using System.Reflection;<BR>using System.IO;</P>
<P><BR>namespace ExcelTest<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp; class Program<BR>&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static void Main(string[] args)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ////创建Application对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Application xlsApp = new Excel.Application();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (xlsApp == null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsApp.Visible = true;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到WorkBook对象, 可以用两种方式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //之一: 打开已有的文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Excel.Workbook xlsBook = xlsApp.Workbooks.Open(@"E:\Documents and Settings\daniel.chen\Desktop\test.xls",Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //之二：新建一个文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Workbook xlsBook = xlsApp.Workbooks.Add(Missing.Value);</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定要操作的Sheet，两种方式<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //之一：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Worksheet xlsSheet = (Excel.Worksheet)xlsBook.Sheets[1];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //之二：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Excel.Worksheet xlsSheet = (Excel.Worksheet)xlsApp.ActiveSheet;</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定单元格，读取数据，两种方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //之一：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Range range1 = xlsSheet.get_Range("C2",Type.Missing);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(range1.Value2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //之二：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Range range2 = (Excel.Range)xlsSheet.Cells[2, 3];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine(range2.Value2);</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在单元格中写入数据<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Range range3 = xlsSheet.get_Range("A1",Type.Missing);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.Value2 = "Hello World!";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.Borders.Color = Color.FromArgb(123, 231, 32).ToArgb();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.Font.Color = Color.Red.ToArgb();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.Font.Name = "Arial";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.Font.Size = 9;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //range3.Orientation = 90;&nbsp;&nbsp; //vertical<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.Columns.HorizontalAlignment = Excel.Constants.xlCenter;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.VerticalAlignment = Excel.Constants.xlCenter;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.Interior.Color = Color.FromArgb(192,192,192).ToArgb();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range3.Columns.AutoFit();//adjust the column width automatically</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在某个区域写入数据数组<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int matrixHeight = 20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int matrixWidth = 20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[,] martix=new string[matrixHeight,matrixWidth];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; matrixHeight; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; matrixWidth; j++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; martix[i, j] = String.Format("{0}_{1}", i+1, j+1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string startColName=GetColumnNameByIndex(0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string endColName=GetColumnNameByIndex(matrixWidth-1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取得某个区域，两种方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //之一：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Excel.Range range4 = xlsSheet.get_Range("A1",Type.Missing);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range4 = range4.get_Resize(matrixHeight,matrixWidth);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //之二：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Excel.Range range4 = xlsSheet.get_Range(String.Format("{0}{1}", startColName, 1), String.Format("{0}{1}", endColName, martixHeight));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range4.Value2 = martix;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range4.Font.Color = Color.Red.ToArgb();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range4.Font.Name="Arial";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range4.Font.Size = 9;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; range4.Columns.HorizontalAlignment = Excel.Constants.xlCenter;</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置column和row的宽度和颜色<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int columnIndex=3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int rowIndex=3;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string colName = GetColumnNameByIndex(columnIndex);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsSheet.get_Range(colName + rowIndex.ToString(), Type.Missing).Columns.ColumnWidth = 20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsSheet.get_Range(colName + rowIndex.ToString(), Type.Missing).Rows.RowHeight = 40;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsSheet.get_Range(colName + rowIndex.ToString(), Type.Missing).Columns.Interior.Color = Color.Blue.ToArgb();//单格颜色<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsSheet.get_Range(5 + ":" + 7, Type.Missing).Rows.Interior.Color = Color.Yellow.ToArgb();//第5行到第7行的颜色<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //xlsSheet.get_Range("G : G", Type.Missing).Columns.Interior.Color=Color.Pink.ToArgb();//第n列的颜色如何设置？？</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存，关闭<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (File.Exists(@"E:\Documents and Settings\daniel.chen\Desktop\test1.xls"))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File.Delete(@"E:\Documents and Settings\daniel.chen\Desktop\test1.xls");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsBook.SaveAs(@"E:\Documents and Settings\daniel.chen\Desktop\test1.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsBook.Close(false, Type.Missing, Type.Missing);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xlsApp.Quit();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GC.Collect();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.ReadKey();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将column index转化为字母，至多两位<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static string GetColumnNameByIndex(int index)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] alphabet = new string[] {"","A", "B", "C", "D", "E", "F", "G", "H", "I", "J" ,"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string result = "";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int temp = index / 26;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int temp2 = index % 26 + 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (temp &gt; 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result += alphabet[temp];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result += alphabet[temp2];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return result;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; }<BR>}<BR><BR>C#读写EXCEL方法二<BR>通过数据库方式</P>
<P>&nbsp;&nbsp; OleDbDataAdapter&nbsp;&nbsp;&nbsp; ada&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; new&nbsp;&nbsp;&nbsp; OleDbDataAdapter("SELECT&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp; FROM&nbsp;&nbsp;&nbsp; [Sheet1$]",&nbsp;&nbsp;&nbsp; "Provider=Microsoft.Jet.OLEDB.4.0;Data&nbsp;&nbsp;&nbsp; Source="&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp;&nbsp; openFileDialog1.FileName&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp;&nbsp; ";Extended&nbsp;&nbsp;&nbsp; Properties=Excel&nbsp;&nbsp;&nbsp; 8.0;");&nbsp;&nbsp; <BR>&nbsp;&nbsp; DataTable&nbsp;&nbsp;&nbsp; dt&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; new&nbsp;&nbsp;&nbsp; DataTable();&nbsp;&nbsp; <BR>&nbsp;&nbsp; try&nbsp;&nbsp; <BR>&nbsp;&nbsp; {&nbsp;&nbsp; <BR>&nbsp;&nbsp; ada.Fill(dt);&nbsp;&nbsp; <BR>&nbsp;&nbsp; }&nbsp;&nbsp; <BR>&nbsp;&nbsp; catch(Exception&nbsp;&nbsp;&nbsp; ex)&nbsp;&nbsp; <BR>&nbsp;&nbsp; {&nbsp;&nbsp; <BR>&nbsp;&nbsp; MessageBox.Show(ex.ToString());&nbsp;&nbsp; <BR>&nbsp;&nbsp; }&nbsp;&nbsp; <BR>&nbsp;&nbsp; dataGrid1.DataSource&nbsp;&nbsp;&nbsp; =&nbsp;&nbsp;&nbsp; dt;&nbsp;&nbsp; <BR>&nbsp;&nbsp; }&nbsp;&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>Vs.net中集成了office组件,在添加引用中选择"COM组件"--"microsoft Excel 11.0 object library",Vs就会自动生成Excel应用所需的3个.dll文件,这样我们就可以对Excel表进</P>
<P>行写操作了:</P>
<P>///建立新的表格工作区,设定Sheet为Sheet1<BR>m_objExcel = new Excel.Application();　　///建立新的Excel应用<BR>m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;　　///获取应用中的所有数据表<BR>m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));　　///新建数据表<BR>m_objSheets = (Excel.Sheets)m_objBook.Worksheets;　　///获取数据表中所有工作表<BR>m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));　　///选取第一个工作表<BR>m_objSheet.Name="原始数据表"　　///命名工作表为"原始数据表"</P>
<P>object[] objTitle = {"RVI", "NDVI", "PVI", "DVI", "RDVI", "PRI", "RSNDa", "VARI_green", "VARI_700"};</P>
<P>///定义一个object数组<BR>private object m_objOpt = System.Reflection.Missing.Value;</P>
<P>///定义一个Missing值,这样我们用不到的设定值就可以用Missing来代替了.</P>
<P>m_objRange = m_objSheet.get_Range("A1", m_objOpt);　　///获得表格区域,区域从A1开始<BR>m_objRange = m_objRange.get_Resize(1,objTitle.Length);　　///定义表格区域为1行,"objTitle的个数"列<BR>m_objRange.set_Value(m_objOpt,objTitle);　　///将objTitle写入表格区域中,Excel会自动对齐的呵呵,放心</P>
<P>m_objFont = m_objRange.Font;　　///获取区域中的字体设置<BR>m_objFont.Bold=true;　　///设置字体为粗体</P>
<P>m_objBook.SaveAs(m_strSampleFolder + FileName, m_objOpt, m_objOpt, <BR>m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, <BR>m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);　　///保存Excel文件,文件名为FileName,地址为m_strSampleFolder,呵呵.其他忽略</P>
<P>m_objBook.Close(false, m_objOpt, m_objOpt);　　///关闭数据表</P>
<P>m_objExcel.Quit();　　///关闭Excel应用</P>
<P>我这也是从网上学的,在微软的客户服务区中有比较详细的解说,地址如下:</P>
<P>1.如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据</P>
<P></A><A href="http://support.microsoft.com/kb/306023/zh-cn">http://support.microsoft.com/kb/306023/zh-cn</A><A></P>
<P>2.如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化</P>
<P></A><A href="http://support.microsoft.com/kb/302084/zh-cn">http://support.microsoft.com/kb/302084/zh-cn</A><A></P>
<P>3.如何使用 Visual C# 向 Microsoft Excel 2002 传输 XML 数据</P>
<P></A><A href="http://support.microsoft.com/kb/307029/zh-cn">http://support.microsoft.com/kb/307029/zh-cn</A><A></P>
<P>4.如何使用 ASP.NET、ADO.NET 和 Visual C# .NET 查询和显示 Excel 数据</P>
<P></A><A href="http://support.microsoft.com/?scid=kb%3Bzh-cn%3B306572&amp;x=6&amp;y=10">http://support.microsoft.com/?scid=kb%3Bzh-cn%3B306572&amp;x=6&amp;y=10</A><A></P></A>]]></description>
</item><item>
<title><![CDATA[IE和Firefox在JavaScript方面的兼容性(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=43952</link>
<author>kkk888929</author>
<pubDate>2009/3/18 17:32:12</pubDate>
<description><![CDATA[<A>　
<P>1.document.formName.item("itemName") 问题</P>
<P>说明:IE下,可以使用document.formName.item("itemName")或document.formName.elements["elementName"];Firefox下,只能使用document.formName.elements["elementName"].<BR>解决方法:统一使用document.formName.elements["elementName"]. Text1:<BR>document.formName.item("itemName")&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR><BR>document.formName.elements["elementName"]</P>
<P>-------------------------------------------------<BR>2.集合类对象问题</P>
<P>说明:IE下,可以使用()或[]获取集合类对象;Firefox下,只能使用[]获取集合类对象.<BR>解决方法:统一使用[]获取集合类对象.<BR>Text2:<BR>document.forms("formName")&nbsp;<WBR><BR>document.forms["formName"]&nbsp;<WBR></P>
<P>Text3:<BR>document.getElementsByName("inputName")(0)&nbsp;<WBR><BR>document.getElementsByName("inputName")[0]</P>
<P>-------------------------------------------------<BR>3.自定义属性问题</P>
<P>说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性.<BR>解决方法:统一通过getAttribute()获取自定义属性.<BR>Text4:<BR>直接获取自定义属性的值&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR><BR>通过getAttribute()获取自定义属性的值</P>
<P>-------------------------------------------------<BR>4.eval("idName")问题</P>
<P>说明:IE下,,可以使用eval("idName")或getElementById("idName")来取得id为idName的HTML对象;Firefox下只能使用getElementById("idName")来取得id为idName的HTML对象.<BR>解决方法:统一用getElementById("idName")来取得id为idName的HTML对象.<BR>Text5:<BR>eval("idName")&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR>&nbsp;<WBR><BR>document.getElementById("itemId")</P>
<P>-------------------------------------------------<BR>5.变量名与某HTML对象ID相同的问题</P>
<P>说明:IE下,HTML对象的ID可以作为document的下属对象变量名直接使用;Firefox下则不能.Firefox下,可以使用与HTML对象ID相同的变量名;IE下则不能。<BR>解决方法:使用document.getElementById("idName")代替document.idName.最好不要取HTML对象ID相同的变量名,以减少错误;在声明变量时,一律加上var,以避免歧义.</P>
<P>-------------------------------------------------<BR>6.const问题</P>
<P>说明:Firefox下,可以使用const关键字或var关键字来定义常量;IE下,只能使用var关键字来定义常量.<BR>解决方法:统一使用var关键字来定义常量.</P>
<P>-------------------------------------------------<BR>7.input.type属性问题</P>
<P>说明:IE下input.type属性为只读;但是Firefox下input.type属性为读写.</P>
<P>-------------------------------------------------<BR>8.window.event问题</P>
<P>说明:window.event只能在IE下运行,而不能在Firefox下运行,这是因为Firefox的event只能在事件发生的现场使用.<BR>解决方法:<BR>IE:<BR>&lt;input name="Button8_1" type="button" value="IE" onclick="javascript:gotoSubmit8_1()"/&gt;<BR>...<BR>&lt;script language="javascript"&gt;<BR>function gotoSubmit8_1() {<BR>...<BR>alert(window.event); //use window.event<BR>...<BR>}<BR>&lt;/script&gt;<BR>IE&amp;Firefox:<BR>&lt;input name="Button8_2" type="button" value="IE" onclick="javascript:gotoSubmit8_2(event)"/&gt;<BR>...<BR>&lt;script language="javascript"&gt;<BR>function gotoSubmit8_2(evt) {<BR>...<BR>evt=evt?evt:(window.event?window.event:null);<BR>alert(evt); //use evt<BR>...<BR>}<BR>&lt;/script&gt;</P>
<P>-------------------------------------------------<BR>9.event.x与event.y问题</P>
<P>说明:IE下,even对象有x,y属性,但是没有pageX,pageY属性;Firefox下,even对象有pageX,pageY属性,但是没有x,y属性.<BR>解决方法:使用mX(mX = event.x ? event.x : event.pageX;)来代替IE下的event.x或者Firefox下的event.pageX.</P>
<P>-------------------------------------------------<BR>10.event.srcElement问题</P>
<P>说明:IE下,even对象有srcElement属性,但是没有target属性;Firefox下,even对象有target属性,但是没有srcElement属性.<BR>解决方法:使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.</P>
<P>-------------------------------------------------<BR>11.window.location.href问题</P>
<P>说明:IE或者Firefox2.0.x下,可以使用window.location或window.location.href;Firefox1.5.x下,只能使用window.location.<BR>解决方法:使用window.location来代替window.location.href.</P>
<P>-------------------------------------------------</P>
<P>12.模态和非模态窗口问题</P>
<P>说明:IE下,可以通过showModalDialog和showModelessDialog打开模态和非模态窗口;Firefox下则不能.<BR>解决方法:直接使用window.open(pageURL,name,parameters)方式打开新窗口。</P>
<P>如果需要将子窗口中的参数传递回父窗口,可以在子窗口中使用window.opener来访问父窗口. 例如：var parWin = window.opener; parWin.document.getElementById("Aqing").value = "Aqing";</P>
<P>-------------------------------------------------<BR>13.frame问题</P>
<P>以下面的frame为例：<BR>&lt;frame src="xxx.html" id="frameId" name="frameName" /&gt;</P>
<P>(1)访问frame对象:<BR>IE:使用window.frameId或者window.frameName来访问这个frame对象.<BR>Firefox:只能使用window.frameName来访问这个frame对象.<BR>另外，在IE和Firefox中都可以使用window.document.getElementById("frameId")来访问这个frame对象.</P>
<P>(2)切换frame内容:<BR>在IE和Firefox中都可以使用window.document.getElementById("testFrame").src = "xxx.html"或window.frameName.location = "xxx.html"来切换frame的内容.</P>
<P>如果需要将frame中的参数传回父窗口，可以在frme中使用parent来访问父窗口。例如：parent.document.form1.filename.value="Aqing";</P>
<P>-------------------------------------------------<BR>14.body问题</P>
<P>Firefox的body在body标签没有被浏览器完全读入之前就存在；而IE的body则必须在body标签被浏览器完全读入之后才存在.</P>
<P>例如：<BR>Firefox：<BR>&lt;body&gt;<BR>&lt;script type="text/javascript"&gt;<BR>document.body.onclick = function(evt){<BR>evt = evt || window.event;<BR>alert(evt);<BR>}<BR>&lt;/script&gt;<BR>&lt;/body&gt;<BR>IE&amp;Firefox：<BR>&lt;body&gt;<BR>&lt;/body&gt;<BR>&lt;script type="text/javascript"&gt;<BR>document.body.onclick = function(evt){<BR>evt = evt || window.event;<BR>alert(evt);<BR>}<BR>&lt;/script&gt;</P></A>]]></description>
</item><item>
<title><![CDATA[构建Flex应用的10大误区(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=41418</link>
<author>kkk888929</author>
<pubDate>2008/11/28 8:39:28</pubDate>
<description><![CDATA[
<LI>标签： </LI>
<LI><A href="http://blog.10jqka.com.cn/ztags/2606/1.shtml" target=_blank>flex</A> </LI><BR class=clear>
<DIV class=summary id=post_content>
<H2>在这篇新闻中，Adobe的James Ward与InfoQ.com一起为你带来了Flex的另一种10大（Flex最新的10大）。Flex是一个开源的应用开发框架，用来构建运行在 web（使用 Flash Player）或者桌面上（使用Adobe AIR）的富Internet应用。总之，Flex是一个强大易用的框架，但是今天让我们瞧瞧构建Flex应用时经常犯的错误。<BR><BR>对于Flex新手，请阅读InfoQ最近的Adobe Flex Basics以对该框架有一个快速的了解。下面是易犯的错误列表：<BR><BR>1. 使用RIA框架去构建Web1.0应用（新技术换汤不换药）。<BR><BR>从Web 1.0到RIA的过渡中最大的挑战之一来自思考方式的转变。Flex给予开发者一个高级的组件库，使其可以完成很多以前不可能完成的任务。但是很多时候，Flex的这种能力被忽略了，它仅仅被用来实现更加传统的Web 1.0应用。<BR><BR>构建Web 2.0应用不仅仅意味着页面的局部刷新和旋转的圆角图标。例如，Flex开发者应使用矢量图向用户提供数据的可视化表示，以及对于富应用流的高级控制。最近Stephan Janssen与InfoQ.com一起讨论了该议题：<BR><BR>作为一个Java开发者，对于面向对象的ActionScript和UI标记语言的学习简直就是小菜一碟。但是对于（Java）开发者来说真正的挑战在于我们不是设计师，并且这两个技术对于RIA来说是必不可少的。<BR>2. 破坏标准的浏览器体验<BR><BR>尽管Flex确实提供了一个优秀的平台以改善用户体验，但是保持用户习惯，如后退按钮、书签和自动完成也是相当重要的。<BR><BR>Flex 3包含了新的深层链接特性以支持后退按钮和书签。你可以访问labs.adobe.com来了解更多。那有很多组件能够实现自动完成。你可以使用来自于Adobe Exchange的AutoComplete Input组件。<BR><BR>3. 使用过多的容器导致应用变慢<BR><BR>Flash Player使用了一个按层次显示的对象图，这一点与HTML的文档对象模型（DOM）很相似。容器嵌套的层次越深，渲染所花费的时间就越长。Adobe的Flex开发者中心有一篇文章讨论了关于Flex性能的最佳实践，包括了容器的使用细节：<BR><BR>Flex最大的性能风险来自于对容器的滥用。嵌套太多的容器会影响应用的性能。这是Flex开发者面临的最严重的性能风险——不过还好，它完全能被避免。<BR>4. 使用XML而不是其他更优化的协议导致应用变慢<BR><BR>Flex向开发者提供了多种选择以在Flex客户端和服务器之间进行数据传输，包括AMF3、XML、SOAP及直接的HTTP请求。Ward在他的人口普查应用中阐述了这些技术的使用及性能。<BR><BR>对于后端使用Java的新项目来说，应该考虑一下BlazeDS。BlazeDS是Adobe最近的一个开源数据服务产品，它使用了AMF3协议。AMF是一个二进制传输协议，很容易与Java集成，其性能要优于XML。对于所有主要的后端技术都有相应的AMF开源实现。<BR><BR>如果你不选择BlazeDS，那么你还可以选择Hessian。Hessian对二进制的web services协议提供了ActionScript/Flex支持。<BR><BR>5. 试图雇佣Flex开发者<BR><BR>现 在很难找到有经验的Flex开发者。Flex现在正处在上世纪90年代Java所处的位置。Flex开发者已经供不应求了。这就造成了难以寻觅 到有经验的Flex开发者的后果。然而，这给Java开发者创造了一个很好的机会以扩充技能，并且从事一种新兴且有趣的技术。很多寻找Flex开发者的公 司直接对Java或者其他web开发者进行几周的Flex培训，并且大获成功。对于熟悉Web和GUI编程的开发者来说，学习Flex语言和APIs易如 反掌。<BR><BR>6. 特效的过度使用<BR><BR>开发者可以很容易地通过Flash增加特效。但是要确保特效有意义并且与上下文是匹配的。否则他们只会让用户反感。特效的时间选择也很重要。交互设计器可以帮助我们决定何时应使用特效，何时不应该使用。交互设计器还能为我们推荐最佳的特效类型、间隔和最简化的功能。<BR><BR>关于特效的使用在laair.org上有一篇好文：<BR><BR>大多数的特效简直太长了。它们不但长，而且还慢，甚至让人反感。关掉它。如果我遇到这种事情的话，我就会转身离去，因为我实在讨厌这种等待。 <BR><BR>千万不要误会我，我并不是反对特效。我只是反对为了目的而做的太长或者太过分的特效。每个特效都可以依照其目的进行分解。找到你要特效的目的，然后再使用它。 <BR>7. 没有搭建企业生态系统<BR><BR>就像其他的软件项目一样，为于你的Flex应用建立企业生态系统是非常重要的。<BR><BR>测 试驱动开发（TDD）在当前是大多数企业项目的首选方案。对于Flex来说，FlexUnit框架可用来编写单元测试。在Adobe的开发者网络 上，Neil Webb讨论了面向Flex开发者的TDD及FlexUnit的使用。此外，Flexcover可用来度量代码覆盖率。<BR><BR>当多个开发者协同工作时，持续集成（Continuous Integration）被证明是良好的实践。与Java应用类似，也有相应的Ant和Maven插件对你的Flex应用进行持续集成。 <BR><BR>8. 没有使用整个框架<BR><BR>在Adobe Flex中有大量可选的特性，你应该考虑在你的应用中使用它们。例如，运行时共享库（Runtime Shared Libraries，即RSL）可用来减少应用的大小。 <BR><BR>你 可以将共享资源集成到单独的文件中，这样就可以在客户端单独下载和缓存了，通过这种手段可以减少应用产生 的SWF文件的大小。很多Flex应用可以在运行时加载这些共享资源，而每个客户端只需下载一次即可。这些共享资源叫做运行时共享库（Runtime Shared Libraries）。<BR>框架的另一个特性是内建的辅助功能。你可以通过Adobe在线文档了解更多的关于Flex的辅助功能的信息。除了内建的辅助功能外，框架还提供了对于本地化的内在支持。请访问Adobe新手上路来了解最新的Flex3框架特性。<BR><BR>9. 使用复杂的渲染器降低了DateGrid的速度<BR><BR>针 对DataGrid开箱即用的itemRenderer已经有过很好的优化了。误解#3讨论了嵌套过深的容器的性能问题。在Flex中有一个地 方很容易造成容器的深层次嵌套，那就是DataGrid的item渲染器。由DataGrid所渲染的item渲染器数量等于可见的行数乘以可见的列数。 定制的DataGrid和List item渲染器应该经过非常好的优化才行。当需要在item渲染器中使用复杂的布局逻辑时，最好使用UIComponent（或者其他底层类）并且手工完 成该单元格内容的定位。<BR><BR>10. 没有准备离线应用。<BR><BR>RIAs的传统模型在于浏览器。然而像Adobe AIR和Google Gears这 样的技术使得应用可以离线运行。如果用户需要可以离线对应用时而你尚未准备好的话，那将你的应用改为支持离线特性将变得异常困难。典型地，在web应用 中，业务逻辑存在于服务器端。在离线RIAs中，业务逻辑必须转到客户端。为了使应用既支持离线，也支持在线，那就很有必要提前决定某些业务逻辑的位置。</H2></DIV>]]></description>
</item><item>
<title><![CDATA[Oracle时间操作大全(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=41125</link>
<author>kkk888929</author>
<pubDate>2008/11/12 20:42:30</pubDate>
<description><![CDATA[<A>　在系统时间基础上延迟5秒
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sysdate+(5/24/60/60)</TD></TR></TBODY></TABLE></P>
<P>　　在系统时间基础上延迟5分钟</P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sysdate+5/24/60</TD></TR></TBODY></TABLE></P>
<P>　　在系统时间基础上延迟5小时</P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sysdate+5/24</TD></TR></TBODY></TABLE></P>
<P>　　在系统时间基础上延迟5天 </P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sysdate+5</TD></TR></TBODY></TABLE></P>
<P>　　在系统时间基础上延迟5月 </P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add_months(sysdate,-5)</TD></TR></TBODY></TABLE></P>
<P>　　在系统时间基础上延迟5年 </P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add_months(sysdate,-5*12)</TD></TR></TBODY></TABLE></P>
<P>　　上月末的日期：　　 </P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select&nbsp;last_day(add_months(sysdate,&nbsp;-1))&nbsp;from&nbsp;dual;</TD></TR></TBODY></TABLE></P>
<P>　　本月的最后一秒： </P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select&nbsp;trunc(add_months(sysdate,1),'MM')&nbsp;-&nbsp;1/24/60/60&nbsp;from&nbsp;dual</TD></TR></TBODY></TABLE></P>
<P>　　本周星期一的日期： </P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select&nbsp;trunc(sysdate,'day')+1&nbsp;from&nbsp;dual</TD></TR></TBODY></TABLE></P>
<P>　　年初至今的天数： </P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp; select&nbsp;ceil(sysdate&nbsp;-&nbsp;trunc(sysdate,&nbsp;'year'))&nbsp;from&nbsp;dual;</TD></TR></TBODY></TABLE></P>
<P>　　今天是今年的第几周: </P>
<P>
<TABLE style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellSpacing=0 cellPadding=6 width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="WORD-WRAP: break-word" bgColor=#f3f3f3>&nbsp;&nbsp;&nbsp;&nbsp; select&nbsp;to_char(sysdate,'fmww')&nbsp;from&nbsp;dual</TD></TR></TBODY></TABLE></P></A>]]></description>
</item><item>
<title><![CDATA[Flex 3 发现之旅:AdvancedDataGrid的使用(第一部分)(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=40927</link>
<author>kkk888929</author>
<pubDate>2008/10/30 17:03:04</pubDate>
<description><![CDATA[<A>　
<P class=zh_p>Flex 3 已经开始公测，其带来了诸多变化，所以由今天开始，我们将陆续和大家一起来学习其中的新特性，进行我们的Flex 3发现之旅。</P>
<P class=zh_p>今天我们要说的是官方文档中用了整章介绍的AdvancedDataGrid，AdvancedDataGrid是DataGrid的高级版本，Flex 3 SDK并不包含它，其和Charting Enhancements一起构成了Flex Data Visualization package，TNND，也就是说这是收费组件，ADOBE的生财机器。所以官方提供的SDK中并没有这个组件，不过FlexBuilder 3 Beta1内置的SDK包含了Flex Data Visualization package，这个我已经将FlexBuilder 3 Beta1内置的SDK剥离出来了，需要的朋友可以从</A><A href="http://labs.eshangrao.com/flex/3/Flex_3_MOXIE_SDK.zip" target=_blank hreflang=zh><FONT color=#108ac6>这里</FONT></A><A>下载。</P>
<P class=zh_p>相对DataGrid组件，AdvancedDataGrid主要有以下几个高级之处：</P>
<UL>
<LI>多列排序：按住Control键在点击某一列的表头来实现多列排序。 
<LI>自定义行和列样式：通过设置行和列的styleFunction指向一个函数来样式化行列 
<LI>显示分层数据：在组件的第一列显示一个可缩放的导航数来控制表格行的显示。 
<LI>创建多列分组：将多列汇聚到同一列表头下。 
<LI>使用单元渲染器（renderers）：跨越多栏使用同一渲染器或者一列使用多个渲染器。 </LI></UL>
<P class=zh_p><STRONG>多列排序</STRONG></P>
<P class=zh_p>缺省的情况下，AdvancedDataGrid是按数据添加到它的DataProvider的顺序显示数据，和DataGrid组件一样，AdvancedDataGrid也允许您在数据显示后对数据进行排序。不同的是DataGrid只能基于单列排序，而AdvancedDataGrid支持基于多列的排序。</P>
<P class=zh_p>以下是多列排序的示例：</P><PRE class=xml><SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;?xml</SPAN> <SPAN style="COLOR: #000066">version</SPAN>=<SPAN style="COLOR: #ff0000">"1.0"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">?&gt;</SPAN></SPAN>
<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:Application</SPAN> <SPAN style="COLOR: #000066">xmlns:mx</SPAN>=<SPAN style="COLOR: #ff0000">"http://www.adobe.com/2006/mxml"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN>
&nbsp;
    <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:Script<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
      <SPAN style="COLOR: #339933">&lt;![CDATA[
         import mx.collections.ArrayCollection;
                  
         [Bindable]
         private var dpADG:ArrayCollection = new ArrayCollection([
           {Artist:'Pavement', Album:'Slanted and Enchanted', Price:12.99},
           {Artist:'Pavement', Album:'Brighten the Corners', Price:13.99},
           {Artist:'Saner', Album:'A Child Once', Price:14.99},
           {Artist:'Saner', Album:'Helium Wings', Price:12.99},
           {Artist:'The Doors', Album:'The Doors', Price:10.99},
           {Artist:'The Doors', Album:'Morrison Hotel', Price:12.99},
           {Artist:'Grateful Dead', Album:'American Beauty', Price:11.99},
           {Artist:'Grateful Dead', Album:'In the Dark', Price:17.99},
           {Artist:'Grateful Dead', Album:'Shakedown Street', Price:13.99},
           {Artist:'The Doors', Album:'Strange Days', Price:12.99},
           {Artist:'The Doors', Album:'The Best of the Doors', Price:10.99}
         ]);                   
      ]]&gt;</SPAN>
    <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:Script<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
&nbsp;
    <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGrid</SPAN> <SPAN style="COLOR: #000066">width</SPAN>=<SPAN style="COLOR: #ff0000">"100%"</SPAN> <SPAN style="COLOR: #000066">height</SPAN>=<SPAN style="COLOR: #ff0000">"100%"</SPAN>
        <SPAN style="COLOR: #000066">dataProvider</SPAN>=<SPAN style="COLOR: #ff0000">"{dpADG}"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN>
        <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:columns<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
            <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGridColumn</SPAN> <SPAN style="COLOR: #000066">dataField</SPAN>=<SPAN style="COLOR: #ff0000">"Artist"</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: black">/&gt;</SPAN></SPAN>
            <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGridColumn</SPAN> <SPAN style="COLOR: #000066">dataField</SPAN>=<SPAN style="COLOR: #ff0000">"Album"</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: black">/&gt;</SPAN></SPAN>
            <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGridColumn</SPAN> <SPAN style="COLOR: #000066">dataField</SPAN>=<SPAN style="COLOR: #ff0000">"Price"</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: black">/&gt;</SPAN></SPAN>
        <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:columns<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
    <SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:AdvancedDataGrid<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN> 
<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:Application<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN></PRE>
<P class=zh_p></A><A href="http://labs.eshangrao.com/flex/3/adg/Flex3_Adg_Sort.swf" target=_blank hreflang=zh><FONT color=#108ac6>运行示例</FONT></A><A></P>
<P class=zh_p>运行以上示例，如下进行排序：</P>
<OL>
<LI>点击AdvancedDataGrid组件的任意列表头对任意列进行排序，例如点击Artist列的列表头Artist列将升序进行排序，再次点击的话将按降序排序。 
<LI>按住Control键，点击其他任意的列头，例如点击Price列头，将在保持Artist列降序排列的情况下，将Price列按升序排列。现在你可以从中发现某一艺术家最便宜的专辑。 
<LI>再次点击Price列头，Price列将按降序排列 
<LI>按住Control键，点击任意其他列，将其加入排序条件中。 </LI></OL>
<P class=zh_p><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/sort_cols.jpg" _counted="undefined"></P>
<P class=zh_p>自定义行列样式</P>
<P class=zh_p>通过使用AdvancedDataGrid组件的回调(callback)函数来自定义表格行列的样式，要控制某一行的样式，使用</A><A href="http://livedocs.adobe.com/labs/flex/3/langref/mx/controls/advancedDataGridClasses/AdvancedDataGridBase.html#styleFunction" target=_blank><FONT color=#108ac6>AdvancedDataGrid.styleFunction</FONT></A><A>属性，要自定义某一列的样式，使用</A><A href="http://livedocs.adobe.com/labs/flex/3/langref/mx/controls/advancedDataGridClasses/AdvancedDataGridColumn.html#styleFunction" target=_blank><FONT color=#108ac6>AdvancedDataGridColumn.styleFunction</FONT></A><A>属性，AdvancedDataGrid.styleFunction指定的回调函数先执行，接着才执行AdvancedDataGridColumn.styleFunction属性指定的函数。</P>
<P class=zh_p>回调函数必须要有如下声明：</P><PRE class=java><SPAN style="FONT-WEIGHT: bold; COLOR: #000000">public</SPAN> function myStyleFunction<SPAN style="COLOR: #66cc66">(</SPAN>data:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>,column:SuperDataGridColumn<SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN></PRE>
<P class=zh_p>该函数返回一个包含用于表示样式设置的<EM>styleName:value</EM>对的完整对象，或者null。styleName为样式属性的名称，如Color，而value为样式属性的值，如0x00FF00。</P>
<P class=zh_p>AdvancedDataGrid会在更新显示时调用回调函数，如应用启动时该组件第一次会绘制的时候，或者在您调用invalidateList()来刷新组件所有行的显示时。</P>
<P class=zh_p>本节的示例将使用回调函数来定义AdvancedDataGrid的样式，本节中所有的示例都使用以下StyleData.as文件中的数据：</P><PRE class=java><SPAN style="COLOR: #66cc66">[</SPAN>Bindable<SPAN style="COLOR: #66cc66">]</SPAN>
 <SPAN style="FONT-WEIGHT: bold; COLOR: #000000">private</SPAN> var dpADG:ArrayCollection = <SPAN style="FONT-WEIGHT: bold; COLOR: #000000">new</SPAN> ArrayCollection<SPAN style="COLOR: #66cc66">(</SPAN><SPAN style="COLOR: #66cc66">[</SPAN>
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'Pavement'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'Slanted and Enchanted'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">12.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'Pavement'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'Brighten the Corners'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">13.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'Saner'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'A Child Once'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">14.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'Saner'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'Helium Wings'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">12.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'The Doors'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'The Doors'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">10.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'The Doors'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'Morrison Hotel'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">12.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'Grateful Dead'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'American Beauty'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">11.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'Grateful Dead'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'In the Dark'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">17.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'Grateful Dead'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'Shakedown Street'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">13.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'The Doors'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'Strange Days'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">12.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
   <SPAN style="COLOR: #66cc66">{</SPAN>Artist:<SPAN style="COLOR: #ff0000">'The Doors'</SPAN>, Album:<SPAN style="COLOR: #ff0000">'The Best of the Doors'</SPAN>, Price:<SPAN style="COLOR: #cc66cc">10.99</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>
 <SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;</PRE>
<P class=zh_p><STRONG>定义行样式</STRONG></P>
<P class=zh_p>以下示例使用AdvancedDataGrid.styleFunction属性指定一个回调函数来定义表格行样式。在该示例中，您可以使用Button控件来选择AdvancedDataGrid.styleFunction中的artist，然后回调函数将会红色高亮显示所有被选择的行。</P><PRE class=java>&lt;?xml version=<SPAN style="COLOR: #ff0000">"1.0"</SPAN>?&gt;
&lt;mx:Application xmlns:mx=<SPAN style="COLOR: #ff0000">"http://www.adobe.com/2006/mxml"</SPAN>&gt;
	&lt;mx:Script&gt;
		&lt;!<SPAN style="COLOR: #66cc66">[</SPAN>CDATA<SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #a1a100">import mx.collections.ArrayCollection;</SPAN>
			<SPAN style="COLOR: #a1a100">import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Include the data for the AdvancedDataGrid control.</SPAN>
			include <SPAN style="COLOR: #ff0000">"StyleData.as"</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Artist name to highlight.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">protected</SPAN> var artistName:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">String</SPAN>;
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Event handler to set the selected artist's name</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// based on the selected Button control.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">public</SPAN> function setArtistName<SPAN style="COLOR: #66cc66">(</SPAN>event:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Event</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="COLOR: #993333">void</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>
				artistName=<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN><SPAN style="COLOR: #66cc66">(</SPAN>event.<SPAN style="COLOR: #006600">currentTarget</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>.<SPAN style="COLOR: #006600">label</SPAN>;
				<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Refresh row display.</SPAN>
				myADG.<SPAN style="COLOR: #006600">invalidateList</SPAN><SPAN style="COLOR: #66cc66">(</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;
			<SPAN style="COLOR: #66cc66">}</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Callback function that hightlights in red</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// all rows for the selected artist.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">public</SPAN> function myStyleFunc<SPAN style="COLOR: #66cc66">(</SPAN>data:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>,
				col:AdvancedDataGridColumn<SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>
				<SPAN style="COLOR: #b1b100">if</SPAN> <SPAN style="COLOR: #66cc66">(</SPAN>data<SPAN style="COLOR: #66cc66">[</SPAN><SPAN style="COLOR: #ff0000">"Artist"</SPAN><SPAN style="COLOR: #66cc66">]</SPAN> == artistName<SPAN style="COLOR: #66cc66">)</SPAN>
				<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">return</SPAN> <SPAN style="COLOR: #66cc66">{</SPAN>color:0xFF0000<SPAN style="COLOR: #66cc66">}</SPAN>;
				<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Return null if the Artist name does not match.</SPAN>
				<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">return</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: #000000">null</SPAN>;
			<SPAN style="COLOR: #66cc66">}</SPAN>
		<SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">]</SPAN>&gt;
	&lt;/mx:Script&gt;
	&lt;mx:AdvancedDataGrid id=<SPAN style="COLOR: #ff0000">"myADG"</SPAN>
	width=<SPAN style="COLOR: #ff0000">"100%"</SPAN> height=<SPAN style="COLOR: #ff0000">"100%"</SPAN>
	dataProvider=<SPAN style="COLOR: #ff0000">"{dpADG}"</SPAN>
	styleFunction=<SPAN style="COLOR: #ff0000">"myStyleFunc"</SPAN>&gt;
		&lt;mx:columns&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Artist"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Album"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Price"</SPAN>/&gt;
		&lt;/mx:columns&gt;
	&lt;/mx:AdvancedDataGrid&gt;
	&lt;mx:HBox&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"Pavement"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"Saner"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"The Doors"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
	&lt;/mx:HBox&gt;
&lt;/mx:Application&gt;</PRE>
<P class=zh_p></A><A href="http://labs.eshangrao.com/flex/3/adg/SimpleADGRowStyleFunc.swf" target=_blank hreflang=zh><FONT color=#108ac6>运行示例</FONT></A><A></P>
<P class=zh_p><FONT color=#108ac6><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/styleingRow.jpg" _counted="undefined"></FONT></P>
<P class=zh_p><STRONG>定义列样式</STRONG></P>
<P class=zh_p>以下示例修改上节的示例来定义AdvancedDataGrid的行和列样式。在该示例中，所有价格小于$11.00的单元都将显示为绿色。</P><PRE class=java>&lt;?xml version=<SPAN style="COLOR: #ff0000">"1.0"</SPAN>?&gt;
&lt;mx:Application xmlns:mx=<SPAN style="COLOR: #ff0000">"http://www.adobe.com/2006/mxml"</SPAN>&gt;
	&lt;mx:Script&gt;
		&lt;!<SPAN style="COLOR: #66cc66">[</SPAN>CDATA<SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #a1a100">import mx.collections.ArrayCollection;</SPAN>
			<SPAN style="COLOR: #a1a100">import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Include the data for the AdvancedDataGrid control.</SPAN>
			include <SPAN style="COLOR: #ff0000">"StyleData.as"</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Artist name to highlight.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">protected</SPAN> var artistName:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">String</SPAN>;
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Event handler to set the selected artist's name</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// based on the selected Button control.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">public</SPAN> function setArtistName<SPAN style="COLOR: #66cc66">(</SPAN>event:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Event</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="COLOR: #993333">void</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>
				artistName=<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN><SPAN style="COLOR: #66cc66">(</SPAN>event.<SPAN style="COLOR: #006600">currentTarget</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>.<SPAN style="COLOR: #006600">label</SPAN>;
				<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Refresh row display.</SPAN>
				myADG.<SPAN style="COLOR: #006600">invalidateList</SPAN><SPAN style="COLOR: #66cc66">(</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;
			<SPAN style="COLOR: #66cc66">}</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Callback function that hightlights in red</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// all rows for the selected artist.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">public</SPAN> function myStyleFunc<SPAN style="COLOR: #66cc66">(</SPAN>data:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>,
				col:AdvancedDataGridColumn<SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>
				<SPAN style="COLOR: #b1b100">if</SPAN> <SPAN style="COLOR: #66cc66">(</SPAN>data<SPAN style="COLOR: #66cc66">[</SPAN><SPAN style="COLOR: #ff0000">"Artist"</SPAN><SPAN style="COLOR: #66cc66">]</SPAN> == artistName<SPAN style="COLOR: #66cc66">)</SPAN>
				<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">return</SPAN> <SPAN style="COLOR: #66cc66">{</SPAN>color:0xFF0000<SPAN style="COLOR: #66cc66">}</SPAN>;
				<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Return null if the Artist name does not match.</SPAN>
				<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">return</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: #000000">null</SPAN>;
			<SPAN style="COLOR: #66cc66">}</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Callback function that hightlights in green</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// all entries in the Price column</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// with a value less than $11.00.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">public</SPAN> function myColStyleFunc<SPAN style="COLOR: #66cc66">(</SPAN>data:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>,
				col:AdvancedDataGridColumn<SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>
				<SPAN style="COLOR: #b1b100">if</SPAN><SPAN style="COLOR: #66cc66">(</SPAN>data<SPAN style="COLOR: #66cc66">[</SPAN><SPAN style="COLOR: #ff0000">"Price"</SPAN><SPAN style="COLOR: #66cc66">]</SPAN> &lt;= <SPAN style="COLOR: #cc66cc">11.00</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>
					<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">return</SPAN> <SPAN style="COLOR: #66cc66">{</SPAN>color:0x00FF00<SPAN style="COLOR: #66cc66">}</SPAN>;
				<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">return</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: #000000">null</SPAN>;
			<SPAN style="COLOR: #66cc66">}</SPAN>
		<SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">]</SPAN>&gt;
	&lt;/mx:Script&gt;
	&lt;mx:AdvancedDataGrid id=<SPAN style="COLOR: #ff0000">"myADG"</SPAN>
		width=<SPAN style="COLOR: #ff0000">"100%"</SPAN> height=<SPAN style="COLOR: #ff0000">"100%"</SPAN>
		dataProvider=<SPAN style="COLOR: #ff0000">"{dpADG}"</SPAN>
		styleFunction=<SPAN style="COLOR: #ff0000">"myStyleFunc"</SPAN>&gt;
		&lt;mx:columns&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Artist"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Album"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Price"</SPAN>
				styleFunction=<SPAN style="COLOR: #ff0000">"myColStyleFunc"</SPAN>/&gt;
		&lt;/mx:columns&gt;
	&lt;/mx:AdvancedDataGrid&gt;
	&lt;mx:HBox&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"Pavement"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"Saner"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"The Doors"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
	&lt;/mx:HBox&gt;
&lt;/mx:Application&gt;</PRE>
<P class=zh_p></A><A href="http://labs.eshangrao.com/flex/3/adg/SimpleADGRowStyleFunc2.swf" target=_blank hreflang=zh><FONT color=#108ac6>运行示例</FONT></A><A></P>
<P class=zh_p><FONT color=#108ac6><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/styleingCol.jpg" _counted="undefined"></FONT></P>
<P class=zh_p><STRONG>在列中使用数据格式器（formatter）</STRONG></P>
<P class=zh_p>AdvancedDataGridColumn有一个formatter属性，通过它，您可以向列传递一个Formatter类，或者Formatter子类的实例。格式器类可以将数据转换为自定义的字符串。例如您可以使用CurrencyFormatter类在Price列值的加上美元符($)前缀。</P>
<P class=zh_p>格式器类可以和labelFunction属性或styleFunction属性设定的回调函数一起使用，如果您指定了一个回调函数，Flex在回调函数值返回后调用格式器类。</P>
<P class=zh_p>以下示例在修改自自定义行样式章节示例，在Price列增加了一个货币格式器以在价格前显示$前缀：</P><PRE class=java>&lt;?xml version=<SPAN style="COLOR: #ff0000">"1.0"</SPAN>?&gt;
&lt;mx:Application xmlns:mx=<SPAN style="COLOR: #ff0000">"http://www.adobe.com/2006/mxml"</SPAN>&gt;
	&lt;mx:Script&gt;
		&lt;!<SPAN style="COLOR: #66cc66">[</SPAN>CDATA<SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #a1a100">import mx.collections.ArrayCollection;</SPAN>
			<SPAN style="COLOR: #a1a100">import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Include the data for the AdvancedDataGrid control.</SPAN>
			include <SPAN style="COLOR: #ff0000">"StyleData.as"</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Artist name to highlight.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">protected</SPAN> var artistName:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">String</SPAN>;
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Event handler to set the selected artist's name</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// based on the selected Button control.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">public</SPAN> function setArtistName<SPAN style="COLOR: #66cc66">(</SPAN>event:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Event</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="COLOR: #993333">void</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>
				artistName=<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN><SPAN style="COLOR: #66cc66">(</SPAN>event.<SPAN style="COLOR: #006600">currentTarget</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>.<SPAN style="COLOR: #006600">label</SPAN>;
				<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Refresh row display.</SPAN>
				myADG.<SPAN style="COLOR: #006600">invalidateList</SPAN><SPAN style="COLOR: #66cc66">(</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;
			<SPAN style="COLOR: #66cc66">}</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Callback function that hightlights in red</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// all rows for the selected artist.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">public</SPAN> function myStyleFunc<SPAN style="COLOR: #66cc66">(</SPAN>data:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>,
				col:AdvancedDataGridColumn<SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>
				<SPAN style="COLOR: #b1b100">if</SPAN> <SPAN style="COLOR: #66cc66">(</SPAN>data<SPAN style="COLOR: #66cc66">[</SPAN><SPAN style="COLOR: #ff0000">"Artist"</SPAN><SPAN style="COLOR: #66cc66">]</SPAN> == artistName<SPAN style="COLOR: #66cc66">)</SPAN>
				<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">return</SPAN> <SPAN style="COLOR: #66cc66">{</SPAN>color:0xFF0000<SPAN style="COLOR: #66cc66">}</SPAN>;
				<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Return null if the Artist name does not match.</SPAN>
				<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">return</SPAN> <SPAN style="FONT-WEIGHT: bold; COLOR: #000000">null</SPAN>;
			<SPAN style="COLOR: #66cc66">}</SPAN>
		<SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">]</SPAN>&gt;
	&lt;/mx:Script&gt;
	&lt;mx:AdvancedDataGrid id=<SPAN style="COLOR: #ff0000">"myADG"</SPAN>
		width=<SPAN style="COLOR: #ff0000">"100%"</SPAN> height=<SPAN style="COLOR: #ff0000">"100%"</SPAN>
		dataProvider=<SPAN style="COLOR: #ff0000">"{dpADG}"</SPAN>
		styleFunction=<SPAN style="COLOR: #ff0000">"myStyleFunc"</SPAN>&gt;
		&lt;mx:columns&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Artist"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Album"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn  width=<SPAN style="COLOR: #ff0000">"75"</SPAN> dataField=<SPAN style="COLOR: #ff0000">"Price"</SPAN>&gt;
				&lt;mx:formatter&gt;
					&lt;mx:CurrencyFormatter/&gt;
				&lt;/mx:formatter&gt;
			&lt;/mx:AdvancedDataGridColumn&gt;
		&lt;/mx:columns&gt;
	&lt;/mx:AdvancedDataGrid&gt;
	&lt;mx:HBox&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"Pavement"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"Saner"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
		&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Button</SPAN> label=<SPAN style="COLOR: #ff0000">"The Doors"</SPAN> click=<SPAN style="COLOR: #ff0000">"setArtistName(event);"</SPAN>/&gt;
	&lt;/mx:HBox&gt;
&lt;/mx:Application&gt;</PRE>
<P class=zh_p></A><A href="http://labs.eshangrao.com/flex/3/adg/SimpleADGRowStyleFunc3.swf" target=_blank hreflang=zh><FONT color=#108ac6>运行示例</FONT></A><A></P>
<P class=zh_p><FONT color=#108ac6><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/styleingFormatter.jpg" _counted="undefined"></FONT></P>
<P class=zh_p><STRONG>选择多个单元格及多行</STRONG></P>
<P class=zh_p>所有基于List的控件都支持allowMultipleSelection属性。将allowMultipleSelection属性设置为True可以使得您在控件中一次选择不止一个条目。例如，DataGrid控件可以让您选择多行这样您就可以将他们拖放到另一个DataGrid中。</P>
<P class=zh_p>AdvancedDataGrid增加了可以让您选择多个单元格的新的特性，一旦已选择，您就可以将其拖放到另一个AdvancedDataGrid控件中、将它们拷贝到剪切板中或者在单元格数据进行某些其他的处理。</P>
<P class=zh_p>您可以使用AdvancedDataGrid控件的selectionMode和allowMultipleSelection配置多重选择。selectionMode的缺省属性是singleRow，这就是说您一次只能选择单行。要多重选择，需要将selectionMode属性设置为multipleRows或者multipleCells。</P>
<P class=zh_p>多个单元格的选择方式和表格处理软件中的用法相似，连续的使用Shift键，非连续的使用Control建。</P>
<P class=zh_p><STRONG>选择控件中邻近的单元</STRONG></P>
<OL>
<LI>点击第一个单元，在某行或某列，选择它。 
<LI>在选择其他的单元时按下Shift键。如果selectionMode设置为multipleRows，点击任何其他行的单元格来选择多个时，将选择邻近的行。如果selectionMode设置为multipleCells，点击任何单元格，将选择邻近的单元格 </LI></OL>
<P class=zh_p><STRONG>选择控件中非邻近的单元</STRONG></P>
<OL>
<LI>点击第一个单元，在某行或某列，选择它。 
<LI>在选择其他的单元时按下Control键。如果selectionMode设置为multipleRows，点击任何其他行的单元格来选择多个时，将选择该单独的行。如果selectionMode设置为multipleCells，点击任何单元格，将选择该单独的单元格 </LI></OL>
<P class=zh_p>一旦选择了AdvancedDataGrid控件的某行或列时，该控件将更新selectedCells属性来记录您的选择信息。selectedCells是一个对象数组，它包含的每个对象都有一个rowIndex和columnIndex属性来表示您选择的单元格在控件中的行列的位置。</P>
<P class=zh_p>selectionMode属性的值决定了rowIndex和columnIndex属性的值，如下表所示：</P>
<P class=zh_p>
<TABLE class=summaryTable cellSpacing=0 cellPadding=3 border=0>
<TBODY>
<TR class=prow0>
<TD>selectionMode属性</TD>
<TD>rowIndex和columnIndex属性值</TD></TR>
<TR class=prow1>
<TD>none</TD>
<TD>控件不允许选择，并且selectedCells为null</TD></TR>
<TR class=prow0>
<TD>singleRow</TD>
<TD>点击某行的任意单元来选择该行。<BR>在选择后，selectedCells包含一个单独对象：<BR>[{rowIndex:selectedRowIndex, columnIndex: -1}]</TD></TR>
<TR class=prow1>
<TD>multipleRows</TD>
<TD>点击某行的任意单元来选择该行。<BR>对于非邻近行，按下Control键时，点击其他行的单元格来选择其他行。<BR>对于邻近行，按下Shfit键时，点击其他行的单元格来选择多个连续的行。<BR>选择后，每行在selectedCells保存为一个对象：<BR><PRE class=java><SPAN style="COLOR: #66cc66">[</SPAN> <SPAN style="COLOR: #66cc66">{</SPAN>rowIndex: selectedRowIndex1, columnIndex: <SPAN style="COLOR: #cc66cc">-1</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
  <SPAN style="COLOR: #66cc66">{</SPAN>rowIndex: selectedRowIndex2, columnIndex: <SPAN style="COLOR: #cc66cc">-1</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
  ...
  <SPAN style="COLOR: #66cc66">{</SPAN>rowIndex: selectedRowIndexN, columnIndex: <SPAN style="COLOR: #cc66cc">-1</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>
<SPAN style="COLOR: #66cc66">]</SPAN></PRE></TD></TR>
<TR class=prow0>
<TD>singleCell</TD>
<TD>点击任意单元来选择该单元格。<BR>在选择后，selectedCells包含一个单独对象：<BR>[{rowIndex: selectedRowIndex, columnIndex:selectedColIndex}]</TD></TR>
<TR>
<TD>multipleCells</TD>
<TD>点击任意单元来选择该单元格。<BR>对于非邻近单元，按下Control键时，点击任意单元格来选择多个非连续的单元格。<BR>对于邻近单元，按下Shfit键时，点击任意单元格来选择多个连续的单元格。<BR>选择后，每行在selectedCells保存为一个对象：<BR><PRE class=java><SPAN style="COLOR: #66cc66">[</SPAN> <SPAN style="COLOR: #66cc66">{</SPAN>rowIndex: selectedRowIndex1, columnIndex: selectedColIndex1<SPAN style="COLOR: #66cc66">}</SPAN>,
  <SPAN style="COLOR: #66cc66">{</SPAN>rowIndex: selectedRowIndex2, columnIndex: selectedColIndex2<SPAN style="COLOR: #66cc66">}</SPAN>,
  ...
  <SPAN style="COLOR: #66cc66">{</SPAN>rowIndex: selectedRowIndexN, columnIndex: selectedColIndexN<SPAN style="COLOR: #66cc66">}</SPAN>
<SPAN style="COLOR: #66cc66">]</SPAN></PRE></TD></TR></TBODY></TABLE></P>
<P class=zh_p>以下示例设置selectionMode属性为multipleCells使得您可以选择表格中的多个单元。该应用使用KeyUp事件处理器来识别Control-C组合键，如果监听到，将选择的多个单元格从AdvancedDataGrid控件复制到系统剪贴板中。</P>
<P class=zh_p>在拷贝单元格后，您可以将这些单元格粘贴到Flex应用的其他位置中，或者将它们粘贴到其他应用如微软Excel。您可以将它们粘贴到应用底部的TextArea中去。</P><PRE class=java>&lt;?xml version=<SPAN style="COLOR: #ff0000">"1.0"</SPAN>?&gt;
&lt;mx:Application xmlns:mx=<SPAN style="COLOR: #ff0000">"http://www.adobe.com/2006/mxml"</SPAN>&gt;
	&lt;mx:Script&gt;
		&lt;!<SPAN style="COLOR: #66cc66">[</SPAN>CDATA<SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #a1a100">import mx.collections.ArrayCollection;</SPAN>
			<SPAN style="COLOR: #a1a100">import flash.events.KeyboardEvent;</SPAN>
			<SPAN style="COLOR: #a1a100">import flash.system.System;</SPAN>
			include <SPAN style="COLOR: #ff0000">"StyleData.as"</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Event handler to recognize when Ctrl-C is pressed,</SPAN>
			<SPAN style="COLOR: #808080; FONT-STYLE: italic">// and copy the selected cells to the system clipboard.</SPAN>
			<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">private</SPAN> function myKeyUpHandler<SPAN style="COLOR: #66cc66">(</SPAN>event:KeyboardEvent<SPAN style="COLOR: #66cc66">)</SPAN>:<SPAN style="COLOR: #993333">void</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>
				var keycode_c:uint = <SPAN style="COLOR: #cc66cc">67</SPAN>;
				<SPAN style="COLOR: #b1b100">if</SPAN> <SPAN style="COLOR: #66cc66">(</SPAN>event.<SPAN style="COLOR: #006600">ctrlKey</SPAN> &amp;&amp; event.<SPAN style="COLOR: #006600">keyCode</SPAN> == keycode_c<SPAN style="COLOR: #66cc66">)</SPAN>
				<SPAN style="COLOR: #66cc66">{</SPAN>
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Separator used between Strings sent to clipboard</SPAN>
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// to separate selected cells.</SPAN>
					var separator:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">String</SPAN> = <SPAN style="COLOR: #ff0000">","</SPAN>;
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// The String sent to the clipboard</SPAN>
					var dataString:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">String</SPAN> = <SPAN style="COLOR: #ff0000">""</SPAN>;
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Loop over the selectedCells property.</SPAN>
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Data in selectedCells is ordered so that</SPAN>
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// the last selected cell is at the head of the list.</SPAN>
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Process the data in reverse so</SPAN>
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// that it appears in the correct order in the clipboard.</SPAN>
					var n:<SPAN style="COLOR: #993333">int</SPAN> = event.<SPAN style="COLOR: #006600">currentTarget</SPAN>.<SPAN style="COLOR: #006600">selectedCells</SPAN>.<SPAN style="COLOR: #006600">length</SPAN>;
					<SPAN style="COLOR: #b1b100">for</SPAN> <SPAN style="COLOR: #66cc66">(</SPAN>var i:<SPAN style="COLOR: #993333">int</SPAN> = <SPAN style="COLOR: #cc66cc">0</SPAN>; i &lt; n; i++<SPAN style="COLOR: #66cc66">)</SPAN>
					<SPAN style="COLOR: #66cc66">{</SPAN>
						var cell:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN> = event.<SPAN style="COLOR: #006600">currentTarget</SPAN>.<SPAN style="COLOR: #006600">selectedCells</SPAN><SPAN style="COLOR: #66cc66">[</SPAN>i<SPAN style="COLOR: #66cc66">]</SPAN>;
						<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Get the row for the selected cell.</SPAN>
						var data:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">Object</SPAN> =
						event.<SPAN style="COLOR: #006600">currentTarget</SPAN>.<SPAN style="COLOR: #006600">dataProvider</SPAN><SPAN style="COLOR: #66cc66">[</SPAN>cell.<SPAN style="COLOR: #006600">rowIndex</SPAN><SPAN style="COLOR: #66cc66">]</SPAN>;
						<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Get the name of the field for the selected cell.</SPAN>
						var dataField:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">String</SPAN> =
						event.<SPAN style="COLOR: #006600">currentTarget</SPAN>.<SPAN style="COLOR: #006600">columns</SPAN><SPAN style="COLOR: #66cc66">[</SPAN>cell.<SPAN style="COLOR: #006600">columnIndex</SPAN><SPAN style="COLOR: #66cc66">]</SPAN>.<SPAN style="COLOR: #006600">dataField</SPAN>;
						<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Get the cell data using the field name.</SPAN>
						dataString = data<SPAN style="COLOR: #66cc66">[</SPAN>dataField<SPAN style="COLOR: #66cc66">]</SPAN> + separator + dataString;
					<SPAN style="COLOR: #66cc66">}</SPAN>
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Remove trailing separator.</SPAN>
					dataString =
					dataString.<SPAN style="COLOR: #006600">substr</SPAN><SPAN style="COLOR: #66cc66">(</SPAN><SPAN style="COLOR: #cc66cc">0</SPAN>, dataString.<SPAN style="COLOR: #006600">length</SPAN> - separator.<SPAN style="COLOR: #006600">length</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;
					<SPAN style="COLOR: #808080; FONT-STYLE: italic">// Write dataString to the clipboard.</SPAN>
					<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">System</SPAN>.<SPAN style="COLOR: #006600">setClipboard</SPAN><SPAN style="COLOR: #66cc66">(</SPAN>dataString<SPAN style="COLOR: #66cc66">)</SPAN>;
				<SPAN style="COLOR: #66cc66">}</SPAN>
			<SPAN style="COLOR: #66cc66">}</SPAN>
		<SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">]</SPAN>&gt;
	&lt;/mx:Script&gt;
	&lt;mx:AdvancedDataGrid width=<SPAN style="COLOR: #ff0000">"100%"</SPAN> height=<SPAN style="COLOR: #ff0000">"100%"</SPAN>
		dataProvider=<SPAN style="COLOR: #ff0000">"{dpADG}"</SPAN>
		selectionMode=<SPAN style="COLOR: #ff0000">"multipleCells"</SPAN>
		allowMultipleSelection=<SPAN style="COLOR: #ff0000">"true"</SPAN>
		keyUp=<SPAN style="COLOR: #ff0000">"myKeyUpHandler(event);"</SPAN>&gt;
		&lt;mx:columns&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Artist"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Album"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Price"</SPAN>/&gt;
		&lt;/mx:columns&gt;
	&lt;/mx:AdvancedDataGrid&gt;
	&lt;mx:<SPAN style="FONT-WEIGHT: bold; COLOR: #aaaadd">TextArea</SPAN> id=<SPAN style="COLOR: #ff0000">"myTA"</SPAN>/&gt;
&lt;/mx:Application&gt;</PRE>
<P class=zh_p></A><A href="http://labs.eshangrao.com/flex/3/adg/CellSelectADG.swf" target=_blank hreflang=zh><FONT color=#108ac6>运行示例</FONT></A><A></P>
<P class=zh_p><FONT color=#108ac6><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/mulSel.jpg" _counted="undefined"></FONT></P>
<P class=zh_p><STRONG>分层和分组数据显示</STRONG></P>
<P class=zh_p>AdvancedDataGrid支持分级和分组数据的显示，为了支持这样的显示，AdvancedDataGrid在第一列显示一个导航树以让您分级浏览数据。</P>
<P class=zh_p><EM>分层数据（Hierarchical data）</EM>是一种以父子项目结构分层的数据，<EM>分组数据（Grouped data）</EM>是一开始就为平面的而无内在层次关系的数据。在将该数据传递给AdvancedDataGrid前，您可以指定一个或更多的数据字段将一组数据归组为同一层次。</P>
<P class=zh_p>以下文件中的代码演示分级数据示例：</P><PRE class=java><SPAN style="COLOR: #808080; FONT-STYLE: italic">//SimpleHierarchicalData.as:</SPAN>
&nbsp;
<SPAN style="COLOR: #66cc66">[</SPAN>Bindable<SPAN style="COLOR: #66cc66">]</SPAN>
<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">private</SPAN> var dpHierarchy:ArrayCollection = <SPAN style="FONT-WEIGHT: bold; COLOR: #000000">new</SPAN> ArrayCollection<SPAN style="COLOR: #66cc66">(</SPAN><SPAN style="COLOR: #66cc66">[</SPAN>
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, children: <SPAN style="COLOR: #66cc66">[</SPAN>
		<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Arizona"</SPAN>, children: <SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>Territory_Rep:<SPAN style="COLOR: #ff0000">"Barbara Jennings"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">38865</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">40000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
			<SPAN style="COLOR: #66cc66">{</SPAN>Territory_Rep:<SPAN style="COLOR: #ff0000">"Dana Binn"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">29885</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">30000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN><SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
		<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Central California"</SPAN>, children: <SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>Territory_Rep:<SPAN style="COLOR: #ff0000">"Joe Smith"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">29134</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">30000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN><SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
		<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Nevada"</SPAN>, children: <SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>Territory_Rep:<SPAN style="COLOR: #ff0000">"Bethany Pittman"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">52888</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">45000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN><SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
		<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Northern California"</SPAN>, children: <SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>Territory_Rep:<SPAN style="COLOR: #ff0000">"Lauren Ipsum"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">38805</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">40000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
			<SPAN style="COLOR: #66cc66">{</SPAN>Territory_Rep:<SPAN style="COLOR: #ff0000">"T.R. Smith"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">55498</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">40000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN><SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
		<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southern California"</SPAN>, children: <SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #66cc66">{</SPAN>Territory_Rep:<SPAN style="COLOR: #ff0000">"Alice Treu"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">44985</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">45000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
			<SPAN style="COLOR: #66cc66">{</SPAN>Territory_Rep:<SPAN style="COLOR: #ff0000">"Jane Grove"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">44913</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">45000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN><SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>
	<SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>
<SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;</PRE>
<P class=zh_p>注意该数据的顶层数据包含一个Region字段和多个第二层子对象，每个第二层子对象也包含一个Region字段和多个其他的子对象，以下示例演示AdvancedDataGrid控件对该数据的显示效果：</P>
<P class=zh_p><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/simpleHierarchicalADG.jpg" _counted="undefined"></P>
<P class=zh_p>该示例的代码在“控制导航树”章节中。</P>
<P class=zh_p>要显示扁平数据，在将其传递给AdvancedDataGrid前您首先要对数据进行归组。以下代码包含的是前面示例中分层数据的变异版本，其将数据组织为以平面结构：</P><PRE class=java><SPAN style="COLOR: #66cc66">[</SPAN>Bindable<SPAN style="COLOR: #66cc66">]</SPAN>
<SPAN style="FONT-WEIGHT: bold; COLOR: #000000">private</SPAN> var dpFlat:ArrayCollection = <SPAN style="FONT-WEIGHT: bold; COLOR: #000000">new</SPAN> ArrayCollection<SPAN style="COLOR: #66cc66">(</SPAN><SPAN style="COLOR: #66cc66">[</SPAN>
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, Territory:<SPAN style="COLOR: #ff0000">"Arizona"</SPAN>,
		Territory_Rep:<SPAN style="COLOR: #ff0000">"Barbara Jennings"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">38865</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">40000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, Territory:<SPAN style="COLOR: #ff0000">"Arizona"</SPAN>,
		Territory_Rep:<SPAN style="COLOR: #ff0000">"Dana Binn"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">29885</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">30000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, Territory:<SPAN style="COLOR: #ff0000">"Central California"</SPAN>,
		Territory_Rep:<SPAN style="COLOR: #ff0000">"Joe Smith"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">29134</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">30000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, Territory:<SPAN style="COLOR: #ff0000">"Nevada"</SPAN>,
		Territory_Rep:<SPAN style="COLOR: #ff0000">"Bethany Pittman"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">52888</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">45000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, Territory:<SPAN style="COLOR: #ff0000">"Northern California"</SPAN>,
		Territory_Rep:<SPAN style="COLOR: #ff0000">"Lauren Ipsum"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">38805</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">40000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, Territory:<SPAN style="COLOR: #ff0000">"Northern California"</SPAN>,
		Territory_Rep:<SPAN style="COLOR: #ff0000">"T.R. Smith"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">55498</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">40000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, Territory:<SPAN style="COLOR: #ff0000">"Southern California"</SPAN>,
		Territory_Rep:<SPAN style="COLOR: #ff0000">"Alice Treu"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">44985</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">45000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>,
	<SPAN style="COLOR: #66cc66">{</SPAN>Region:<SPAN style="COLOR: #ff0000">"Southwest"</SPAN>, Territory:<SPAN style="COLOR: #ff0000">"Southern California"</SPAN>,
		Territory_Rep:<SPAN style="COLOR: #ff0000">"Jane Grove"</SPAN>, Actual:<SPAN style="COLOR: #cc66cc">44913</SPAN>, Estimate:<SPAN style="COLOR: #cc66cc">45000</SPAN><SPAN style="COLOR: #66cc66">}</SPAN>
<SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;</PRE>
<P class=zh_p>在该示例中，数据只包含一个层面没有内在的层次的单独纪录,要归组该数据，您可以指定一个或更多的数据字段将该数据归组为同一层次。以下示例演示AdvancedDataGrid控件对平面数据通过Region字段进行的分组。</P>
<P class=zh_p><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/SimpleGroupADGMXML.jpg" _counted="undefined"></P>
<P class=zh_p>该示例代码在“显示分组数据“章节中</P>
<P class=zh_p><STRONG>设置分层数据的数据源</STRONG></P>
<P class=zh_p>要配置AdvancedDataGrid显示分级数据和导航树，您传递给dataProvider属性以HierarchicalData类或者GroupingCollection类的实例，当您的数据以层次组织时使用HierarchicalData类。更多信息请查看“显示分层数据”。</P>
<P class=zh_p>当您的数据以平面结构组织时使用GroupingCollection类，作为配置一个GroupingCollection类的实例的一部分，您需要指定一个或更多的字段来将平面数据组织为同一层次。更多信息请查看“显示分组数据”。</P>
<P class=zh_p>您可以从任意数据创建一个HierarchicalData类或GroupingCollection类的实例来作为数据源。但是，AdvancedDataGrid控件按如下修改它为内部的数据表示：</P>
<UL>
<LI>一个数组实例在AdvancedDataGrid控件内部使用一个ArrayCollection类实例表示。 
<LI>一个ArrayCollection在AdvancedDataGrid控件内部使用一个ArrayCollection类实例表示。 
<LI>一个包含正确XML文本的字符串在AdvancedDataGrid控件内部使用一个XMLListCollection类实例表示。 
<LI>一个XMLNode实例在AdvancedDataGrid控件内部使用一个XMLListCollection类实例表示。 
<LI>一个XMLList实例在AdvancedDataGrid控件内部使用一个XMLListCollection类实例表示。 
<LI>任何实现ICollectionView接口的对象在AdvancedDataGrid控件内部使用一个ICollectionView实例表示。 
<LI>一个其他任意类型的对象被作为唯一的条目包裹在一个的数组示例中。 </LI></UL>
<P class=zh_p>例如，如果您使用一个数组来创建HierarchicalData类的一个实例，并将该HierarchicalData实例传递给AdvancedDataGrid.dataProvider属性，然后又从AdvancedDataGrid.dataProvider属性将其读回；您读回的数据将是一个ArrayCollection实例。</P>
<P class=zh_p><STRONG>控制导航树</STRONG></P>
<P class=zh_p>AdvancedDataGrid控件有时候因为该控件的第一列使用一个可缩放数来选择行的显示而被称作<EM>tree datagrid</EM>，唯一要记住的规则是该树总是显示在所有列的最左边。尽管在AdvancedDataGrid控件您可以任意组织列而不管数据是如何组织的。并且您可以通过拖动列来对AdvancedDataGrid控件上的列进行重新定位，但是导航树总是出现在列的最左边。</P>
<P class=zh_p>数据表格的第一列通常与该控件的数据源的某一字段关联。该数据字段用于为树节点标签命名。</P>
<P class=zh_p>在以下示例中，想您展示了“分层和分组数据显示”章节提到的AdvancedDataGrid控件分层结构数据的显示。该数据的顶层数据包含一个Region字段和多个第二层子对象，每个第二层子对象也包含一个Region字段和多个其他的子对象。</P>
<P class=zh_p>该示例中的AdvancedDataGrid控件定义了四列来显示数据：Region、Territory Rep、 Actual和Estimate。</P><PRE class=java>&lt;?xml version=<SPAN style="COLOR: #ff0000">"1.0"</SPAN> encoding=<SPAN style="COLOR: #ff0000">"utf-8"</SPAN>?&gt;
&lt;mx:Application xmlns:mx=<SPAN style="COLOR: #ff0000">"http://www.adobe.com/2006/mxml"</SPAN> layout=<SPAN style="COLOR: #ff0000">"vertical"</SPAN>&gt;
	&lt;mx:Script&gt;
		&lt;!<SPAN style="COLOR: #66cc66">[</SPAN>CDATA<SPAN style="COLOR: #66cc66">[</SPAN>
			<SPAN style="COLOR: #a1a100">import mx.collections.ArrayCollection;</SPAN>
			include <SPAN style="COLOR: #ff0000">"SimpleHierarchicalData.as"</SPAN>;
		<SPAN style="COLOR: #66cc66">]</SPAN><SPAN style="COLOR: #66cc66">]</SPAN>&gt;
	&lt;/mx:Script&gt;
	&lt;mx:AdvancedDataGrid width=<SPAN style="COLOR: #ff0000">"100%"</SPAN> height=<SPAN style="COLOR: #ff0000">"100%"</SPAN>&gt;
		&lt;mx:dataProvider&gt;
			&lt;mx:HierarchicalData source=<SPAN style="COLOR: #ff0000">"{dpHierarchy}"</SPAN>/&gt;
		&lt;/mx:dataProvider&gt;
		&lt;mx:columns&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Region"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Territory_Rep"</SPAN>
			headerText=<SPAN style="COLOR: #ff0000">"Territory Rep"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Actual"</SPAN>/&gt;
			&lt;mx:AdvancedDataGridColumn dataField=<SPAN style="COLOR: #ff0000">"Estimate"</SPAN>/&gt;
		&lt;/mx:columns&gt;
	&lt;/mx:AdvancedDataGrid&gt;
&lt;/mx:Application&gt;</PRE>
<P class=zh_p></A><A href="http://labs.eshangrao.com/flex/3/adg/SimpleHierarchicalADG.swf" target=_blank hreflang=zh><FONT color=#108ac6>运行示例</FONT></A><A></P>
<P class=zh_p>以下图片为上述示例创建的AdvancedDataGrid控件。该控件使用文件夹图标表示数据分支节点，使用文件图标代表叶子节点。控件的第一列和数据源的Region相关联。所以标签显示的是Region字段的值。</P>
<P class=zh_p><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/simpleHierarchicalADG.jpg" _counted="undefined"></P>
<P class=zh_p>注意树的叶子图标没有显示标签。这是因为每个territory都没包含Region字段。下一章我们将描述怎样控制导航树的图标显示。</P>
<P class=zh_p><STRONG>设置导航树图标和标签</STRONG></P>
<P class=zh_p>导航树可以让您控制分支和叶子节点的图标和标签。您可显示一个有标签无图标的树、一个只有分支图标的树、一个所有都没有标签的树或者一个不与任何数据字段相关的自由列数。</P>
<P class=zh_p>以下表描述了AdvancedDataGrid控件用于设置树图标的样式属性：</P>
<P class=zh_p>
<TABLE class=summaryTable cellSpacing=0 cellPadding=3 border=0>
<TBODY>
<TR class=prow0>
<TD>样式属性</TD>
<TD>描述</TD></TR>
<TR class=prow1>
<TD>defaultLeafIcon</TD>
<TD>指定叶子节点图标</TD></TR>
<TR class=prow0>
<TD>disclosureClosedIcon</TD>
<TD>指定显示在封闭的分支节点前面的图标，缺省是一个黑三角形。</TD></TR>
<TR class=prow1>
<TD>disclosureOpenIcon</TD>
<TD>指定显示在展开的分支节点前面的图标，缺省是一个黑三角形。</TD></TR>
<TR class=prow0>
<TD>folderClosedIcon</TD>
<TD>为分支节点指定一个文件夹关闭图标</TD></TR>
<TR class=prow1>
<TD>folderOpenIcon</TD>
<TD>为分支节点指定一个文件夹打开图标</TD></TR></TBODY></TABLE></P>
<P class=zh_p>以下示例设置缺省叶子图标为null以隐藏它，并且使用自定义的文件夹打开和关闭图标：</P><PRE class=xml><SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;?xml</SPAN> <SPAN style="COLOR: #000066">version</SPAN>=<SPAN style="COLOR: #ff0000">"1.0"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">?&gt;</SPAN></SPAN>
<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:Application</SPAN> <SPAN style="COLOR: #000066">xmlns:mx</SPAN>=<SPAN style="COLOR: #ff0000">"http://www.adobe.com/2006/mxml"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN>
	<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:Script<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
		<SPAN style="COLOR: #339933">&lt;![CDATA[
			import mx.collections.ArrayCollection;
			include "SimpleHierarchicalData.as";
		]]&gt;</SPAN>
	<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:Script<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
	<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGrid</SPAN> <SPAN style="COLOR: #000066">width</SPAN>=<SPAN style="COLOR: #ff0000">"100%"</SPAN> <SPAN style="COLOR: #000066">height</SPAN>=<SPAN style="COLOR: #ff0000">"100%"</SPAN>
		<SPAN style="COLOR: #000066">defaultLeafIcon</SPAN>=<SPAN style="COLOR: #ff0000">"{null}"</SPAN>
		<SPAN style="COLOR: #000066">folderOpenIcon</SPAN>=<SPAN style="COLOR: #ff0000">"@Embed(source='assets/folderOpenIcon.jpg')"</SPAN>
		<SPAN style="COLOR: #000066">folderClosedIcon</SPAN>=<SPAN style="COLOR: #ff0000">"@Embed(source='assets/folderClosedIcon.jpg')"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN>
		<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:dataProvider<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
			<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:HierarchicalData</SPAN> <SPAN style="COLOR: #000066">source</SPAN>=<SPAN style="COLOR: #ff0000">"{myHCollAC}"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">/&gt;</SPAN></SPAN>
		<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:dataProvider<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
		<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:columns<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
			<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGridColumn</SPAN> <SPAN style="COLOR: #000066">dataField</SPAN>=<SPAN style="COLOR: #ff0000">"Region"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">/&gt;</SPAN></SPAN>
			<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGridColumn</SPAN> <SPAN style="COLOR: #000066">dataField</SPAN>=<SPAN style="COLOR: #ff0000">"Territory_Rep"</SPAN>
			<SPAN style="COLOR: #000066">headerText</SPAN>=<SPAN style="COLOR: #ff0000">"Territory Rep"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">/&gt;</SPAN></SPAN>
			<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGridColumn</SPAN> <SPAN style="COLOR: #000066">dataField</SPAN>=<SPAN style="COLOR: #ff0000">"Actual"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">/&gt;</SPAN></SPAN>
			<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGridColumn</SPAN> <SPAN style="COLOR: #000066">dataField</SPAN>=<SPAN style="COLOR: #ff0000">"Estimate"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">/&gt;</SPAN></SPAN>
		<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:columns<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
	<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:AdvancedDataGrid<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:Application<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN></PRE>
<P class=zh_p>您也可以使用setStyle()方法和&lt;mx:Style&gt;标签指定样式。如下所示：</P><PRE class=java>&lt;mx:Style&gt;
  AdvancedDataGrid <SPAN style="COLOR: #66cc66">{</SPAN>
    defaultLeafIcon:ClassReference<SPAN style="COLOR: #66cc66">(</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: #000000">null</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;
    folderOpenIcon:Embed<SPAN style="COLOR: #66cc66">(</SPAN>source=<SPAN style="COLOR: #ff0000">'assets/folderOpenIcon.jpg'</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;
    folderClosedIcon:Embed<SPAN style="COLOR: #66cc66">(</SPAN>source=<SPAN style="COLOR: #ff0000">'assets/folderClosedIcon.jpg'</SPAN><SPAN style="COLOR: #66cc66">)</SPAN>;
  <SPAN style="COLOR: #66cc66">}</SPAN>
&lt;/mx:Style&gt;</PRE>
<P class=zh_p><STRONG>为导航树创建单独的列</STRONG></P>
<P class=zh_p>在“分层和分组数据显示”章节的示例中，第一列同时显示数据的Region字段值。因此，当年展开导航树节点时，每个树节点标签与对应数据行中的Region字段值一致。对于树的叶子节点，数据源没有包含Region字段值。所有叶子节点标签为空。</P>
<P class=zh_p>您可以将导航树独自放置在单独的列中，该列不和任意数据字段对应。如下所示：</P>
<P class=zh_p><IMG alt="" src="http://hereson.javaeye.com/images/flex/moxie/SimpleHierarchicalADGTreeColumn.jpg" _counted="undefined"></P>
<P class=zh_p>该示例没有任何数据字段与将包含数列对应，所有树图标显示为无标签。该示例同时设置folderClosedIcon、folderOpenIcon、和defaultLeafIcon属性为null，但是disclosure图标被显示以使得用户可以打开或关闭树节点。</P>
<P class=zh_p>以下代码实现该示例：</P><PRE class=xml><SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;?xml</SPAN> <SPAN style="COLOR: #000066">version</SPAN>=<SPAN style="COLOR: #ff0000">"1.0"</SPAN> <SPAN style="COLOR: #000066">encoding</SPAN>=<SPAN style="COLOR: #ff0000">"utf-8"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">?&gt;</SPAN></SPAN>
<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:Application</SPAN> <SPAN style="COLOR: #000066">xmlns:mx</SPAN>=<SPAN style="COLOR: #ff0000">"http://www.adobe.com/2006/mxml"</SPAN> <SPAN style="COLOR: #000066">layout</SPAN>=<SPAN style="COLOR: #ff0000">"vertical"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN>
	<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:Script<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
		<SPAN style="COLOR: #339933">&lt;![CDATA[
			import mx.collections.ArrayCollection;
			include "SimpleHierarchicalData.as";
		]]&gt;</SPAN>
	<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;/mx:Script<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
	<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:AdvancedDataGrid</SPAN> <SPAN style="COLOR: #000066">width</SPAN>=<SPAN style="COLOR: #ff0000">"100%"</SPAN> <SPAN style="COLOR: #000066">height</SPAN>=<SPAN style="COLOR: #ff0000">"100%"</SPAN>
		<SPAN style="COLOR: #000066">folderClosedIcon</SPAN>=<SPAN style="COLOR: #ff0000">"{null}"</SPAN>
		<SPAN style="COLOR: #000066">folderOpenIcon</SPAN>=<SPAN style="COLOR: #ff0000">"{null}"</SPAN>
		<SPAN style="COLOR: #000066">defaultLeafIcon</SPAN>=<SPAN style="COLOR: #ff0000">"{null}"</SPAN><SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN>
		<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:dataProvider<SPAN style="FONT-WEIGHT: bold; COLOR: black">&gt;</SPAN></SPAN></SPAN>
			<SPAN style="COLOR: #009900"><SPAN style="FONT-WEIGHT: bold; COLOR: black">&lt;mx:HierarchicalData</SPAN> span<SPAN blog_bottom?>
</SPAN></SPAN></PRE></A>]]></description>
</item><item>
<title><![CDATA[针对微`软说的10月20号盗版WIN XP黑屏解决方法~!!!! 急!!!!!(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=40721</link>
<author>kkk888929</author>
<pubDate>2008/10/20 8:38:43</pubDate>
<description><![CDATA[<A>　
<DIV class=t_msgfont id=postmessage_578297><FONT color=red>1.微软推出的补丁不要打.这是自然的.</FONT><BR><FONT color=#ff0000></FONT><BR><FONT color=red></FONT><BR><FONT color=red>2如果你不幸安装了新版防盗版补丁可以通过以下方法将其“取消”——</FONT><BR><FONT color=red>开始-运行-输入REGEDIT回车，在左边栏中找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\NotifyWgaLogon项将整个WgaLogon项删除即可。然后，记得重启电脑哦。</FONT><BR><FONT color=red>以上为经过测试的最简便方法。</FONT><BR><FONT color=#ff0000></FONT><BR><FONT color=#ff0000></FONT><BR><BR><FONT color=red>这次的WGA与上次相比只增加了LegitCheckControl.dll，主要执行方式（通过WINLOGON加载）未变。显然微软此举可归为常规性不定期“恐吓"</FONT></DIV></A>]]></description>
</item><item>
<title><![CDATA[我和僵尸有个约会》1.2.3演员表最新更新(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=40489</link>
<author>kkk888929</author>
<pubDate>2008/10/6 20:31:29</pubDate>
<description><![CDATA[<A>　 
<P><FONT size=3>《我和僵尸有个约会》1.2.3演员表最新更新：</A><A name=37683850></A><A> </FONT></P>
<P><FONT size=3></A><A name=37683850></A><A>“曾经有人做过统计，现代社会每天就有78.3个传说消失，有说因现代父母越来越忙，没时间跟小朋友说故事，亦有说因现代人已不再相信“传说”，更加不相信传说中的英雄曾经存在过。但不理世人相不相信，无论传说消失的速度有多快，有关马小玲、况天佑等人的传说，依然会永远流传… </FONT></P>
<DIV></A><A href="http://hiphotos.baidu.com/cococat/abpic/item/9c1af803c131f788d53f7c3f.jpg" target=_blank><FONT size=3><IMG class=blogimg src="http://hiphotos.baidu.com/cococat/abpic/item/9c1af803c131f788d53f7c3f.jpg" border=0></FONT></A><A></DIV>
<P><FONT size=3>况天佑.况中棠.况国华.箭头 —— 尹天照 饰 </A><A href="http://hi.baidu.com/cococat/album/item/77d3309be01a42b5c8eaf46d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/77d3309be01a42b5c8eaf46d.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>马小玲.马丹娜.马灵儿 —— 万绮雯 饰 </A><A href="http://hi.baidu.com/cococat/album/item/e546c91126955e10b8127b61.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/e546c91126955e10b8127b61.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>王珍珍.山本雪 —— 杨恭如 饰&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/f2d35d824f93c9a20df4d268.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/f2d35d824f93c9a20df4d268.jpg" border=0></A><A></FONT></P>
<P><FONT size=3></FONT><FONT size=3>山本未来.金未来.完颜无泪 —— 张文慈 饰</A><A href="http://hi.baidu.com/cococat/album/item/463fb83e8d172afa838b136d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/463fb83e8d172afa838b136d.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>山本一夫（龙一）.司徒奋仁.万颜不破(袁不破)—— 陈启泰 饰</A><A href="http://hi.baidu.com/cococat/album/item/e3d9b5350ed89b8ba71e126d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/e3d9b5350ed89b8ba71e126d.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>堂本真悟.堂本静.MR.X —— 吴廷烨 饰&nbsp;&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/10ad24a48f0110f79152ee6e.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/10ad24a48f0110f79152ee6e.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>金正中 —— 杜汶泽 饰 </A><A href="http://hi.baidu.com/cococat/album/item/bf199d25942c456035a80f60.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/bf199d25942c456035a80f60.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>况复生 —— 张国权 饰 </A><A href="http://hi.baidu.com/cococat/album/item/8ef477f0ff1f43afa50f5260.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/8ef477f0ff1f43afa50f5260.jpg" border=0></A><A></FONT><FONT size=3></FONT></P>
<P><FONT size=3>白蛇，白素素——麦景婷 饰</FONT></P>
<DIV forimg="1"></A><A href="http://hi.baidu.com/cococat/album/item/150a2a732b3eab198601b0b3.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/150a2a732b3eab198601b0b3.jpg" border=0></A><A></DIV>
<DIV forimg="1">青蛇.阮梦梦——黄美芬 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/55b2b719a108ee4542a9add0.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/55b2b719a108ee4542a9add0.jpg" border=0></A><A></DIV>
<P><FONT size=3>尼 诺 —— 梁荣忠 饰&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/038730a875c594b1ca130c65.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/038730a875c594b1ca130c65.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>黑 雨 —— 江美仪 饰 </A><A href="http://hi.baidu.com/cococat/album/item/fb25791eb30117f41ad57665.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/fb25791eb30117f41ad57665.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>奇 洛.徐福.地藏王.马小虎 —— 陈宝辕 饰&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/58ef2c387955b225b9998f2a.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/58ef2c387955b225b9998f2a.jpg" border=0></A><A> </FONT></P>
<P><FONT size=3></FONT><FONT size=3>李维斯&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 乌鸦—— 叶良材 饰 </A><A href="http://hi.baidu.com/cococat/album/item/ff0b0cfa574cf49758ee903d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/ff0b0cfa574cf49758ee903d.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>游志杰 —— 林志豪 饰&nbsp;&nbsp;<IMG src="http://t0.baidu.com/it/u=778561554,3585765057&amp;gp=2.jpg">&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>藤原贞子 —— 伯佐日菜子 饰 </A><A href="http://hi.baidu.com/cococat/album/item/fea3a934a5a6abb7d1a2d368.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/fea3a934a5a6abb7d1a2d368.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>将 臣 姜真祖—— 任达华 饰&nbsp;&nbsp;&nbsp;&nbsp;</FONT><FONT size=3>女 娲 —— 黄卓玲 饰 </FONT></P>
<P><FONT size=3>&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/3adf08d7f2da39dda044df85.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/3adf08d7f2da39dda044df85.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/f734f91f03158e0a314e156c.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/f734f91f03158e0a314e156c.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>马叮当 —— 张慧仪 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/e3d658601eb647df8cb10d61.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/e3d658601eb647df8cb10d61.jpg" border=0></A><A> </FONT></P>
<P><FONT size=3>红潮.阿秀.玲玲 —— 黄琼瑶 饰&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/8eeeb7de5b0f5658cdbf1a11.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/8eeeb7de5b0f5658cdbf1a11.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>流星—— 金沛辰 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/55a1f61f6d147263f724e461.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/55a1f61f6d147263f724e461.jpg" border=0></A><A href="http://nease.net/category_list/category1_index0.html" target=_top><IMG src="http://nease.net/category_list/images/1/remuscn.nease.net.gif" align=top border=0></A><A></FONT></P>
<P><FONT size=3>诗 雅 —— 韩君婷 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 莱 利 —— 谢君豪 饰 </A><A href="http://hi.baidu.com/cococat/album/item/2c17860224b2bd0f4afb5160.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/2c17860224b2bd0f4afb5160.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>林国栋 ——杨嘉诺 饰&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/ccf4b47e34c1753a0dd7da4f.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/ccf4b47e34c1753a0dd7da4f.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT><FONT size=3>白心媚 —— 王 薇 饰&nbsp;&nbsp;</A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%CD%F5%DE%B1&amp;sf=&amp;sel=5" target=_blank><IMG class=hand style="MARGIN-TOP: -5px" src="http://tn6.cn3.yahoo.com/image/1b90/fbdc8351310cc98a5e.jpeg" border=0></A><A></FONT></P>
<P><FONT size=3>PETER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 罗米欧 —— 宗 扬 饰&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/8bcd2c340205c63d5ab5f5e8.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/8bcd2c340205c63d5ab5f5e8.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 御命十三（罗侯）——炜烈 饰</A><A href="http://hi.baidu.com/cococat/album/item/013889b17f1cdb570923029e.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/013889b17f1cdb570923029e.jpg" border=0></A><A></FONT></P>
<P></P>
<P><FONT size=3>MIMI —— 陈蕙明 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大 咪 —— 姚安娜 饰&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/882d7fcbdb66eb1fbf09e66c.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/882d7fcbdb66eb1fbf09e66c.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>何应求 —— 黄树棠 饰&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/c1b60bb37a055ba7d8335a6c.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/c1b60bb37a055ba7d8335a6c.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>阮 母 —— 梁 珊 饰 　<IMG src="http://t2.baidu.com/it/u=2190799872,1563579279&amp;gp=26.jpg"></FONT></P>
<P><FONT size=3>　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如来佛主.倒霉鬼.DUM —— 刘锡贤 饰 </A><A href="http://hi.baidu.com/cococat/album/item/242c0e46203fa7096a63e56c.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/242c0e46203fa7096a63e56c.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>高保.朱永福 —— 姜浩文 饰</A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%BD%AA%BA%C6%CE%C4&amp;sf=&amp;sel=4" target=_blank><IMG class=hand style="MARGIN-TOP: -5px" src="http://tn2.cn3.yahoo.com/image/1f34/2ff9a284b03e853244.jpeg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>福 妈&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 平妈—— 陈丽云 饰&nbsp;&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/9c29c7fd9f3c8247d7887d4c.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/9c29c7fd9f3c8247d7887d4c.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>黄子 SUUNY —— 李润祺 饰&nbsp;&nbsp;</A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%C0%EE%C8%F3%EC%F7&amp;sf=&amp;sel=14" target=_blank><IMG class=hand style="MARGIN-TOP: 5px" src="http://tn5.cn3.yahoo.com/image/1cdf/c3e6fad127c7657fd7.jpeg" border=0></A><A></FONT></P>
<P><FONT size=3>张世昌 —— 张裕里 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>蓝大力 。法海—— 马宗德 饰&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/242c0e462002a7096a63e561.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/242c0e462002a7096a63e561.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>明日.嫦娥 —— 通口明日嘉 饰&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/cdbfd50975531b82d0581b11.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/cdbfd50975531b82d0581b11.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>岳银瓶——秦岚 饰</A><A href="http://hi.baidu.com/cococat/album/item/71948fd412f69f04a08bb7b3.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/71948fd412f69f04a08bb7b3.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>珍 妮 —— 李 菲 饰 <IMG src="http://t3.baidu.com/it/u=831404992,2136065322&amp;gp=1.jpg"></FONT></P>
<P><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 司 仪 —— 蔡国威 饰&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://t0.baidu.com/it/u=3885914010,1105176436&amp;gp=3.jpg">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 司 仪 —— 何佩仪 饰 </FONT></P>
<P><FONT size=3>马大龙——刘以达 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 汤金宝——王秀琳 饰</FONT></P>
<P><FONT size=3></A><A href="http://hi.baidu.com/cococat/album/item/adf8ba09bf7eef246a60fb61.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/adf8ba09bf7eef246a60fb61.jpg" border=0></A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%CD%F5%D0%E3%C1%D5&amp;b=2&amp;sf=&amp;sel=9&amp;pid=ysearch" target=_blank><IMG class=hand style="MARGIN-TOP: -5px" src="http://tn3.cn3.yahoo.com/image/1de7/66ef3bdb35da535b01.jpeg" border=0></A><A></FONT></P>
<P><FONT size=3>&nbsp;&nbsp;</FONT><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 人 王——郑浩南 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 妙善上师.观音.瑶池圣母——陈 炜.</FONT></P>
<P><FONT size=3></A><A href="http://hi.baidu.com/cococat/album/item/8bcd2c34d6ba1a3b5ab5f56d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/8bcd2c34d6ba1a3b5ab5f56d.jpg" border=0></A><A href="http://hi.baidu.com/cococat/album/item/50c346a7ae12d195d043586c.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/50c346a7ae12d195d043586c.jpg" border=0></A><A href="http://hi.baidu.com/cococat/album/item/c8ccd00745deffcd7a89476f.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/c8ccd00745deffcd7a89476f.jpg" border=0></A><A></FONT></P>
<P><FONT size=3>何有求(命运)—陈展鹏 饰 </A><A href="http://hi.baidu.com/cococat/album/item/3fbe212df35bfa34359bf73d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/3fbe212df35bfa34359bf73d.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P><FONT size=3>况天涯——郭家颐 饰</A><A href="http://hi.baidu.com/cococat/album/item/fb25791eaf72f3f41ad57635.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/fb25791eaf72f3f41ad57635.jpg" border=0></A><A></FONT></P>
<P><FONT size=3></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN>MARS</SPAN>—黄子雄 </A><A href="http://hi.baidu.com/cococat/album/item/64209b3d1a515600bba16711.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/64209b3d1a515600bba16711.jpg" border=0></A><A><SPAN><SPAN> <FONT face=Arial>饰&nbsp;&nbsp;&nbsp;</FONT></SPAN></SPAN></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN><SPAN><FONT face=Arial></FONT></SPAN>KARY</SPAN>—卓贤敏<SPAN><SPAN> <FONT face=Arial>饰&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/77d3309b490ee9b5c8eaf479.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/77d3309b490ee9b5c8eaf479.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sky—— 周子濠</A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%D6%DC%D7%D3%E5%A9&amp;sf=&amp;sel=7" target=_blank><IMG class=hand style="MARGIN-TOP: -5px" src="http://tn1.cn3.yahoo.com/image/c85/116428703f82330ffc.jpeg" border=0></A><A> </A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%D6%DC%D7%D3%E5%A9&amp;sf=&amp;sel=4" target=_blank><IMG class=hand style="MARGIN-TOP: -3px" src="http://tn5.cn3.yahoo.com/image/44e/be22704766cc1675c8.jpeg" border=0></A><A>&nbsp;&nbsp;&nbsp;</FONT></SPAN></SPAN></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN><SPAN><FONT face=Arial>麦家琪 饰 毛 忧&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</A><A href="http://ent.sina.com.cn/v/f/whjsygyh3/" target=_top><IMG src="http://image2.sina.com.cn/ent/v/f/whjsygyh3/U102P28T17D2469F1356DT20050111102359.jpg" align=top border=0></A><A> </FONT></SPAN></SPAN></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN><SPAN></SPAN></SPAN>小<SPAN>R </SPAN>—陈乐文<SPAN><SPAN> <FONT face=Arial>饰<IMG src="http://t1.baidu.com/it/u=3355658664,3344579732&amp;gp=0.jpg">&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/c0dafcdc328d3da1cc116611.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/c0dafcdc328d3da1cc116611.jpg" border=0></A><A href="http://ent.sina.com.cn/v/f/whjsygyh3/" target=_top></A><A></FONT></SPAN></SPAN></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3>大<SPAN>R </SPAN>—甄思羽 <FONT face=Arial>饰</A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%D5%E7%CB%BC%D3%F0&amp;sf=&amp;sel=5" target=_blank><IMG class=hand style="MARGIN-TOP: 15px" src="http://tn6.cn3.yahoo.com/image/5d/f602e8f35a48a87d75.jpeg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></FONT></FONT><FONT face=宋体><FONT size=3>乌龙—伍伟乐<SPAN><SPAN> <FONT face=Arial>饰</A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%CE%E9%CE%B0%C0%D6&amp;sf=&amp;sel=5" target=_blank><IMG class=hand style="MARGIN-TOP: 5px" src="http://tn4.cn3.yahoo.com/image/1dd6/88eeb753bd7556321b.jpeg" border=0></A><A></FONT> </SPAN><SPAN></SPAN></SPAN></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN><SPAN></SPAN></SPAN>老徐—曾玮明<FONT face=Arial>饰</A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%D4%F8%E7%E2%C3%F7&amp;sf=&amp;sel=6" target=_blank><IMG class=hand style="MARGIN-TOP: 15px" src="http://tn6.cn3.yahoo.com/image/163/fc0b19d7cbbf0bede5.jpeg" border=0></A><A></FONT></FONT></FONT><FONT face=宋体><FONT size=3>雷王 －郑恕峰 饰&nbsp;&nbsp;<FONT face=Arial> </A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%D6%A3%CB%A1%B7%E5&amp;sf=&amp;sel=1" target=_blank><IMG class=hand style="MARGIN-TOP: 15px" src="http://tn6.cn3.yahoo.com/image/11ef/f38f7cad85e6d19ebd.jpeg" border=0></A><A></FONT></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3>刘 海 ——<FONT face=Arial>曾守明　饰</FONT> <FONT face=Arial></A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%D6%A3%CB%A1%B7%E5&amp;sf=&amp;sel=1" target=_blank></A><A></FONT><SPAN><SPAN>&nbsp;&nbsp;<IMG src="http://t3.baidu.com/it/u=504317631,3951059759&amp;gp=0.jpg"></SPAN></SPAN></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN><SPAN></SPAN></SPAN>木村—阮民俊&nbsp;&nbsp;<FONT face=Arial>饰 </A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%C8%EE%C3%F1%BF%A1&amp;sf=&amp;sel=0" target=_blank><IMG class=hand style="MARGIN-TOP: 5px" src="http://tn4.cn3.yahoo.com/image/6e6/a9373385bb6f769c8e.jpeg" border=0></A><A></FONT><SPAN><SPAN>&nbsp;&nbsp;</SPAN></SPAN></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN><SPAN>何伯（复生的爸爸） </SPAN></SPAN></FONT></FONT><FONT face=宋体><FONT size=3>陈<SPAN>SIR</SPAN>—关伟伦<SPAN><SPAN>&nbsp;&nbsp;<FONT face=Arial>饰<IMG src="http://t2.baidu.com/it/u=2299510852,4182614795&amp;gp=32.jpg"></FONT></SPAN></SPAN></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN><SPAN></SPAN></SPAN></FONT></FONT><FONT face=宋体><FONT size=3>九哥—楼南光<SPAN><SPAN> </A><A href="http://image.cn.yahoo.com/searchdtl_v3.html?p=%C2%A5%C4%CF%B9%E2&amp;sf=&amp;sel=1" target=_blank><IMG class=hand style="MARGIN-TOP: -5px" src="http://tn5.cn3.yahoo.com/image/844/cb422051717a62970e.jpeg" border=0></A><A> </SPAN>ANITA</SPAN>—梁爱<IMG src="http://t1.baidu.com/it/u=2356841536,2618521962&amp;gp=12.jpg"></FONT></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT face=宋体><FONT size=3><SPAN><SPAN></SPAN>JOHN</SPAN>—秦启维<SPAN><SPAN>&nbsp;&nbsp;<IMG src="http://t3.baidu.com/it/u=399050971,1279545543&amp;gp=4.jpg"> </SPAN></SPAN></FONT></FONT><FONT size=3>程东 饰－冯 搏&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 平哥 </A><A href="http://hi.baidu.com/cococat/album/item/896fd03fe0a9b4c07c1e7142.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/896fd03fe0a9b4c07c1e7142.jpg" border=0></A><A></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT size=3>刘国诚 饰－金守正&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/9c29c7fdc11da441d7887d6d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/9c29c7fdc11da441d7887d6d.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT size=3>李勇&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 饰－Herman </A><A href="http://hi.baidu.com/cococat/album/item/8ee7bea1fb5b448f46106451.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/8ee7bea1fb5b448f46106451.jpg" border=0></A><A>&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT size=3>吕有慧&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 饰－欧阳嘉嘉&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT size=3></A><A href="http://hi.baidu.com/cococat/album/item/d8e6a58bc6fd5c7b9f2fb473.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/d8e6a58bc6fd5c7b9f2fb473.jpg" border=0></A><A href="http://hi.baidu.com/cococat/album/item/9c1af803f678c68ad53f7c42.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/9c1af803f678c68ad53f7c42.jpg" border=0></A><A>吴浣仪&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 饰－金姐 </FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT size=3>梁碧芝&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 饰－碧加&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/9c29c7fd9f3e8247d7887d42.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/9c29c7fd9f3e8247d7887d42.jpg" border=0></A><A></FONT></P>
<P style="TEXT-JUSTIFY: inter-ideograph; TEXT-ALIGN: justify"><FONT size=3>龙伯 ——白</A><A title=点击显示注释 href="http://xh.5156edu.com/show.php?id=12136"><FONT color=#000000 size=4>標</FONT></A><A>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 饰&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</A><A href="http://hi.baidu.com/cococat/album/item/ccf4b47ef6f1b7380dd7da3d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/ccf4b47ef6f1b7380dd7da3d.jpg" border=0></A><A> </FONT></P>
<P><FONT size=3>Mary（朱玛莉）－黄美棋 饰<IMG class=hand style="MARGIN-TOP: 8px" src="http://tn4.cn3.yahoo.com/image/59/9b02c97e819e495c07.jpeg" border=0></FONT></P>
<DIV forimg="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 孔雀.老鬼 —— 洗灏锳 饰 </A><A href="http://hi.baidu.com/cococat/album/item/85534eedb19993d1b21cb1b3.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/85534eedb19993d1b21cb1b3.jpg" border=0></A><A></DIV>
<DIV forimg="1">在劫——袁文杰 饰</A><A href="http://hi.baidu.com/cococat/album/item/3484f224b45f1c318644f94d.html" target=_blank><IMG src="http://hiphotos.baidu.com/cococat/abpic/item/3484f224b45f1c318644f94d.jpg" border=0></A><A></DIV></A>]]></description>
</item><item>
<title><![CDATA[Javascript - FSO   (转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=39817</link>
<author>kkk888929</author>
<pubDate>2008/9/10 17:32:27</pubDate>
<description><![CDATA[<A>　
<DIV class=blog_content><FONT size=+0>FSO</FONT>属性大全 <BR><BR>什么是<FONT size=+0>FSO</FONT>？ <BR><FONT size=+0>FSO</FONT> 即 File System Object 文件系统对象，是一种列表 Windows 磁盘目录和文件，对目录和文件进行删除、新建、复制、剪切、移动等操作的技术。使用 <FONT size=+0>FSO</FONT> 网站的好处：直接读取目录下的文件和子目录，方便维护，如需要添加任何内容，将文件放在相应的目录下即可；<FONT size=+0>FSO</FONT> 网站类似 Windows 操作界面，易于使用，会使用 Windows 就会使用 <FONT size=+0>FSO</FONT> 网站。 <BR>试想一下，很方便的就可以将您硬盘中的文件和文件夹制作成网站，并且日后只要把内容添加到目录下就可以更新，这样是不是很方便呢？这样，没有经验的新手也可以建设自己的网站了。 <BR>参考网站：http://dwdesign.vicp.net <BR>或者http://dwdesign.dns0755.net <BR><BR><FONT size=+0>FSO</FONT>属性，目录和文件同 <BR><BR>AtEndOfLine 属性 <BR>如果文件指针恰好定位在 TextStream 文件中行尾标记的前面，则返回 True；如果没有，则返回 False。 <BR>AtEndOfStream 属性 <BR>如果文件指针位于 TextStream 文件的末尾，则返回 True；如果不是，则返回 False。 <BR>Attributes 属性 <BR>设置或返回文件或文件夹的属性。 <BR>AvailableSpace 属性 <BR>返回指定的驱动器或网络共享上，可供用户使用的空间大小。 <BR>Column 属性 <BR>返回 TextStream 文件中当前字符位置的列号。 <BR>CompareMode 属性 <BR>设置并返回比较模式，用于比较 Dictionary 对象中的字符串关键字。 <BR>Count 属性 <BR>返回集合或 Dictionary 对象中的项目数。 <BR>DateCreated 属性 <BR>返回指定的文件或文件夹的创建日期和时间。只读。 <BR>DateLastAccessed 属性 <BR>返回指定的文件或文件夹上一次被访问的日期和时间。 <BR>DateLastModified 属性 <BR>返回指定的文件或文件夹上一次被修改的日期和时间。 <BR>Drive 属性 <BR>返回指定的文件或文件夹所在驱动器的盘符。 <BR>DriveLetter 属性 <BR>返回本地物理驱动器或网络共享的盘符。 <BR>Drives 属性 <BR>返回一个 Drives 集合，该集合包含本地计算机上所有可用的 Drive 对象。 <BR>DriveType 属性 <BR>返回一个值，表明指定的驱动器的类型。 <BR>Files 属性 <BR>返回一个 Files 集合，该集合包含指定的文件夹中包含的全部 File 对象，包括那些设为隐藏和系统文件属性的对象。 <BR>FileSystem 属性 <BR>返回指定的驱动器所用的文件系统的类型。 <BR>FreeSpace 属性 <BR>返回指定的驱动器或网络共享上，可供用户使用的空间大小。 <BR>IsReady 属性 <BR>如果指定的驱动器准备就绪，则返回 True；如果没有，则返回 False。 <BR>IsRootFolder 属性 <BR>如果指定的文件夹是根文件夹，则返回 True；如果不是，则返回 False。 <BR>Item 属性 <BR>对于 Dictionary 对象中指定的关键字，设置或返回与之相对应的项目。对于集合，则根据指定的关键字返回一个项目。 <BR>Key 属性 <BR>设置 Dictionary 对象中的关键字。 <BR>Line 属性 <BR>返回 TextStream 文件中的当前行号。 <BR>Name 属性 <BR>设置或返回指定的文件或文件夹的名称。 <BR>ParentFolder 属性 <BR>返回指定文件或文件夹的上一级的文件夹对象。 <BR>Path 属性 <BR>返回指定文件、文件夹或驱动器的路径。 <BR>RootFolder 属性 <BR>返回一个 Folder 对象，代表指定驱动器的根文件夹。 <BR>SerialNumber 属性 <BR>返回十进制序列号，用于唯一地标识磁盘卷。 <BR>ShareName 属性 <BR>返回指定驱动器的网络共享名。 <BR>ShortName 属性 <BR>返回要求早期 8.3 命名规范的程序使用的短名称。 <BR>ShortPath 属性 <BR>返回要求早期 8.3 命名规范的程序使用的短路径。 <BR>Size 属性 <BR>对于文件，返回指定的文件的大小，以字节为单位。对于文件夹，返回文件夹所包含的所有文件和子文件夹的大小，以字节为单位。 <BR>SubFolders 属性 <BR>返回一个 Folders 集合，包含指定文件夹中的所有文件夹，包括那些设为隐藏和系统文件属性的文件夹。 <BR>TotalSize 属性 <BR>返回驱动器或网络共享的总空间，以字节为单位。 <BR>Type 属性 <BR>返回有关文件或文件夹类型的信息。 <BR>VolumeName 属性 <BR>设置或返回指定驱动器的卷名。 <BR>方法或者属性 描述 <BR>BuildPath() 生成一个文件路径 <BR>CopyFile() 复制文件 <BR>CopyFolder() 复制目录 <BR>CreateFolder() 创建新目录 <BR>CreateTextFile() 生成一个文件 <BR>DeleteFile() 删除一个文件 <BR>DeleteFolder() 删除一个目录 <BR>DriveExists() 检验盘符是否存在 <BR>Drives 返回盘符的集合 <BR>FileExists() 检验文件是否存在 <BR>FolderExists 检验一个目录是否存在 <BR>GetAbsolutePathName() 取得一个文件的绝对路径 <BR>GetBaseName() 取得文件名 <BR>GetDrive() 取得盘符名 <BR>GetDriveName() 取得盘符名 <BR>GetExtensionName() 取得文件的后缀 <BR>GetFile() 生成文件对象 <BR>GetFileName() 取得文件名 <BR>GetFolder() 取得目录对象 <BR>GetParentFolderName 取得文件或目录的父目录名 <BR>GetSpecialFolder() 取得特殊的目录名 <BR>GetTempName() 生成一个临时文件对象 <BR>MoveFile() 移动文件 <BR>MoveFolder() 移动目录 <BR>OpenTextFile() 打开一个文件流 <BR><BR>实例说明<FONT size=+0>FSO</FONT>用法 <BR>BuildPath(路径,文件名) //这个方法会对给定的路径加上文件，并自动加上分界符 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>var newpath = <FONT size=+0>fso</FONT>.BuildPath("c:\\tmp", "51js.txt"); //生成 c:\tmp\51js.txt的路径 <BR>alert(newpath); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>CopyFile(源文件, 目标文件, 覆盖) //复制源文件到目标文件，当覆盖值为true时，如果目标文件存在会把文件覆盖 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>var newpath = <FONT size=+0>fso</FONT>.CopyFile("c:\\autoexec.bat", "d:\\autoexec.bak"); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>CopyFolder(对象目录,目标目录 ,覆盖) //复制对象目录到目标目录，当覆盖为true时，如果目标目录存在会把文件覆盖 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR><FONT size=+0>fso</FONT>.CopyFolder("c:\\WINDOWS\\Desktop", "d:\\"); //把C盘的Desktop目录复制到D盘的根目录 <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>CreateFolder(目录名) //创建一个新的目录 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>var newFolderName = <FONT size=+0>fso</FONT>.CreateFolder("c:\\51JS"); //在C盘上创建一个51JS的目录 <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>CreateTextFile(文件名, 覆盖) //创建一个新的文件，如果此文件已经存在，你需要把覆盖值定为true <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>var newFileObject = <FONT size=+0>fso</FONT>.CreateTextFile("c:\\autoexec51JS.bat", true); //脚本将在C盘创建一个叫 autoexec51JS.bat的文件 <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>DeleteFile(文件名, 只读？) //删除一个文件，如果文件的属性是只读的话，你需要把只读值设为true <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); //为了安全我先把要删除的autoexec.bat备份到你的D盘 <BR>var newpath = <FONT size=+0>fso</FONT>.CopyFile("c:\\autoexec.bat", "d:\\autoexec.bat"); //把C盘的autoexec.bat文件删除掉 <BR><FONT size=+0>fso</FONT>.DeleteFile("c:\\autoexec.bat", true); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>DeleteFolder(文件名, 只读？)//删除一个目录，如果目录的属性是只读的话，你需要把只读值设为true <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR><FONT size=+0>fso</FONT>.CopyFolder("c:\\WINDOWS\\Desktop", "d:\\"); //为了安全我先把你C盘的Desktop目录复制到你D盘的根目录 <BR><FONT size=+0>fso</FONT>.DeleteFolder("c:\\WINDOWS\\Desktop", true); //把你的Desktop目录删除，但因为desktop是系统的东西，所以不能全部删除，但......... <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>DriveExists(盘符) //检查一个盘是否存在，如果存在就返会真，不存在就返回....... <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>hasDriveD = <FONT size=+0>fso</FONT>.DriveExists("d"); //检查系统是否有D盘存在 <BR>hasDriveZ = <FONT size=+0>fso</FONT>.DriveExists("z"); //检查系统是否有Z盘存在 <BR>if (hasDriveD) alert("你的系统内有一个D盘"); <BR>if (!hasDriveZ) alert("你的系统内没有Z盘"); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>FileExists(文件名) //检查一个文件是否存在，如果存在就返会真，不存在就返回....... <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>fileName = <FONT size=+0>fso</FONT>.FileExists("c:\\autoexec.bat"); <BR>if (fileName) alert("你在C盘中有autoexec.bat文件，按下确定后这个文件将被删除！"); //开个玩笑:) <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>FolderExists(目录名) //检查一个目录是否存在，如果存在就返会真，不存在就返回....... <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>folderName = <FONT size=+0>fso</FONT>.FolderExists("c:\\WINDOWS\\Fonts"); <BR>if (folderName) alert("按下确定后系统的字库将被删除！"); //开个玩笑:) <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>GetAbsolutePathName(文件对象) //返回文件对象在系统的绝对路径 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>pathName = <FONT size=+0>fso</FONT>.GetAbsolutePathName("c:\\autoexec.bat"); <BR>alert(pathName); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>GetBaseName(文件对象) //返回文件对象的文件名 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>baseName = <FONT size=+0>fso</FONT>.GetBaseName("c:\\autoexec.bat"); //取得autoexec.bat的文件名autoexec <BR>alert(baseName); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>GetExtensionName(文件对象) //文件的后缀 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>exName = <FONT size=+0>fso</FONT>.GetExtensionName("c:\\autoexec.bat"); //取得autoexec.bat后缀bat <BR>alert(exName); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>GetParentFolderName(文件对象) //取得父级的目录名 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>parentName = <FONT size=+0>fso</FONT>.GetParentFolderName("c:\\autoexec.bat"); //取得autoexec.bat的父级目录C盘 <BR>alert(parentName); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>GetSpecialFolder(目录代码) //取得系统中一些特别的目录的路径，目录代码有3个分别是 0:安装Window的目录 1:系统文件目录 2:临时文件目录 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>tmpFolder = <FONT size=+0>fso</FONT>.GetSpecialFolder(2); //取得系统临时文件目录的路径 如我的是 C:\windows\temp <BR>alert(tmpFolder); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>GetTempName() //生成一个随机的临时文件对象，会以rad带头后面跟着些随机数，就好象一些软件在安装时会生成*.tmp <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>tmpName = <FONT size=+0>fso</FONT>.GetTempName(); //我在测试时就生成了radDB70E.tmp <BR>alert(tmpName); <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR><BR>MoveFile(源文件, 目标文件) //把源文件移到目标文件的位置 <BR>&lt;SCRIPT LANGUAGE="<FONT size=+0>JavaScript</FONT>"&gt; <BR>&lt;!-- <BR>var <FONT size=+0>fso</FONT> = new ActiveXObject("Scripting.FileSystemObject"); <BR>var newpath = <FONT size=+0>fso</FONT>.MoveFile("c:\\autoexec.bat", "d:\\autoexec.bat"); //把C盘的autoexec.bat文件移移动到D盘 <BR>--&gt; <BR>&lt;/SCRIPT&gt; </DIV></A>]]></description>
</item><item>
<title><![CDATA[反射与访问控制(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=38282</link>
<author>kkk888929</author>
<pubDate>2008/7/31 18:30:29</pubDate>
<description><![CDATA[<A>　久闻反射可以破坏私有属性、私有方法的访问控制，一直也没有找到方法 <BR>突然看到原来有一个class AccessibleObject 中 的setAccessible 可以设置访问权限 <BR>Field、Method 两个类均继承这个类，因此Field 、Method 都可以设置访问权限 <BR>下面是个小例子： <BR><BR>public class FieldValueGet { <BR>/** <BR>&nbsp;&nbsp;* @param args <BR>&nbsp;&nbsp;* @throws IllegalAccessException <BR>&nbsp;&nbsp;* @throws IllegalArgumentException <BR>&nbsp;&nbsp;* @throws NoSuchMethodException <BR>&nbsp;&nbsp;* @throws SecurityException <BR>&nbsp;&nbsp;* @throws InvocationTargetException <BR>&nbsp;&nbsp;*/ <BR>public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchMethodException, InvocationTargetException { <BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;FieldValue fv=new FieldValue("unid","name"); <BR>&nbsp;&nbsp;Field[]fields=fv.getClass().getDeclaredFields(); <BR>&nbsp;&nbsp;/** <BR>&nbsp;&nbsp; * 通过get方法正常获取 属性的值 <BR>&nbsp;&nbsp; */ <BR>&nbsp;&nbsp;for(int i=0;i&lt;fields.length;i++){ <BR>&nbsp;&nbsp; System.out.print(fields[i].getName()+":"); <BR>&nbsp;&nbsp; String methodName="get"+fields[i].getName().toUpperCase().substring(0, 1) <BR>&nbsp;&nbsp; +fields[i].getName().toLowerCase().substring(1); <BR>&nbsp;&nbsp; Method method=fv.getClass().getMethod(methodName, new Class[]{}); <BR>&nbsp;&nbsp; System.out.println(method.invoke(fv, new Object[]{}));&nbsp;&nbsp; <BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;/** <BR>&nbsp;&nbsp; * 利用反射来破坏 java private属性 <BR>&nbsp;&nbsp; */ <BR>&nbsp;&nbsp;Field.setAccessible(fields, true);//设置所有的 属性都是可访问的 <BR>&nbsp;&nbsp;for (int i = 0; i &lt; fields.length; i++) { <BR>&nbsp;&nbsp; fields[i].setAccessible(true); <BR>&nbsp;&nbsp; System.out.println(fields[i].getName()+":"+fields[i].get(fv)); <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;/** <BR>&nbsp;&nbsp; * 破坏方法的private 属性 <BR>&nbsp;&nbsp; */ <BR>&nbsp;&nbsp;Method[] methods=fv.getClass().getDeclaredMethods(); <BR>&nbsp;&nbsp;Method.setAccessible(methods, true); <BR>&nbsp;&nbsp;System.out.println(methods.length); <BR>&nbsp;&nbsp;for (int i = 0; i &lt; methods.length; i++) { <BR>&nbsp;&nbsp; methods[i].invoke(fv, new Object[]{}); <BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp; <BR>} <BR>} <BR>class FieldValue{ <BR>private String unid; <BR>private String name; <BR>public String getUnid() { <BR>&nbsp;&nbsp;return unid; <BR>} <BR>public String getName(){ <BR>&nbsp;&nbsp;return name; <BR>} <BR>public FieldValue(String unid,String name){ <BR>&nbsp;&nbsp;this.unid=unid; <BR>&nbsp;&nbsp;this.name=name; <BR>} <BR><BR>private void getNameAndUnid(){ <BR>&nbsp;&nbsp;System.out.println("我是私有方法！！"); <BR>} <BR>} <BR></A>]]></description>
</item><item>
<title><![CDATA[Eclipse快捷键(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=38118</link>
<author>kkk888929</author>
<pubDate>2008/7/26 21:48:37</pubDate>
<description><![CDATA[<P><A>　<FONT size=2>Eclipse提供了丰富的快捷键，使用这些快捷键可以极大地提高操作效率。掌握部分常用的快捷键，是掌握Eclipse的一个必然要求。本文并不是Eclipe全部快捷键的列表，而只列举一些本人用过且认为需要使用的Eclipse快捷键。(2006.10.24最后更新)<BR><BR>在<FONT color=#006400>主菜单Window--&gt;Preferences--&gt;General--&gt;Keys</FONT>中，可以看到Eclipse的所有快捷键。<BR></FONT><FONT size=2><FONT color=#000000>Alt+/ -- Content Assist -- 内容提示（即所谓的智能感知）<BR>Alt+Down(Up) -- Move Lines Down(Up) -- 向下(上)移动选定的行（可为多行）<BR></FONT><FONT color=#000000>Alt+Shift+N -- New Menu -- 显示“主菜单File--&gt;New”菜单，即显示常用的新建项。</FONT> <FONT color=#000000>又见“New”。</FONT> <BR></FONT><FONT size=2><FONT color=#000000>Alt+Shift+J -- Add Javadoc Comment -- 加入Javadoc注释<BR>Alt+Shift+T -- Refactory -- 重构，会显示具体的重构项<BR>Alt+Shift+R -- Rename(Refactoring) -- 重命名，是重构的一项<BR>Alt+Shift+V -- Move(Refactoring) -- 将文件、目录等移动到指定位置<BR>Alt+Shift+X, J -- Run Java Application -- 运行Java应用程序<BR>Alt+Shift+X, Q -- Run Ant Build -- 运行Ant的Build文件<BR>Alt+Shift+X, P -- Run JUnit -- 运行JUnit<BR>Ctrl+/ -- Toggle Comment -- 产生/取消注释<BR>Ctrl+1 -- Quick Fix -- 该行有错误/警告，使用此快捷键后，会给出修改的建议。<BR>Ctrl+D -- Delete Line -- 删除选定的行<BR>Ctrl+Down(Up) -- Scroll Line Down(Up) -- 类似于用鼠标向下(上)拖动滚动条<BR>Ctrl+F6 -- Next Editor -- 在当前被编辑的文件之间进行切换<BR>Ctrl+F7 -- Next View -- 在当前透视图(Perspective)中的视图(View)之间进行切换<BR>Ctrl+F8 -- Next Perspective -- 在</FONT> <FONT color=#000000>透视图(Perspective)之间进行切换</FONT> <BR></FONT><FONT size=2><FONT color=#000000>Ctrl+F11 -- Run Last Launched -- 运行最近一个执行的Java应用程序或JavaBean<BR>Ctrl+H -- Open Search Dialog -- 打开搜索对话框<BR>Ctrl+L -- Go to Line -- 到达指定的行<BR>Ctrl+N -- New -- 新建，即显示“New”向导。又见“New Menu”。<BR>Ctrl+O -- Quick Outline -- 显示该类/接口的概况(Outline)<BR></FONT><FONT color=#000000>Ctrl+S -- Save -- 保存当前文件</FONT> <BR></FONT><FONT size=2><FONT color=#000000>Ctrl+Shift+/ --&nbsp; Add Block Comment -- 加入块注释<BR>Ctrl+Shift+\ --&nbsp; Remove Block Comment -- 取消块注释<BR>Ctrl+Shift+F -- Formate Document -- 格式化文本<BR></FONT><FONT color=#000000>Ctrl+Shift+L -- Show Key Assist -- 列出一些常用的快捷键，<STRONG>可以先学习这里面列出的快捷键</STRONG>。</FONT> <BR></FONT><FONT size=2><FONT color=#000000>Ctrl+Shift+O -- Organize Imports -- 整理导入。导入需要被导入的类型；清除未被使用的类型的导入语句。<BR>Ctrl+Shitf+R -- Open Resource(Searching) -- 搜索所有打开的工程中的所有文件，包括jar中的文件。<BR></FONT><FONT color=#000000>Ctrl+Shitf+S -- Save all -- 保存当前被打开的所有文件</FONT> <BR><FONT color=#000000>Ctrl+Shift+T -- Open Type(Searching) -- 搜索类/接口</FONT> <BR><FONT color=#000000>F3 -- Open Declaration -- 显示到该标识符的声明处</FONT> <BR></FONT></A>////////////////////////////////////////////////////</P>
<DIV class=quote_title>引用</DIV>
<DIV class=quote_div>编辑 <BR>作用域 功能 快捷键 <BR>全局 查找并替换 Ctrl+F <BR>文本编辑器 查找上一个 Ctrl+Shift+K <BR>文本编辑器 查找下一个 Ctrl+K <BR>全局 撤销 Ctrl+Z <BR>全局 复制 Ctrl+C <BR>全局 恢复上一个选择 Alt+Shift+↓ <BR>全局 剪切 Ctrl+X <BR>全局 快速修正 Ctrl1+1 <BR>全局 内容辅助 Alt+/ <BR>全局 全部选中 Ctrl+A <BR>全局 删除 Delete <BR>全局 上下文信息 Alt+？ <BR><BR><BR>Java编辑器 显示工具提示描述 F2 <BR>Java编辑器 选择封装元素 Alt+Shift+↑ <BR>Java编辑器 选择上一个元素 Alt+Shift+← <BR>Java编辑器 选择下一个元素 Alt+Shift+→ <BR>文本编辑器 增量查找 Ctrl+J <BR>文本编辑器 增量逆向查找 Ctrl+Shift+J <BR>全局 粘贴 Ctrl+V <BR>全局 重做 Ctrl+Y <BR><BR><BR>查看 <BR>作用域 功能 快捷键 <BR>全局 放大 Ctrl+= <BR>全局 缩小 Ctrl+- <BR><BR><BR>窗口 <BR>作用域 功能 快捷键 <BR>全局 激活编辑器 F12 <BR>全局 切换编辑器 Ctrl+Shift+W <BR>全局 上一个编辑器 Ctrl+Shift+F6 <BR>全局 上一个视图 Ctrl+Shift+F7 <BR>全局 上一个透视图 Ctrl+Shift+F8 <BR>全局 下一个编辑器 Ctrl+F6 <BR>全局 下一个视图 Ctrl+F7 <BR>全局 下一个透视图 Ctrl+F8 <BR>文本编辑器 显示标尺上下文菜单 Ctrl+W <BR>全局 显示视图菜单 Ctrl+F10 <BR>全局 显示系统菜单 Alt+- <BR><BR><BR>导航 <BR>作用域 功能 快捷键 <BR>Java编辑器 打开结构 Ctrl+F3 <BR>全局 打开类型 Ctrl+Shift+T <BR>全局 打开类型层次结构 F4 <BR>全局 打开声明 F3 <BR>全局 打开外部javadoc Shift+F2 <BR>全局 打开资源 Ctrl+Shift+R <BR>全局 后退历史记录 Alt+← <BR>全局 前进历史记录 Alt+→ <BR>全局 上一个 Ctrl+, <BR>全局 下一个 Ctrl+. <BR>Java编辑器 显示大纲 Ctrl+O <BR>全局 在层次结构中打开类型 Ctrl+Shift+H <BR>全局 转至匹配的括号 Ctrl+Shift+P <BR>全局 转至上一个编辑位置 Ctrl+Q <BR>Java编辑器 转至上一个成员 Ctrl+Shift+↑ <BR>Java编辑器 转至下一个成员 Ctrl+Shift+↓ <BR>文本编辑器 转至行 Ctrl+L <BR><BR><BR>搜索 <BR>作用域 功能 快捷键 <BR>全局 出现在文件中 Ctrl+Shift+U <BR>全局 打开搜索对话框 Ctrl+H <BR>全局 工作区中的声明 Ctrl+G <BR>全局 工作区中的引用 Ctrl+Shift+G <BR><BR><BR>文本编辑 <BR>作用域 功能 快捷键 <BR>文本编辑器 改写切换 Insert <BR>文本编辑器 上滚行 Ctrl+↑ <BR>文本编辑器 下滚行 Ctrl+↓ <BR><BR><BR>文件 <BR>作用域 功能 快捷键 <BR>全局 保存 Ctrl+S <BR>全局 打印 Ctrl+P <BR>全局 关闭 Ctrl+F4 <BR>全局 全部保存 Ctrl+Shift+S <BR>全局 全部关闭 Ctrl+Shift+F4 <BR>全局 属性 Alt+Enter <BR>全局 新建 Ctrl+N <BR><BR><BR>项目 <BR>作用域 功能 快捷键 <BR>全局 全部构建 Ctrl+B <BR><BR><BR>源代码 <BR>作用域 功能 快捷键 <BR>Java编辑器 格式化 Ctrl+Shift+F <BR>Java编辑器 取消注释 Ctrl+\ <BR>Java编辑器 注释 Ctrl+/ <BR>Java编辑器 添加导入 Ctrl+Shift+M <BR>Java编辑器 组织导入 Ctrl+Shift+O <BR><BR><BR><BR>运行 <BR>作用域 功能 快捷键 <BR>全局 单步返回 F7 <BR>全局 单步跳过 F6 <BR>全局 单步跳入 F5 <BR>全局 单步跳入选择 Ctrl+F5 <BR>全局 调试上次启动 F11 <BR>全局 继续 F8 <BR>全局 使用过滤器单步执行 Shift+F5 <BR>全局 添加/去除断点 Ctrl+Shift+B <BR>全局 显示 Ctrl+D <BR>全局 运行上次启动 Ctrl+F11 <BR>全局 运行至行 Ctrl+R <BR>全局 执行 Ctrl+U <BR><BR><BR>重构 <BR>作用域 功能 快捷键 <BR>全局 撤销重构 Alt+Shift+Z <BR>全局 抽取方法 Alt+Shift+M <BR>全局 抽取局部变量 Alt+Shift+L <BR>全局 内联 Alt+Shift+I <BR>全局 移动 Alt+Shift+V <BR>全局 重命名 Alt+Shift+R <BR>全局 重做 Alt+Shift+Y</DIV>]]></description>
</item><item>
<title><![CDATA[about java.lang.OutOfMemoryError (转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=38082</link>
<author>kkk888929</author>
<pubDate>2008/7/25 9:54:05</pubDate>
<description><![CDATA[<A>　
<P>今天同学在使用java时遇到这样的问题：</P>
<P>byte[] array = new byte[8000*8000] 将导致<BR>Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at ...</P>
<P>这是因为JVM的内存有限制，可以通过java -Xms64m -Xmx256m 【你的程序类名】的方法扩大JVM的内存容量，就不易出现这种错误了。</P>
<P>byte[][] array = new byte[8000][8000]; 不会报错我猜是因为二维数组只是分配了指针，还没有分配内存，若分配了内存也将会报错。</P>
<P>尽管可以手动分配内存，JVM还是有内存上限的 见 </A><A href="http://www.javaeye.com/topic/80257">http://www.javaeye.com/topic/80257</A><A></P>
<P>通过这个错误的解决，我了解了JVM的一些设置方法，有用的链接如下：</P>
<P></A><A href="http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp" target=_blank>JVM Tuning</A><A>&nbsp;&nbsp;&nbsp; </A><A href="http://fengyouhua.javaeye.com/blog/58170" target=_blank>JVM内存的设置的原理</A><A>&nbsp;&nbsp;&nbsp; </A><A href="http://kbase.nou.com.cn/kbase/personalKBase/personalArticle!articleRead.action?klId=1819" target=_blank>JVM内存参数调优Java虚拟机（JVM）参数配置说明</A><A></P>
<P></A><A href="http://feidi.javaeye.com/blog/113453" target=_blank><SPAN class=hilite1>JVM</SPAN>调优总结</A><A>&nbsp;&nbsp;&nbsp; </A><A href="http://edocs.bea.com/wls/docs61/perform/JVMTuning.html" target=_blank>Tuning Java Virtual Machines</A><A>&nbsp;&nbsp;&nbsp; </A><A href="http://www.blogjava.net/amigoxie/archive/2007/02/11/99330.html" target=_blank>java.lang.OutOfMemoryError学习笔记</A><A></P>
<P>附表 与JVM内存相关的参数及其说明 摘自</A><A href="http://jstudy.uu1001.com/read.php?tid=355&amp;t=1" target=_blank>JVM内存参数调优</A><A></P>
<DIV align=center>
<TABLE style="BORDER-RIGHT: #d4eff7 1px solid; BORDER-TOP: #d4eff7 1px solid; BORDER-LEFT: #d4eff7 1px solid; WIDTH: 541px; BORDER-BOTTOM: #d4eff7 1px solid">
<TBODY>
<TR class=tr3>
<TD width=139>
<DIV align=center><FONT size=1><SUP>JVM</SUP><SUP>堆内存（</SUP><SUP>heap</SUP><SUP>）设置选项</SUP></FONT></DIV></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>参数格式</FONT></SUP></DIV></TD>
<TD width=274>
<DIV align=center><FONT size=1><SUP>说</SUP><SUP> </SUP><SUP>明</SUP></FONT></DIV></TD></TR>
<TR class=tr3>
<TD width=139><FONT size=1><SUP>设置新对象生产堆内存（</SUP><SUP>Setting the Newgeneration heap size</SUP><SUP>）</SUP></FONT></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>-XX:NewSize</FONT></SUP></DIV></TD>
<TD width=274><FONT size=1><SUP>通过这个选项可以设置</SUP><SUP><A href="http://blog.csdn.net/dongliheng/archive/2007/07/12/www.chinajavaworld.com" target=_blank><FONT color=#2f5fa1>java</FONT></A></SUP><SUP>新对象生产堆内存。在通常情况下这个选项的数值为</SUP><SUP>1 024</SUP><SUP>的整数倍并且大于</SUP><SUP>1MB</SUP><SUP>。这个值的取值规则为，一般情况下这个值</SUP><SUP>-XX:NewSize</SUP><SUP>是最大堆内存（</SUP><SUP>maximum heap size</SUP><SUP>）的四分之一。增加这个选项值的大小是为了增大较大数量的短生命周期对象</SUP><SUP>增加</SUP><SUP><A href="http://blog.csdn.net/dongliheng/archive/2007/07/12/www.chinajavaworld.com" target=_blank><FONT color=#2f5fa1>java</FONT></A></SUP><SUP>新对象生产堆内存相当于增加了处理器的数目。并且可以并行地分配内存，但是请注意内存的垃圾回收却是不可以并行处理的</SUP></FONT></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE style="BORDER-RIGHT: #d4eff7 1px solid; BORDER-TOP: #d4eff7 1px solid; BORDER-LEFT: #d4eff7 1px solid; WIDTH: 541px; BORDER-BOTTOM: #d4eff7 1px solid">
<TBODY>
<TR class=tr3>
<TD width=139>
<DIV align=center><FONT size=1><SUP>JVM</SUP><SUP>堆内存（</SUP><SUP>heap</SUP><SUP>）设置选项</SUP></FONT></DIV></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>参数格式</FONT></SUP></DIV></TD>
<TD width=274>
<DIV align=center><FONT size=1><SUP>说</SUP><SUP> </SUP><SUP>明</SUP></FONT></DIV></TD></TR>
<TR class=tr3>
<TD width=139><FONT size=1><SUP>设置最大新对象生产堆内存（</SUP><SUP>Setting the maximum New generation heap size</SUP><SUP>）</SUP></FONT></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>-XX:MaxNewSize</FONT></SUP></DIV></TD>
<TD width=274><FONT size=1><SUP>通过这个选项可以设置最大</SUP><SUP><A href="http://blog.csdn.net/dongliheng/archive/2007/07/12/www.chinajavaworld.com" target=_blank><FONT color=#2f5fa1>java</FONT></A></SUP><SUP>新对象生产堆内存。通常情况下这个选项的数值为</SUP><SUP>1</SUP><SUP> </SUP><SUP>024</SUP><SUP>的整数倍并且大于</SUP><SUP>1MB</SUP><SUP>其功用与上面的设置新对象生产堆内存</SUP><SUP>-XX</SUP><SUP>：</SUP><SUP>NewSize</SUP><SUP>相同</SUP></FONT></TD></TR>
<TR class=tr3>
<TD width=139><FONT size=1><SUP>设置新对象生产堆内存的比例（</SUP><SUP>Setting New heap size ratios</SUP><SUP>）</SUP></FONT></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>-XX:SurvivorRatio</FONT></SUP></DIV></TD>
<TD width=274><FONT size=1><SUP>新对象生产区域通常情况下被分为</SUP><SUP>3</SUP><SUP>个子区域：伊甸园，与两个残存对象空间，这两个空间的大小是相同的。通过用</SUP><SUP>-XX:SurvivorRatio=X</SUP><SUP>选项配置伊甸园与残存对象空间（</SUP><SUP>Eden/survivor</SUP><SUP>）的大小的比例。你可以试着将这个值设置为</SUP><SUP>8</SUP><SUP>，然后监控、观察垃圾回收的工作情况</SUP></FONT></TD></TR>
<TR class=tr3>
<TD width=139><FONT size=1><SUP>设置堆内存池的最小值</SUP><SUP>（</SUP><SUP>Setting minimum heap size</SUP><SUP>）</SUP></FONT></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>-Xms</FONT></SUP></DIV></TD>
<TD width=274><FONT size=1><SUP>通过这个选项可以要求系统为堆内存池分配内存空间的最小值。通常情况下这个选项的数值为</SUP><SUP>1</SUP><SUP> </SUP><SUP>024</SUP><SUP>的整数倍并且大于</SUP><SUP>1MB</SUP><SUP>。这个值的取值规则为，一般情况下这个值（</SUP><SUP>-Xms</SUP><SUP>）与最大堆内存相同，以降低垃圾回收的频度</SUP></FONT></TD></TR>
<TR class=tr3>
<TD width=139><FONT size=1><SUP>设置堆内存池的最大值（</SUP><SUP>Setting maximum heap size</SUP><SUP>）</SUP></FONT></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>-Xmx</FONT></SUP></DIV></TD>
<TD width=274><FONT size=1><SUP>通过这个选项可以要求系统为堆内存池分配内存空间的最大值。通常情况下这个选项的数值为</SUP><SUP>1</SUP><SUP> </SUP><SUP>024</SUP><SUP>的整数倍并且大于</SUP><SUP>1 MB</SUP><SUP>一般情况下这个值（</SUP><SUP>-Xmx</SUP><SUP>）与最小堆内存（</SUP><SUP>minimum heap size –Xms</SUP><SUP>）相同，以降低垃圾回收的频度</SUP></FONT></TD></TR>
<TR class=tr3>
<TD width=139><SUP><FONT size=1>取消垃圾回收</FONT></SUP></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>-Xnoclassgc</FONT></SUP></DIV></TD>
<TD width=274><SUP><FONT size=1>这个选项用来取消系统对特定类的垃圾回收。它可以防止当这个类的所有引用丢失之后，这个类仍被引用时不会再一次被重新装载，因此这个选项将增大系统堆内存的空间</FONT></SUP></TD></TR>
<TR class=tr3>
<TD width=139><SUP><FONT size=1>设置栈内存的大小</FONT></SUP></TD>
<TD width=128>
<DIV align=center><SUP><FONT size=1>-Xss</FONT></SUP></DIV></TD>
<TD width=274><FONT size=1><SUP>这个选项用来控制本地线程栈的大小，当这个选项被设置的较大（</SUP><SUP>&gt;2MB</SUP><SUP>）时将会在很大程度上降低系统的性能。因此在设置这个值时应该格外小心，调整后要注意观察系统的性能，不断调整以期达到最优</SUP></FONT></TD></TR></TBODY></TABLE></DIV></A>]]></description>
</item><item>
<title><![CDATA[Java技术：生成可执行jar文件的教程(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=38061</link>
<author>kkk888929</author>
<pubDate>2008/7/24 16:45:35</pubDate>
<description><![CDATA[若要生成一个名为&nbsp;cal.jar&nbsp;的可执行jar文件:(文件名可以是任意合法名字)<BR>(这是我认为简单实用的一种方法,还有很多别的方法在此就不介绍了)<BR><STRONG>第一</STRONG>&nbsp;把程序生成的<STRONG>所有</STRONG>字节码文件(即.class文件)放在同一个目录下(如:D:/chat/).<BR><STRONG>第二</STRONG>&nbsp;在该目录下新建一个manifest.mf文件，文件内容格式如下（划线中内容）：<BR>manifest.mf文件中的格式：<BR>--------------------------------<BR>Main-Class:&nbsp;calDemo<BR>&nbsp;&nbsp;&nbsp;<BR>--------------------------------<BR><STRONG>注意</STRONG>:&nbsp;calDemo代表<STRONG>主类名</STRONG>(即要运行的类名,只能有一个,不要文件扩展名)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main与Class中间不是下划线,而是短横线<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main-Class:与calDemo中间必须要有空格<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Main-Class:&nbsp;calDemo之后必须要回车<BR>&nbsp;<BR><BR>文件中还可以加入一些其他信息如：(先不要加,以免出错)<BR><BR>--------------------------------------------<BR>Manifest-Version:&nbsp;1.0<BR>Created-By:&nbsp;1.4.1_02&nbsp;(Sun&nbsp;Microsystems&nbsp;Inc.)<BR>--------------------------------------------<BR><BR><STRONG>然后</STRONG>用jar命令生成可执行的jar文件,例如:<BR>(执行该命令前先要转到该目录下&nbsp;D:/chat/&nbsp;)<BR>jar&nbsp;cvfm&nbsp;cal.jar&nbsp;manifest.mf&nbsp;*.class<BR><BR>jar用法：(仅供参考,初学者可跳过这部分内容)<BR>jar&nbsp;{ctxu}[vfm0Mi]&nbsp;[jar-文件]&nbsp;[manifest-文件]&nbsp;[-C&nbsp;目录]&nbsp;文件名&nbsp;...<BR>选项：<BR>&nbsp;&nbsp;&nbsp;&nbsp;-c&nbsp;&nbsp;创建新的存档<BR>&nbsp;&nbsp;&nbsp;&nbsp;-t&nbsp;&nbsp;列出存档内容的列表<BR>&nbsp;&nbsp;&nbsp;&nbsp;-x&nbsp;&nbsp;展开存档中的命名的（或所有的〕文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;-u&nbsp;&nbsp;更新已存在的存档<BR>&nbsp;&nbsp;&nbsp;&nbsp;-v&nbsp;&nbsp;生成详细输出到标准输出上<BR>&nbsp;&nbsp;&nbsp;&nbsp;-f&nbsp;&nbsp;指定存档文件名<BR>&nbsp;&nbsp;&nbsp;&nbsp;-m&nbsp;&nbsp;包含来自标明文件的标明信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;-0&nbsp;&nbsp;只存储方式；未用ZIP压缩格式<BR>&nbsp;&nbsp;&nbsp;&nbsp;-M&nbsp;&nbsp;不产生所有项的清单（manifest〕文件<BR>&nbsp;&nbsp;&nbsp;&nbsp;-i&nbsp;&nbsp;为指定的jar文件产生索引信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;-C&nbsp;&nbsp;改变到指定的目录，并且包含下列文件：<BR>如果一个文件名是一个目录，它将被递归处理。<BR>清单（manifest〕文件名和存档文件名都需要被指定，按'm'&nbsp;和&nbsp;'f'标志指定的相同顺序。<BR><BR>示例1：将两个class文件存档到一个名为&nbsp;'classes.jar'&nbsp;的存档文件中：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jar&nbsp;cvf&nbsp;classes.jar&nbsp;Foo.class&nbsp;Bar.class<BR>示例2：用一个存在的清单（manifest）文件&nbsp;'mymanifest'&nbsp;将&nbsp;foo/&nbsp;目录下的所有<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件存档到一个名为&nbsp;'classes.jar'&nbsp;的存档文件中：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jar&nbsp;cvfm&nbsp;classes.jar&nbsp;mymanifest&nbsp;-C&nbsp;foo/&nbsp;.]]></description>
</item><item>
<title><![CDATA[Java中堆和栈的区别(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=37968</link>
<author>kkk888929</author>
<pubDate>2008/7/22 16:19:54</pubDate>
<description><![CDATA[<A>　 
<P style="TEXT-INDENT: 2em">堆：　是大家共有的空间，分全局堆和局部堆。全局堆就是所有没有分配的空间，局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配，运行过程中也可以向系统要额外的堆，但是记得用完了要还给操作系统，要不然就是内存泄漏。</P>
<P style="TEXT-INDENT: 2em">栈：是个线程独有的，保存其运行状态和局部自动变量的。栈在线程开始的时候初始化，每个线程的栈互相独立，因此，栈是　thread safe的。每个Ｃ　＋＋对象的数据成员也存在在栈中，每个函数都有自己的栈，栈被用来在函数之间传递参数。操作系统在切换线程的时候会自动的切换栈，就是切换　ＳＳ／ＥＳＰ寄存器。栈空间不需要在高级语言里面显式的分配和释放。</P>
<P style="TEXT-INDENT: 2em">堆和栈的区别</P>
<P style="TEXT-INDENT: 2em">一、预备知识—程序的内存分配</P>
<P style="TEXT-INDENT: 2em">一个由c/C++编译的程序占用的内存分为以下几个部分：</P>
<P style="TEXT-INDENT: 2em">1、栈区（stack）— 由编译器自动分配释放，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。</P>
<P style="TEXT-INDENT: 2em">2、堆区（heap） — 一般由程序员分配释放，若程序员不释放，程序结束时可能由OS回收。注意它与数据结构中的堆是两回事，分配方式倒是类似于链表。</P>
<P style="TEXT-INDENT: 2em">3、全局区（静态区）（static）—，全局变量和静态变量的存储是放在一块的，初始化的全局变量和静态变量在一块区域，未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。</P>
<P style="TEXT-INDENT: 2em">4、文字常量区&nbsp;&nbsp; —常量字符串就是放在这里的。程序结束后由系统释放。</P>
<P style="TEXT-INDENT: 2em">5、程序代码区—存放函数体的二进制代码。</P>
<P style="TEXT-INDENT: 2em">二、例子程序</P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">//main.cpp</P>
<P style="TEXT-INDENT: 2em">int a = 0; 全局初始化区</P>
<P style="TEXT-INDENT: 2em">char *p1; 全局未初始化区</P>
<P style="TEXT-INDENT: 2em">main()</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">int b; 栈</P>
<P style="TEXT-INDENT: 2em">char s[] = "abc"; 栈</P>
<P style="TEXT-INDENT: 2em">char *p2; 栈</P>
<P style="TEXT-INDENT: 2em">char *p3 = "123456"; 123456\0在常量区，p3在栈上。</P>
<P style="TEXT-INDENT: 2em">static int c =0；全局（静态）初始化区</P>
<P style="TEXT-INDENT: 2em">p1 = (char *)malloc(10);</P>
<P style="TEXT-INDENT: 2em">p2 = (char *)malloc(20);</P>
<P style="TEXT-INDENT: 2em">分配得来得10和20字节的区域就在堆区。</P>
<P style="TEXT-INDENT: 2em">strcpy(p1, "123456"); 123456\0放在常量区，编译器可能会将它与p3所指向的"123456"优化成一个地方。</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">二、堆和栈的理论知识</P>
<P style="TEXT-INDENT: 2em">2.1申请方式</P>
<P style="TEXT-INDENT: 2em">stack:</P>
<P style="TEXT-INDENT: 2em">由系统自动分配。例如，声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间</P>
<P style="TEXT-INDENT: 2em">heap:</P>
<P style="TEXT-INDENT: 2em">需要程序员自己申请，并指明大小，在c中malloc函数</P>
<P style="TEXT-INDENT: 2em">如p1 = (char *)malloc(10);</P>
<P style="TEXT-INDENT: 2em">在C++中用new运算符</P>
<P style="TEXT-INDENT: 2em">如p2 = (char *)malloc(10);</P>
<P style="TEXT-INDENT: 2em">但是注意p1、p2本身是在栈中的。</P>
<P style="TEXT-INDENT: 2em">2.2</P>
<P style="TEXT-INDENT: 2em">申请后系统的响应</P>
<P style="TEXT-INDENT: 2em">栈：只要栈的剩余空间大于所申请空间，系统将为程序提供内存，否则将报异常提示栈溢出。</P>
<P style="TEXT-INDENT: 2em">堆： 首先应该知道操作系统有一个记录空闲内存地址的链表，当系统收到程序的申请时，会遍历该链表，寻找第一个空间大于所申请空间的堆结点，然后将该结点从空闲 结点链表中删除，并将该结点的空间分配给程序，另外，对于大多数系统，会在这块内存空间中的首地址处记录本次分配的大小，这样，代码中的delete语句才能正确的释放本内存空间。另外，由于找到的堆结点的大小不一定正好等于申请的大小，系统会自动的将多余的那部分重新放入空闲链表中。</P>
<P style="TEXT-INDENT: 2em">2.3申请大小的限制</P>
<P style="TEXT-INDENT: 2em">栈：在Windows下,栈是向低地址扩展的数据结构，是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的，在WINDOWS下，栈的大小是2M（也可能是1M，它是一个编译时就确定的常数），如果申请的空间超过栈的剩余空间时，将提示overflow。因此，能从栈获得的空间较小</P>
<P style="TEXT-INDENT: 2em">。</P>
<P style="TEXT-INDENT: 2em">堆：堆是向高地址扩展的数据结构，是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的，自然是不连续的，而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见，堆获得的空间比较灵活，也比较大。</P>
<P style="TEXT-INDENT: 2em">2.4申请效率的比较：</P>
<P style="TEXT-INDENT: 2em">栈由系统自动分配，速度较快。但程序员是无法控制的。</P>
<P style="TEXT-INDENT: 2em">堆是由new分配的内存，一般速度比较慢，而且容易产生内存碎片,不过用起来最方便.</P>
<P style="TEXT-INDENT: 2em">另外，在WINDOWS下，最好的方式是用VirtualAlloc分配内存，他不是在堆，也不是在栈是直接在进程的地址空间中保留一快内存，虽然用起来最不方便。但是速度快，也最灵活。</P>
<P style="TEXT-INDENT: 2em">2.5堆和栈中的存储内容</P>
<P style="TEXT-INDENT: 2em">栈：在函数调用时，第一个进栈的是主函数中后的下一条指令（函数调用语句的下一条可执行语句）的地址，然后是函数的各个参数，在大多数的C编译器中，参数是由右往左入栈的，然后是函数中的局部变量。注意静态变量是不入栈的。</P>
<P style="TEXT-INDENT: 2em">当本次函数调用结束后，局部变量先出栈，然后是参数，最后栈顶指针指向最开始存的地址，也就是主函数中的下一条指令，程序由该点继续运行。</P>
<P style="TEXT-INDENT: 2em">堆：一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。</P>
<P style="TEXT-INDENT: 2em">2.6存取效率的比较</P>
<P style="TEXT-INDENT: 2em">char s1[] = "aaaaaaaaaaaaaaa";</P>
<P style="TEXT-INDENT: 2em">char *s2 = "bbbbbbbbbbbbbbbbb";</P>
<P style="TEXT-INDENT: 2em">aaaaaaaaaaa是在运行时刻赋值的；</P>
<P style="TEXT-INDENT: 2em">而bbbbbbbbbbb是在编译时就确定的；</P>
<P style="TEXT-INDENT: 2em">但是，在以后的存取中，在栈上的数组比指针所指向的字符串(例如堆)快。</P>
<P style="TEXT-INDENT: 2em">比如：</P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">void main()</P>
<P style="TEXT-INDENT: 2em">{</P>
<P style="TEXT-INDENT: 2em">char a = 1;</P>
<P style="TEXT-INDENT: 2em">char c[] = "1234567890";</P>
<P style="TEXT-INDENT: 2em">char *p ="1234567890";</P>
<P style="TEXT-INDENT: 2em">a = c[1];</P>
<P style="TEXT-INDENT: 2em">a = p[1];</P>
<P style="TEXT-INDENT: 2em">return;</P>
<P style="TEXT-INDENT: 2em">}</P>
<P style="TEXT-INDENT: 2em">对应的汇编代码</P>
<P style="TEXT-INDENT: 2em"></P>
<P style="TEXT-INDENT: 2em">10: a = c[1];</P>
<P style="TEXT-INDENT: 2em">00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]</P>
<P style="TEXT-INDENT: 2em">0040106A 88 4D FC mov byte ptr [ebp-4],cl</P>
<P style="TEXT-INDENT: 2em">11: a = p[1];</P>
<P style="TEXT-INDENT: 2em">0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]</P>
<P style="TEXT-INDENT: 2em">00401070 8A 42 01 mov al,byte ptr [edx+1]</P>
<P style="TEXT-INDENT: 2em">00401073 88 45 FC mov byte ptr [ebp-4],al</P>
<P style="TEXT-INDENT: 2em">第一种在读取时直接就把字符串中的元素读到寄存器cl中，而第二种则要先把指针值读到edx中，在根据</P>
<P style="TEXT-INDENT: 2em">edx读取字符，显然慢了。</P>
<P style="TEXT-INDENT: 2em">2.7小结：</P>
<P style="TEXT-INDENT: 2em">堆和栈的区别可以用如下的比喻来看出：</P>
<P style="TEXT-INDENT: 2em">使用栈就象我们去饭馆里吃饭，只管点菜（发出申请）、付钱、和吃（使用），吃饱了就走，不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作，他的好处是快捷，但是自由度小。</P>
<P style="TEXT-INDENT: 2em">使用堆就象是自己动手做喜欢吃的菜肴，比较麻烦，但是比较符合自己的口味，而且自由度大。</P></A>]]></description>
</item><item>
<title><![CDATA[tomcat的OutOfMemoryError解决方法(转)]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=37759</link>
<author>kkk888929</author>
<pubDate>2008/7/15 10:43:07</pubDate>
<description><![CDATA[<A>　<STRONG>关键字: tomcat outofmemoryerror permgen space java heap space</STRONG> 
<DIV class=blog_content>最近在熟悉一个开发了有几年的项目，需要把数据库从mysql移植到oracle，首先把jdbc的连接指向mysql，打包放到tomcat里面，可以跑起来，没有问题，可是当把jdbc连接指向oracle的时候，tomcat就连续抛java.lang.OutOfMemoryError的错误，上网google了一下，了解了一下tomcat的运行机制，也解决了问题，share出来，以备查。 <BR><BR>1、首先是：java.lang.OutOfMemoryError: Java heap space <BR><BR><STRONG>解释：</STRONG> <BR><BR>Heap size 设置 <BR><BR>JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值，其初始空间(即-Xms)是物理内存的1/64，最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。 <BR>提示：在JVM中如果98％的时间是用于GC且可用的Heap size 不足2％的时候将抛出此异常信息。 <BR>提示：Heap Size 最大不要超过可用物理内存的80％，一般的要将-Xms和-Xmx选项设置为相同，而-Xmn为1/4的-Xmx值。 <BR><BR><STRONG>解决方法：</STRONG> <BR><BR>手动设置Heap size <BR>修改TOMCAT_HOME/bin/catalina.bat，在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行： <BR>set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m <BR><BR>或修改catalina.sh <BR>在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行： <BR>JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m" <BR><BR>2、其次是：java.lang.OutOfMemoryError: PermGen space <BR><BR><STRONG>原因：</STRONG> <BR><BR>PermGen space的全称是Permanent Generation space,是指内存的永久保存区域，这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中，它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理，所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误，这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。 <BR><BR><STRONG>解决方法：</STRONG> <BR><BR>1. 手动设置MaxPermSize大小 <BR>修改TOMCAT_HOME/bin/catalina.bat（Linux下为catalina.sh），在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行： <BR>set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m <BR><BR>catalina.sh下为： <BR>JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m" <BR><BR><BR>另外看到了另外一个帖子，觉得挺好，摘抄如下： <BR></A><A href="http://www.javaeye.com/topic/80620" target=_blank><FONT color=#108ac6>分析java.lang.OutOfMemoryError: PermGen space</FONT></A><A> <BR><BR>发现很多人把问题归因于： spring,hibernate,tomcat，因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭，有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题，在spring论坛上讨论很激烈，因为spring在AOP时使用CBLIB会动态产生很多类。 <BR><BR>但问题是为什么这些王牌的开源会出现同一个问题呢，那么是不是更基础的原因呢？tomcat在Q&amp;A很隐晦的回答了这一点，我们知道这个问题，但这个问题是由一个更基础的问题产生。 <BR><BR>于是有人对更基础的JVM做了检查，发现了问题的关键。原来SUN 的JVM把内存分了不同的区，其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了，但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制，现在的问题是动态加载类到这个区域后，gc根本没办法回收！ <BR><BR><BR><SPAN style="COLOR: darkblue"><STRONG>对于以上两个问题，我的处理是： <BR><BR>在catalina.bat的第一行增加： <BR>set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m <BR><BR>在catalina.sh的第一行增加： <BR>JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m </STRONG></SPAN><BR><BR><BR><BR>参考连接： <BR></A><A href="http://www.duduwolf.com/wiki/2007/663.html" target=_blank><FONT color=#108ac6>Tomcat给我的java.lang.OutOfMemoryError</FONT></A><A> <BR></A><A href="http://eclass.blog.sohu.com/74197056.html" target=_blank><FONT color=#108ac6>tomcat 下 java.lang.OutOfMemoryError 其解决方法 </FONT></A><A><BR></A><A href="http://blog.csdn.net/alajl/archive/2008/02/28/2127732.aspx" target=_blank><FONT color=#108ac6>在 Linux 和 Windows 下给 Tomcat 分配大内存设置方法</FONT></A><A> </DIV></A>]]></description>
</item><item>
<title><![CDATA[VMware图解（转）]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=kkk888929&amp;id=37550</link>
<author>kkk888929</author>
<pubDate>2008/7/8 16:19:12</pubDate>
<description><![CDATA[<A>　现如今有很多人都拥有电脑，但多数人都只有一两台，想组建一个自己的局域网或者是做个小规模的实验一台机器是不够的，最少也要个两三台，可为了这再买电脑就太不值了。好在有许多虚拟机可以帮我们解决这个问题。虚拟机可以在一台电脑上虚拟出很多的主机，只要真实主机的配置足够就可以，我这里和大家说说一个老牌的虚拟机VMware。 
<P>　　VMware workstation是VMware公司设计的专业虚拟机，可以虚拟现有任何操作系统，而且使用简单，容易上手。要知道所有微软员工的机器上都装有一套正版的VMware，足见它在这方面的权威，废话少说，下面我就合大家说说VMware的使用方法，我使用的是最新的VMware4。 <BR><BR>　　这个软件的安装和其他的软件没什么区别，所以安装过程我就不多费口舌了，下面我将把VMware的完整使用过程分为：建立一个新的虚拟机、配置安装好的虚拟机、配置虚拟机的网络这三个部分，向大家从头说来。<BR><BR><STRONG>一、建立一个新的虚拟机</STRONG><BR><BR>　　首先让大家看看VMware的界面<BR></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163718983.jpg" border=0></P>
<P>　　我们来建立一个新的虚拟机</P>
<P>2<BR></P>
<P></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163719473.jpg" border=0></P>
<P>　　向导<BR><BR>　　3<BR></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163719830.jpg" border=0></P>
<P>　　选择普通安装或者是自定义。这里大家选自定义，后面可以自行规划设备，内存和硬盘容量<BR>　4<BR></P>
<P></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163719961.jpg" border=0></P>
<P>　　选择想要虚拟的系统<BR><BR>　　5<BR><BR></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163720528.jpg" border=0></P>
<P>　　给虚拟机起个名字，指定它的存放位置<BR>6<BR></P>
<P></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163720931.jpg" border=0></P>
<P>　　分配内存大小<BR><BR>　　7<BR></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163720603.jpg" border=0></P>
<P>　　网络设置模式。这里比较复杂，安装的时候可以先随便选一个，装好后也可以改，但千万不要选最后一个，否则你将无法创建网络了。关于这三者之间的区别和怎样使用虚拟机连接到internet会在后面介绍。<BR>8<BR></P>
<P></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163720785.jpg" border=0></P>
<P>　　创建一块磁盘。当第一次建立虚拟机时，请选择第一项，第二项适用于建立第二个或更多虚拟机，即使用已经建立好的虚拟机磁盘，这样可以减少虚拟机占用的真实磁盘空间。第三项则允许虚拟机直接读写磁盘空间，比较危险，所以适合熟悉使用磁盘的高级用户，如果操作失误会把真实磁盘里的内容删掉的。<BR><BR>　　9<BR></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163721161.jpg" border=0></P>
<P>　　设置虚拟机磁盘容量。第一项可以定义磁盘大小。第二项允许虚拟机无限使用磁盘空间，但需要真实磁盘足够大。第三项则限制了每块虚拟磁盘的最大容量为2G。</P>
<P>10<BR></P>
<P></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163721270.jpg" border=0></P>
<P>　　这一步是最后一步了，虚拟磁盘即将被创建，advanced里可以更改虚拟磁盘的接口是SCSI或是IDE，当然是SCSI啦…<BR><BR>　　11<BR></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163721660.jpg" border=0></P>
<P>　　这时候已经建立完成了一个虚拟机了，点击开始键就可以运行了，可是虚拟机里什么系统都没有，你还要自己装。<BR><BR>　　下面这个部分我拿一个装好的windows2000 professional给大家做演示，主要讲解一下我们常用的某些功能<BR>12<BR></P>
<P></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163721255.jpg" border=0></P>
<P>　　开关机怎么使我就不解释了，试一下就知道了。<BR><BR>　　13<BR></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163721561.jpg" border=0></P>
<P>　　这个功能比较有意思，是4里新增的，有点像XP的系统还原，如果你在虚拟机上做了什么导致它挂了，用这个可以恢复，但每个虚拟机只能拥有一个snapshot点。</P>
<P>14<BR></P>
<P></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163722961.jpg" border=0></P>
<P>　　刚刚装完的系统可不会像我的一样这么漂亮，你还没装驱动呢，可是VMware为你想到了，你不必装任何驱动程序，只需要运行图中的那个东西<BR><BR>　　15<BR></P>
<P align=center><IMG src="http://wglm.net/editor/UploadFile/2005-9/8/200598163722954.jpg" border=0></P>
<P>　　装好这个以后去看看虚拟机的硬件状态会发现所有的硬件都工作正常了，其实只要你的真实系统里的硬件驱动都安装好了，VMware就会在虚拟机里也安装好的。到此为止，安装虚拟机的工作已经完成，下面进入第二部分</P>
<P></P>
<P>
<TABLE cellSpacing=5 cellPadding=0 width=520 align=center border=0>
<TBODY>
<TR>
<TD vAlign=top height=450>
<P>VMware教程－－第二部分</P>
<TABLE height=47 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<P>二、配置安装好的虚拟机 </P>
<P>　　我这里所指的配置，就是对已经装好的虚拟机的内存容量，硬盘大小和数量，网络类型等进行修改，这样可以很方便地“变”出许多需要的 </P>
<P><IMG height=405 src="http://www.onegreen.net/UploadFiles/200602/20069474710734.jpg" width=426><BR>点击后就会出现设备的具体设置，是可以改的。 <BR><IMG height=387 src="http://www.onegreen.net/UploadFiles/200602/20069474710580.jpg" width=500><BR>添加一个设备也含简单，只要add就可以，添加过程就像刚开始配置安装虚拟机过程一样。 <BR><IMG height=378 src="http://www.onegreen.net/UploadFiles/200602/20069474710621.jpg" width=488></P>
<P>需要提一下share folder这个功能，这是VMware4的新功能，是为了在与真实主机共享文件时方便一些设定的，它会在虚拟机理添加一个名为share folder的磁盘，盘符为Z，添加起来很简单，点击那个add，选择一个真是主机的文件夹即可。这个功能在bridge模式下可以用UNC名访问的方式代替，然而在NAT和host only模式下这个功能就显得很有用了，因为在这两种模式下直接使用IP地址变得很困难。最后还要提醒以下，在win98（含以下）的系统不能支持Shared Folder功能 <BR><IMG height=426 src="http://www.onegreen.net/UploadFiles/200602/20069474710360.jpg" width=512> </P>
<P><IMG height=426 src="http://www.onegreen.net/UploadFiles/200602/20069474710371.jpg" width=512></P>
<P>在下一篇文章中，我们将向大家介绍“配置虚拟机的网络” </P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></P>
<P>VMware教程--第三部分</P>
<P>
<TABLE height=47 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top>
<P>三、配置虚拟机的网络 </P>
<P>　　光有虚拟机是不够的，我们需要使用虚拟机和真实主机以及其他的虚拟机进行通讯。通讯分两个部分，一个是局域网内的，另一个是连接到公网的。这一部分是重点，三种不同模式的用途就要揭晓。 </P>
<P>　　（1）桥接模式： </P>
<P>　　拓扑： </P>
<P><IMG height=157 src="http://www.onegreen.net/UploadFiles/200602/20069474738734.gif" width=409></P>
<P>如果你的真实主机在一个以太网中，这种方法是将你的虚拟机接入网络最简单的方法。虚拟机就像一个新增加的、与真实主机有着同等物理地位的一台电脑，桥接模式可以享受所有可用的服务；包括文件服务、打印服务等等，并且在此模式下你将获得最简易的从真实主机获取资源的方法。 </P>
<P><IMG height=157 src="http://www.onegreen.net/UploadFiles/200602/20069474738580.gif" width=409></P>
<P></P>
<P>Host-only模式用来建立隔离的虚拟机环境，这这种模式下，虚拟机与真实主机通过虚拟私有网络进行连接，只有同为Host-only模式下的且在一个虚拟交换机的连接下才可以互相访问，外界无法访问。host only模式只能使用私有IP，IP,gateway,DNS都由VMnet 1来分配。 </P>
<P>　　（3）NAT模式： </P>
<P>　　拓扑： </P>
<P><IMG height=157 src="http://www.onegreen.net/UploadFiles/200602/20069474738621.gif" width=409></P>
<P></P>
<P>NAT（network address translation）模式其实可以理解成为是方便地使虚拟机连接到公网，代价是桥接模式下的其他功能都不能享用。凡是选用NAT结构的虚拟机，均由VMnet 8提供IP,gateway,DNS。 </P>
<P>下面讲讲具体操作。 </P>
<P>　　桥接模式： </P>
<P>　　前面我已经提到，桥接模式是最简单的，使用桥接模式后虚拟机和真实主机的关系就好像两台接在一个hub上的电脑，想让他们俩进行通讯，你需要为双方配置IP地址和子网掩码，从图中可以看出，如果你不配置虚拟机，虚拟机也没有办法得到DHCP分到的IP地址，所以只能使用169.254.这个段。曾经有些朋友试图改在真实主机中安装VM后生成的VMnet1和VMnet8这两块网卡的IP，这种做法是错误的，作为连接底层硬件的驱动程序它们不需要、也不能作修改。 </P>
<P><IMG height=404 src="http://www.onegreen.net/UploadFiles/200602/20069474738360.jpg" width=428></P>
<P>假设真实主机网卡上的IP地址被配置成192.168这个网段，则虚拟机的IP也要配成192.168这个网段，这样虚拟机才能和真实主机进行通讯。如果想在桥接模式下连入internet，方法也很简单，你可以直接在虚拟机上安装一个拨号端，如图所示</P>
<P><IMG height=392 src="http://www.onegreen.net/UploadFiles/200602/20069474739371.jpg" width=416></P>
<P>拨号成功以后你就可以上internet了，别以为虚拟机是假的拨号就也是假的，这时候你就已经在花网费了！当然如果你想通过ICS、NAT或者是代理上网也可以，做法和在普通电脑上做没区别。 </P>
<P>Host only模式： </P>
<P>　　Host only模式和桥接模式的差别并不大，host only模式下会由VMnet 1的DHCP server来提供IP,gateway,DNS。 </P>
<P><IMG height=438 src="http://www.onegreen.net/UploadFiles/200602/20069474739797.jpg" width=464></P>
<P>如果你尝试使用手动分配固定IP，你会发现即使你将IP地址配成和真实主机一个网段，你也无法和真实主机进行联系，这是VMnet 1对你的限制，所以使用VMnet 1给你提供的IP是唯一的选择。 </P>
<P><IMG height=442 src="http://www.onegreen.net/UploadFiles/200602/20069474739112.jpg" width=468></P>
<P>如果想在host only模式下接入internet你只能使用ICS和代理，因为只有这两种方式 </P>
<P>　　可以在使用DHCP的情况下上网。 </P>
<P>NAT模式： </P>
<P>　　首先大家要清楚VMware下的NAT和windows NT里routing and remote access的那个NAT一点关系都没有，它们之间没有任何影响。在VMware下使用NAT模式主要的好处是可以隐藏虚拟机的拓扑和上internet时极为方便。NAT模式由VMnet 8的DHCP server提供IP,gateway,DNS。 </P>
<P><IMG height=426 src="http://www.onegreen.net/UploadFiles/200602/20069474739784.jpg" width=451></P>
<P>和在host only模式下一样，如果你试图使用手动分配固定IP，由于VMnet 8的限制，你仍然无法和真实主机进行通讯。不过在NAT模式下接入internet就非常简单了，你不需要做任何配置，只需要真实主机连接到internet后虚拟机就也可以接入internet了。 </P>
<P><IMG height=342 src="http://www.onegreen.net/UploadFiles/200602/20069474739833.jpg" width=476></P>
<P>VMware的NAT功能还不止这些，它竟然还能做端口映射和TCP、UDP阻断！ </P>
<P>　　不觉得还缺点儿什么吗？对，有一个重要功能还没有说，之所以留到最后是因为这部分是最复杂的，那就是… </P>
<P><IMG height=376 src="http://www.onegreen.net/UploadFiles/200602/20069474739738.jpg" width=463></P>
<P>虚拟网络设置 </P>
<P>　　这部分的功能我觉得一般的用户已经用不到了，因为它的作用是使用VM的高度可扩展网络模型组建非常复杂的局域网，我相信这才是新的VMware的精华所在。 </P>
<P><IMG height=354 src="http://www.onegreen.net/UploadFiles/200602/20069474739140.jpg" width=379></P>
<P>这是VMware的一个复杂拓扑的实例，它自定义了VMnet 2和VMnet 3这些都要用到定义每个VMnet的DHCP和NAT，总之是非常复杂了，而且这样做只有在虚拟机群非常庞大的时候才用得到。 </P>
<P>　　好了，对VMware的介绍就到这了，如果大家英文很好，那么在它的帮助中你会发现远深与本文的内容，事实上，作为一款虚拟机软件，它带给我们的已不仅是能够虚拟出单一的系统，而是能够虚拟出庞大而复杂的网络，本文只是触及皮毛。当然如果大家非常关注VMware更深层次的功能的话，我也非常愿意与大家就此进行讨论</P></TD></TR></TBODY></TABLE></P></A>]]></description>
</item>
</channel>
</rss>