好久没时间写Blog了,更新个6EXHP的中文说明书….
附件:futaba 6exhp.zip(3308486 Byte)
目前,最常用的三种动态网页语言有ASP(Active Server Pages),JSP(JavaServer Pages),PHP (Hypertext Preprocessor)。
简 介
ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Java script)作为自己的开发语言。
PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。还有一点,PHP是完全免费的,不用花钱,你可以从 PHP官方站点(http: //www.PHP.net)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
JSP是Sun公司推出的新一代网站开发语言,Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和Java Applet之外,又有新的硕果,就是JSP,Java Server Page。JSP可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
三者都提供在 HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成 Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。在ASP 、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的 HTML页面只依赖于Web服务器,而ASP 、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。ASP 、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。
技术特点:
ASP:
1. 使用VBScript 、 JScript等简单易懂的脚本语言,结合HTML代码,即可快速地完成网站的应用程序。
2. 无须compile编译,容易编写,可在服务器端直接执行。
3. 使用普通的文本编辑器,如Windows的记事本,即可进行编辑设计。
4. 与浏览器无关(Browser Independence), 客户端只要使用可执行HTML码的浏览器,即可浏览Active Server Pages所设计的网页内容。Active ServerPages 所使用的脚本语言(VBScript 、 Jscript)均在WEB服务器端执行,客户端的浏览器不需要能够执行这些脚本语言。
5.Active Server Pages能与任何ActiveX scripting语言兼容。除了可使用VB Script或JScript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其它脚本语言,譬如REXX 、Perl 、Tcl等。脚本引擎是处理脚本程序的COM(Component Object Model) 对象。
6. 可使用服务器端的脚本来产生客户端的脚本。
7. ActiveX Server Components(ActiveX 服务器组件 )具有无限可扩充性。可以使用Visual Basic 、Java 、Visual C++ 、COBOL等程序设计语言来编写你所需要的ActiveX Server Component 。
PHP:
1 数据库连接
PHP 可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的群组合。你还可以自己编写外围的函数去间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松地修改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。但PHP提供的数据库接口支持彼此不统一,比如对Oracle, MySQL,Sybase的接口,彼此都不一样。这也是PHP的一个弱点。
JSP:
1.将内容的产生和显示进行分离
使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来产生页面上的动态内容。产生内容的逻辑被封装在标识和JavaBeans群组件中,并且捆绑在小脚本中,所有的脚本在服务器端执行。如果核心逻辑被封装在标识和Beans中,那么其它人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的产生。在服务器端,JSP引擎解释JSP标识,产生所请求的内容(例如,通过存取JavaBeans群组件,使用JDBC技术存取数据库),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。
2.强调可重用的群组件
绝大多数JSP页面依赖于可重用且跨平台的组件(如:JavaBeans或者Enterprise JavaBeans)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者用户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种群组织在他们现有的技能和优化结果的开发努力中得到平衡。
3.采用标识简化页面开发
Web 页面开发人员不会都是熟悉脚本语言的程序设计人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容产生所需要的。标准的JSP标识能够存取和实例化 JavaBeans组件,设定或者检索群组件属性,下载Applet,以及执行用其它方法更难于编码和耗时的功能。通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其它人员可以为常用功能建立自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。 JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及 Java 2EE的一个成员,JSP技术能够支持高度复杂的基于Web的应用。由于JSP页面的内置脚本语言是基于Java程序设计语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java程序设计语言“一次编写,各处执行”的特点。随着越来越多的供货商将JSP支持加入到他们的产品中,您可以使用自己所选择的服务器和工具,修改工具或服务器并不影响目前的应用。
应用范围:
ASP是Microsoft开发的动态网页语言,也继承了微软产品的一贯传统,只能执行于微软的服务器产品,IIS(Internet Information Server) (windows NT)和PWS(Personal Web Server)(windows 98)上。Unix下也有ChiliSoft的组件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的群组合来扩充,Unix下的COM 实现起来非常困难。
PHP3可在Windows,Unix,Linux的Web服务器上正常执行,还支持IIS,Apache等一般的Web服务器,用户更换平台时,无需变换PHP3代码,可即拿即用。
JSP 同PHP3类似,几乎可以执行于所有平台。如Win NT,Linux,Unix。在NT下IIS通过一个外加服务器,例如JRUN或者ServletExec,就能支持JSP。知名的Web服务器 Apache已经能够支持JSP。由于Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的执行平台。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的Linux更是来势不小。从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的与平台无关的。
性能比较:
有人做过试验,对这三种语言分别做回圈性能测试及存取Oracle数据库测试。在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而ASP、PHP测试的是 2000*2000循环(少一个数量级),却分别用了63秒和84秒。(参考PHPLIB)。 数据库测试中,三者分别对 oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒,ASP则 需要 73 秒。
前景分析:
目前在国内PHP与ASP应用最为广泛。而JSP由于是一种较新的技术,国内采用的较少。但在国外, JSP已经是比较流行的一种技术,尤其是电子商务类的网站,多采用JSP。采用PHP的网站如新浪网(sina)、中国人(Chinaren)等,但由于 PHP本身存在的一些缺点,使得它不适合应用于大型电子商务站点,而更适合一些小型的商业站点。首先,PHP缺乏规模支持。其次,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。数据库、应用逻辑层、表示逻辑层彼此分开,而且同层也可以根据流量分开,群组成二维数组。而PHP则缺乏这种支持。还有上面提到过的一点,PHP提供的数据库接口支持不统一,这就使得它不适合运用在电子商务中。
ASP和JSP则没有以上缺陷, ASP可以通过Microsoft Windowsd的COM/DCOM获得ActiveX规模支持,通过DCOM和Transcation Server获得结构支持;JSP可以通过SUN Java的Java Class和EJB获得规模支持,通过EJB/CORBA以及众多厂商的Application Server获得结构支持。三者中,JSP应该是未来发展的趋势。世界上一些大的电子商务解决方案提供商都采用JSP/Servlet。比较出名的如 IBM的E-business,它的核心是采用JSP/Servlet的Web Sphere。它们都是通过CGI来提供支持的。但去年10月后它推出了Enfinity,一个采用JSP/Servlet的电子商务 Application Server,而且声言不再开发传统软件。
总之,ASP,PHP,JSP三者都有相当数量的支持者,由此也可以看出三者各有所长。正在学习或使用动态页面的朋友可根据三者的特点选择一种适合自己的语言。
本文转载自『异次元の世界』http://www.x-force.cn/article.asp?id=106
1. 打开新的窗口并传送参数:
传送参数:
response.write("<script>window.open(‘*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+…+"‘)</script>")
接收参数:
string a = Request.QueryString("id");
string b = Request.QueryString("id1");
2.为按钮添加对话框
传送参数:
response.write("<script>window.open(‘*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+…+"‘)</script>")
接收参数:
string a = Request.QueryString("id");
string b = Request.QueryString("id1");
2.为按钮添加对话框
Button1.Attributes.Add("onclick","return confirm(‘确认?‘)");
button.attributes.add("onclick","if(confirm(‘are you sure…?‘)){return true;}else{return false;}")
3.删除表格选定记录
int intEmpID = (int)MyDataGrid.DataKeys[e.Item.ItemIndex];
string deleteCmd = "DELETE from Employee where emp_id = " + intEmpID.ToString()
4.删除表格记录警告
private void DataGrid_ItemCreated(Object sender,DataGridItemEventArgs e)
{
switch(e.Item.ItemType)
{
case ListItemType.Item :
case ListItemType.AlternatingItem :
case ListItemType.EditItem:
TableCell myTableCell;
myTableCell = e.Item.Cells[14];
LinkButton myDeleteButton ;
myDeleteButton = (LinkButton)myTableCell.Controls[0];
myDeleteButton.Attributes.Add("onclick","return confirm(‘您是否确定要删除这条信息‘);");
break;
default:
break;
}
}
5.点击表格行链接另一页
private void grdCustomer_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
//点击表格打开
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
e.Item.Attributes.Add("onclick","window.open(‘Default.aspx?id=" + e.Item.Cells[0].Text + "‘);");
}
双击表格连接到另一页
在itemDataBind事件中
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string OrderItemID =e.item.cells[1].Text;
…
e.item.Attributes.Add("ondblclick", "location.href=‘../ShippedGrid.aspx?id=" + OrderItemID + "‘");
}
双击表格打开新一页
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string OrderItemID =e.item.cells[1].Text;
…
e.item.Attributes.Add("ondblclick", "open(‘../ShippedGrid.aspx?id=" + OrderItemID + "‘)");
}
★特别注意:【?id=】 处不能为 【?id =】
6.表格超连接列传递参数
<asp:HyperLinkColumn Target="_blank" headertext="ID号" DataTextField="id" NavigateUrl="aaa.aspx?id=‘<%# DataBinder.Eval(Container.DataItem, "数据字段1")%>‘ & name=‘<%# DataBinder.Eval(Container.DataItem, "数据字段2")%>‘ />
7.表格点击改变颜色
if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onclick","this.style.backgroundColor=‘#99cc00‘;this.style.color=‘buttontext‘;this.style.cursor=‘default‘;");
}
写在DataGrid的_ItemDataBound里
if (e.Item.ItemType == ListItemType.Item ||e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Attributes.Add("onmouseover","this.style.backgroundColor=‘#99cc00‘;this.style.color=‘buttontext‘;this.style.cursor=‘default‘;");
e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=‘‘;this.style.color=‘‘;");
}
8.关于日期格式
日期格式设定
DataFormatString="{0:yyyy-MM-dd}"
我觉得应该在itembound事件中
e.items.cell["你的列"].text=DateTime.Parse(e.items.cell["你的列"].text.ToString("yyyy-MM-dd"))
9.获取错误信息并到指定页面
不要使用Response.Redirect,而应该使用Server.Transfer
e.g
// in global.asax
protected void Application_Error(Object sender, EventArgs e) {
if (Server.GetLastError() is HttpUnhandledException)
Server.Transfer("MyErrorPage.aspx");
//其余的非HttpUnhandledException异常交给ASP.NET自己处理就okay了 🙂
}
Redirect会导致post-back的产生从而丢失了错误信息,所以页面导向应该直接在服务器端执行,这样就可以在错误处理页面得到出错信息并进行相应的处理
10.清空Cookie
Cookie.Expires=[DateTime];
Response.Cookies("UserName").Expires = 0
11.自定义异常处理
//自定义异常处理类
using System;
using System.Diagnostics;
namespace MyAppException
{
/// <summary>
/// 从系统异常类ApplicationException继承的应用程序异常处理类。
/// 自动将异常内容记录到Windows NT/2000的应用程序日志
/// </summary>
public class AppException:System.ApplicationException
{
public AppException()
{
if (ApplicationConfiguration.EventLogEnabled)
LogEvent("出现一个未知错误。");
}
public AppException(string message)
{
LogEvent(message);
}
public AppException(string message,Exception innerException)
{
LogEvent(message);
if (innerException != null)
{
LogEvent(innerException.Message);
}
}
//日志记录类
using System;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
namespace MyEventLog
{
/// <summary>
/// 事件日志记录类,提供事件日志记录支持
/// <remarks>
/// 定义了4个日志记录方法 (error, warning, info, trace)
/// </remarks>
/// </summary>
public class ApplicationLog
{
/// <summary>
/// 将错误信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteError(String message)
{
WriteLog(TraceLevel.Error, message);
}
/// <summary>
/// 将警告信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteWarning(String message)
{
WriteLog(TraceLevel.Warning, message);
}
/// <summary>
/// 将提示信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteInfo(String message)
{
WriteLog(TraceLevel.Info, message);
}
/// <summary>
/// 将跟踪信息记录到Win2000/NT事件日志中
/// <param name="message">需要记录的文本信息</param>
/// </summary>
public static void WriteTrace(String message)
{
WriteLog(TraceLevel.Verbose, message);
}
/// <summary>
/// 格式化记录到事件日志的文本信息格式
/// <param name="ex">需要格式化的异常对象</param>
/// <param name="catchInfo">异常信息标题字符串.</param>
/// <retvalue>
/// <para>格式后的异常信息字符串,包括异常内容和跟踪堆栈.</para>
/// </retvalue>
/// </summary>
public static String FormatException(Exception ex, String catchInfo)
{
StringBuilder strBuilder = new StringBuilder();
if (catchInfo != String.Empty)
{
strBuilder.Append(catchInfo).Append("");
}
strBuilder.Append(ex.Message).Append("").Append(ex.StackTrace);
return strBuilder.ToString();
}
/// <summary>
/// 实际事件日志写入方法
/// <param name="level">要记录信息的级别(error,warning,info,trace).</param>
/// <param name="messageText">要记录的文本.</param>
/// </summary>
private static void WriteLog(TraceLevel level, String messageText)
{
try
{
EventLogEntryType LogEntryType;
switch (level)
{
case TraceLevel.Error:
LogEntryType = EventLogEntryType.Error;
break;
case TraceLevel.Warning:
LogEntryType = EventLogEntryType.Warning;
break;
case TraceLevel.Inf
LogEntryType = EventLogEntryType.Information;
break;
case TraceLevel.Verbose:
LogEntryType = EventLogEntryType.SuccessAudit;
break;
default:
LogEntryType = EventLogEntryType.SuccessAudit;
break;
}
EventLog eventLog = new EventLog("Application", ApplicationConfiguration.EventLogMachineName, ApplicationConfiguration.EventLogSourceName );
//写入事件日志
eventLog.WriteEntry(messageText, LogEntryType);
}
catch {} //忽略任何异常
}
} //class ApplicationLog
}
12.Panel 横向滚动,纵向自动扩展
<asp:panel style="overflow-x:scroll;overflow-y:auto;"></asp:panel>
13.回车转换成Tab
<script language="javascript" for="document" event="onkeydown">
if(event.keyCode==13 && event.srcElement.type!=‘button‘ && event.srcElement.type!=‘submit‘ && event.srcElement.type!=‘reset‘ && event.srcElement.type!=‘‘&& event.srcElement.type!=‘textarea‘);
event.keyCode=9;
</script>
onkeydown="if(event.keyCode==13) event.keyCode=9"
http://dotnet.aspx.cc/exam/enter2tab.aspx
14.DataGrid超级连接列
DataNavigateUrlField="字段名" DataNavigateUrlFormatString="http://xx/inc/delete.aspx?ID={0}"
15.DataGrid行随鼠标变色
private void DGzf_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType!=ListItemType.Header)
{
e.Item.Attributes.Add( "onmouseout","this.style.backgroundColor=""+e.Item.Style["BACKGROUND-COLOR"]+""");
e.Item.Attributes.Add( "onmouseover","this.style.backgroundColor=""+ "#EFF3F7"+""");
}
}
16.模板列
<ASP:TEMPLATECOLUMN visible="False" sortexpression="demo" headertext="ID">
<ITEMTEMPLATE>
<ASP:LABEL text=‘<%# DataBinder.Eval(Container.DataItem, "ArticleID")%>‘ runat="server" width="80%" id="lblColumn" />
</ITEMTEMPLATE>
</ASP:TEMPLATECOLUMN>
<ASP:TEMPLATECOLUMN headertext="选中">
<HEADERSTYLE wrap="False" horizontalalign="Center"></HEADERSTYLE>
<ITEMTEMPLATE>
<ASP:CHECKBOX id="chkExport" runat="server" />
</ITEMTEMPLATE>
<EDITITEMTEMPLATE>
<ASP:CHECKBOX id="chkExportON" runat="server" enabled="true" />
</EDITITEMTEMPLATE>
</ASP:TEMPLATECOLUMN>
后台代码
protected void CheckAll_CheckedChanged(object sender, System.EventArgs e)
{
//改变列的选定,实现全选或全不选。
CheckBox chkExport ;
if( CheckAll.Checked)
{
foreach(DataGridItem oDataGridItem in MyDataGrid.Items)
{
chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");
chkExport.Checked = true;
}
}
else
{
foreach(DataGridItem oDataGridItem in MyDataGrid.Items)
{
chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");
chkExport.Checked = false;
}
}
}
17.数字格式化
【<%#Container.DataItem("price")%>的结果是500.0000,怎样格式化为500.00?】
<%#Container.DataItem("price","{0:¥#,##0.00}")%>
int i=123456;
string s=i.ToString("###,###.00");
18.日期格式化
【aspx页面内:<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date")%>
显示为: 2004-8-11 19:44:28
我只想要:2004-8-11 】
<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>
应该如何改?
【格式化日期】
取出来,一般是object
((DateTime)objectFromDB).ToString("yyyy-MM-dd");
【日期的验证表达式】
A.以下正确的输入格式: [2004-2-29], [2004-02-29 10:29:39 pm], [2004/12/31]
^((d{2}(([02468][048])|([13579][26]))[-/s]?((((0?[13578])|(1[02]))[-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/s]?((0?[1-9])|([1-2][0-9])))))|(d{2}(([02468][1235679])|([13579][01345789]))[-/s]?((((0?[13578])|(1[02]))[-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(s(((0?[1-9])|(1[0-2])):([0-5][0-9])((s)|(:([0-5][0-9])s))([AM|PM|am|pm]{2,2})))?$
B.以下正确的输入格式:[0001-12-31], [9999 09 30], [2002/03/03]
^d{4}[-/s]?((((0[13578])|(1[02]))[-/s]?(([0-2][0-9])|(3[01])))|(((0[469])|(11))[-/s]?(([0-2][0-9])|(30)))|(02[-/s]?[0-2][0-9]))$
【大小写转换】
HttpUtility.HtmlEncode(string);
HttpUtility.HtmlDecode(string)
19.如何设定全局变量
Global.asax中
Application_Start()事件中
添加Application[属性名] = xxx;
就是你的全局变量
20.怎样作到HyperLinkColumn生成的连接后,点击连接,打开新窗口?
HyperLinkColumn有个属性Target,将器值设置成"_blank"即可.(Target="_blank")
【ASPNETMENU】点击菜单项弹出新窗口
在你的menuData.xml文件的菜单项中加入URLTarget="_blank"
如:
<?xml version="1.0" encoding="GB2312"?>
<MenuData ImagesBaseURL="images/">
<MenuGroup>
<MenuItem Label="内参信息" URL="Infomation.aspx" >
<MenuGroup ID="BBC">
<MenuItem Label="公告信息" URL="Infomation.aspx" URLTarget="_blank" LeftIcon="file.gif"/>
<MenuItem Label="编制信息简报" URL="NewInfo.aspx" LeftIcon="file.gif" />
……
最好将你的aspnetmenu升级到1.2版
21.委托讨论
http://community.csdn.net/Expert/topic/2651/2651579.xml?temp=.7183191
http://dev.csdn.net/develop/article/22/22951.shtm
22.读取DataGrid控件TextBox值
foreach(DataGrid dgi in yourDataGrid.Items)
{
TextBox tb = (TextBox)dgi.FindControl("yourTextBoxId");
tb.Text….
}
23.在DataGrid中有3个模板列包含Textbox分别为 DG_ShuLiang (数量) DG_DanJian(单价) DG_JinE(金额)分别在5.6.7列,要求在录入数量及单价的时候自动算出金额即:数量*单价=金额还要求录入时限制为 数值型.我如何用客户端脚本实现这个功能?
〖思归〗
<asp:TemplateColumn HeaderText="数量">
<ItemTemplate>
<asp:TextBox id="ShuLiang" runat=‘server‘ Text=‘<%# DataBinder.Eval(Container.DataItem,"DG_ShuLiang")%>‘
onkeyup="javascript:DoCal()"
/>
<asp:RegularExpressionValidator id="revS" runat="server" ControlToValidate="ShuLiang" ErrorMessage="must be integer" ValidationExpression="^d+$" />
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="单价">
<ItemTemplate>
<asp:TextBox id="DanJian" runat=‘server‘ Text=‘<%# DataBinder.Eval(Container.DataItem,"DG_DanJian")%>‘
onkeyup="javascript:DoCal()"
/>
<asp:RegularExpressionValidator id="revS2" runat="server" ControlToValidate="DanJian" ErrorMessage="must be numeric" ValidationExpression="^d+(.d*)?$" />
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="金额">
<ItemTemplate>
<asp:TextBox id="JinE" runat=‘server‘ Text=‘<%# DataBinder.Eval(Container.DataItem,"DG_JinE")%>‘ />
</ItemTemplate>
</asp:TemplateColumn>
<script language="javascript">
function DoCal()
{
var e = event.srcElement;
var row = e.parentNode.parentNode;
var txts = row.all.tags("INPUT");
if (!txts.length || txts.length < 3)
return;
var q = txts[txts.length-3].value;
var p = txts[txts.length-2].value;
if (isNaN(q) || isNaN(p))
return;
q = parseInt(q);
p = parseFloat(p);
txts[txts.length-1].value = (q * p).toFixed(2);
}
</script>
24.datagrid选定比较底下的行时,为什么总是刷新一下,然后就滚动到了最上面,刚才选定的行因屏幕的关系就看不到了
page_load
page.smartNavigation=true
25.在Datagrid中修改数据,当点击编辑键时,数据出现在文本框中,怎么控制文本框的大小 ?
private void DataGrid1_ItemDataBound(obj sender,DataGridItemEventArgs e)
{
for(int i=0;i<e.Item.Cells.Count-1;i++)
if(e.Item.ItemType==ListItemType.EditType)
{
e.Item.Cells[i].Attributes.Add("Width", "80px")
}
}
26.对话框
private static string ScriptBegin = "<script language="JavaScript">";
private static string ScriptEnd = "</script>";
public static void ConfirmMessageBox(string PageTarget,string Content)
{
string ConfirmContent="var retValue=window.confirm(‘"+Content+"‘);"+"if(retValue){window.location=‘"+PageTarget+"‘;}";
ConfirmContent=ScriptBegin + ConfirmContent + ScriptEnd;
Page ParameterPage = (Page)System.Web.HttpContext.Current.Handler;
ParameterPage.RegisterStartupScript("confirm",ConfirmContent);
//Response.Write(strScript);
}
----------------------------------------
27. 将时间格式化:string aa=DateTime.Now.ToString("yyyy年MM月dd日");
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年= DateTime.Now.Year;
1.3 取当前月
int 月= DateTime.Now.Month;
1.4 取当前日
int 日= DateTime.Now.Day;
1.5 取当前时
int 时= DateTime.Now.Hour;
1.6 取当前分
int 分= DateTime.Now.Minute;
1.7 取当前秒
int 秒= DateTime.Now.Second;
1.8 取当前毫秒
int 毫秒= DateTime.Now.Millisecond;
28.自定义分页代码:
先定义变量 :public static int pageCount; //总页面数
public static int curPageIndex=1; //当前页面
下一页:
if(DataGrid1.CurrentPageIndex < (DataGrid1.PageCount – 1))
{
DataGrid1.CurrentPageIndex += 1;
curPageIndex+=1;
}
bind(); // DataGrid1数据绑定函数
上一页:
if(DataGrid1.CurrentPageIndex >0)
{
DataGrid1.CurrentPageIndex += 1;
curPageIndex-=1;
}
bind(); // DataGrid1数据绑定函数
直接页面跳转:
int a=int.Parse(JumpPage.Value.Trim());//JumpPage.Value.Trim()为跳转值
if(a<DataGrid1.PageCount)
{
this.DataGrid1.CurrentPageIndex=a;
}
bind();
29.DataGrid使用:
3.1添加删除确认:
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
foreach(DataGridItem di in this.DataGrid1.Items)
{
if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.AlternatingItem)
{
((LinkButton)di.Cells[8].Controls[0]).Attributes.Add("onclick","return confirm(‘确认删除此项吗?‘);");
}
}
}
3.2样式交替:
ListItemType itemType = e.Item.ItemType;
if (itemType == ListItemType.Item )
{
e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor=‘#FFFFFF‘;";
e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor=‘#d9ece1‘;cursor=‘hand‘;" ;
}
else if( itemType == ListItemType.AlternatingItem)
{
e.Item.Attributes["onmouseout"] = "javascript:this.style.backgroundColor=‘#a0d7c4‘;";
e.Item.Attributes["onmouseover"] = "javascript:this.style.backgroundColor=‘#d9ece1‘;cursor=‘hand‘;" ;
}
3.3添加一个编号列:
DataTable dt= c.ExecuteRtnTableForAccess(sqltxt); //执行sql返回的DataTable
DataColumn dc=dt.Columns.Add("number",System.Type.GetType("System.String"));
for(int i=0;i<dt.Rows.Count;i++)
{
dt.Rows[i]["number"]=(i+1).ToString();
}
DataGrid1.DataSource=dt;
DataGrid1.DataBind();
3.4 DataGrid1中添加一个CheckBox,页面中添加一个全选框
private void CheckBox2_CheckedChanged(object sender, System.EventArgs e)
{
foreach(DataGridItem thisitem in DataGrid1.Items)
{
((CheckBox)thisitem.Cells[0].Controls[1]).Checked=CheckBox2.Checked;
}
}
将当前页面中DataGrid1显示的数据全部删除
foreach(DataGridItem thisitem in DataGrid1.Items)
{
if(((CheckBox)thisitem.Cells[0].Controls[1]).Checked)
{
string strloginid= DataGrid1.DataKeys[thisitem.ItemIndex].ToString();
Del (strloginid); //删除函数
}
}
30.当文件在不同目录下,需要获取数据库连接字符串(如果连接字符串放在Web.config,然后在Global.asax中初始化)
在Application_Start中添加以下代码:
Application["ConnStr"]=this.Context.Request.PhysicalApplicationPath+ConfigurationSettings.AppSettings["ConnStr"].ToString();
31. 变量.ToString()
字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%
32、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2);
34.在自己的网站上登陆其他网站:(如果你的页面是通过嵌套方式的话,因为一个页面只能有一个FORM,这时可以导向另外一个页面再提交登陆信息)
<SCRIPT language="javascript">
<!–
function gook(pws)
{
frm.submit();
}
//–>
</SCRIPT> <body leftMargin="0" topMargin="0" onload="javascript:gook()" marginwidth="0" marginheight="0">
<form name="frm" action=" http://220.194.55.68:6080/login.php?retid=7259 " method="post">
<tr>
<td>
<input id="f_user" type="hidden" size="1" name="f_user" runat="server">
<input id="f_domain" type="hidden" size="1" name="f_domain" runat="server">
<input class="box" id="f_pass" type="hidden" size="1" name="pwshow" runat="server">
<INPUT id="lng" type="hidden" maxLength="20" size="1" value="5" name="lng">
<INPUT id="tem" type="hidden" size="1" value="2" name="tem">
</td>
</tr>
</form>
文本框的名称必须是你要登陆的网页上的名称,如果源码不行可以用vsniffer 看看。
下面是获取用户输入的登陆信息的代码:
string name;
name=Request.QueryString["EmailName"];
try
{
int a=name.IndexOf("@",0,name.Length);
f_user.Value=name.Substring(0,a);
f_domain.Value=name.Substring(a+1,name.Length-(a+1));
f_pass.Value=Request.QueryString["Psw"];
}
catch
{
Script.Alert("错误的邮箱!");
Server.Transfer("index.aspx");
}
35.警告窗口
/**//// <summary>
/// 服务器端弹出alert对话框
/// </summary>
/// <param name="str_Message">提示信息,例子:"不能为空!"</param>
/// <param name="page">Page类</param>
public void Alert(string str_Message,Page page)
{
page.RegisterStartupScript("","<script>alert(‘"+str_Message+"‘);</script>");
}
36.重载此警告窗口,使某控件获得焦点
/**//// <summary>
/// 服务器端弹出alert对话框,并使控件获得焦点
/// </summary>
/// <param name="str_Ctl_Name">获得焦点控件Id值,比如:txt_Name</param>
/// <param name="str_Message">提示信息,例子:"请输入您姓名!"</param>
/// <param name="page">Page类</param>
public void Alert(string str_Ctl_Name,string str_Message,Page page)
{
page.RegisterStartupScript("","<script>alert(‘"+str_Message+"‘);document.forms(0)."+str_Ctl_Name+".focus(); document.forms(0)."+str_Ctl_Name+".select();</script>");
}
37.确认对话框
/**//// <summary>
/// 服务器端弹出confirm对话框
/// </summary>
/// <param name="str_Message">提示信息,例子:"您是否确认删除!"</param>
/// <param name="btn">隐藏Botton按钮Id值,比如:btn_Flow</param>
/// <param name="page">Page类</param>
public void Confirm(string str_Message,string btn,Page page)
{
page.RegisterStartupScript("","<script> if (confirm(‘"+str_Message+"‘)==true){document.forms(0)."+btn+".click();}</script>");
}
38.重载确认对话框,点击确定触发一个隐藏按钮事件,点击取消触发一个隐藏按钮事件
/**//// <summary>
/// 服务器端弹出confirm对话框,询问用户准备转向那些操作,包括“确定”和“取消”时的操作
/// </summary>
/// <param name="str_Message">提示信息,比如:"成功增加数据,单击"确定"按钮填写流程,单击"取消"修改数据"</param>
/// <param name="btn_Redirect_Flow">"确定"按钮id值</param>
/// <param name="btn_Redirect_Self">"取消"按钮id值</param>
/// <param name="page">Page类</param>
public void Confirm(string str_Message,string btn_Redirect_Flow,string btn_Redirect_Self,Page page)
{
page.RegisterStartupScript("","<script> if (confirm(‘"+str_Message+"‘)==true){document.forms(0)."+btn_Redirect_Flow+".click();}else{document.forms(0)."+btn_Redirect_Self+".click();}</script>");
}
39.获得焦点
/**//// <summary>
/// 使控件获得焦点
/// </summary>
/// <param name="str_Ctl_Name">获得焦点控件Id值,比如:txt_Name</param>
/// <param name="page">Page类</param>
public void GetFocus(string str_Ctl_Name,Page page)
{
page.RegisterStartupScript("","<script>document.forms(0)."+str_Ctl_Name+".focus(); document.forms(0)."+str_Ctl_Name+".select();</script>");
}
40.子窗体返回主窗体
/**////<summary>
///名称:redirect
///功能:子窗体返回主窗体
///参数:url
///返回值:空
///</summary>
public void redirect(string url,Page page)
{
if ( Session["IfDefault"]!=(object)"Default")
{
page.RegisterStartupScript("","<script>window.top.document.location.href=‘"+url+"‘;</script>");
}
}
41.判断是否为数字
/**//// <summary>
/// 名称:IsNumberic
/// 功能:判断输入的是否是数字
/// 参数:string oText:源文本
/// 返回值: bool true:是 false:否
/// </summary>
public bool IsNumberic(string oText)
{
try
{
int var1=Convert.ToInt32 (oText);
return true;
}
catch
{
return false;
}
}
获得字符串实际长度(包括中文字符)
//获得字符串oString的实际长度
public int StringLength(string oString)
{
byte[] strArray=System.Text .Encoding.Default .GetBytes (oString);
int res=strArray.Length ;
return res;
}
42.将回车转换为TAB
//当在有keydown事件的控件上敲回车时,变为tab
public void Tab(System.Web .UI.WebControls .WebControl webcontrol)
{
webcontrol.Attributes .Add ("onkeydown", "if(event.keyCode==13) event.keyCode=9");
}
43.datagrid分页中如果删除时出现超出索引
public void jumppage(System.Web.UI.WebControls.DataGrid dg)
{
int int_PageLess; //定义页面跳转的页数
//如果当前页是最后一页
if(dg.CurrentPageIndex == dg.PageCount-1)
{
//如果就只有一页
if(dg.CurrentPageIndex == 0)
{
//删除后页面停在当前页
dg.CurrentPageIndex = dg.PageCount-1;
}
else
{
//如果最后一页只有一条记录
if((dg.Items.Count % dg.PageSize == 1) || dg.PageSize == 1)
{
//把最后一页最后一条记录删除后,页面应跳转到前一页
int_PageLess = 2;
}
else //如果最后一页的记录数大于1,那么在最后一页删除记录后仍然停在当前页
{
int_PageLess = 1;
}
dg.CurrentPageIndex = dg.PageCount – int_PageLess;
}
}
}
有时候想为我们的网页提供多语言支持,如果一种语言用一张网页来做实在太麻烦了,幸好Google提供了语言工具功能,下面介绍如何利用它来实现网页多种语言之间的转换。
lan.htm
<form>
<select name="lan">
<option value="en|de">英语 翻译成 德语</option>
<option value="en|es">英语 翻译成 西班牙语</option>
<option value="en|fr">英语 翻译成 法语</option>
<option value="en|it">英语 翻译成 意大利语</option>
<option value="en|pt">英语 翻译成 葡萄牙语</option>
<option value="en|ja">英语 翻译成 日语 BETA</option>
<option value="en|ko">英语 翻译成 朝鲜语 BETA</option>
<option value="en|zh-CN" >英语 翻译成 中文(简体) BETA</option>
<option value="de|en">德语 翻译成 英语</option>
<option value="de|fr">德语 翻译成 法语</option>
<option value="es|en">西班牙语 翻译成 英语</option>
<option value="fr|en">法语 翻译成 英语</option>
<option value="fr|de">法语 翻译成 德语</option>
<option value="it|en">意大利语 翻译成 英语</option>
<option value="pt|en">葡萄牙语 翻译成 英语</option>
<option value="ja|en">日语 翻译成 英语 BETA</option>
<option value="ko|en">朝鲜语 翻译成 英语 BETA</option>
<option value="zh-CN|en">中文(简体) 翻译成 英语 BETA</option>
<input style="FONT-SIZE: 12px" type="button" value="Go->" name="Button1" onClick="javascript:window.open(‘translate.asp?urls=‘+document.location+‘&lan=‘+lan.value,‘_self‘,‘‘)">
</select>
</form>
lan.htm中的内容用来选择要翻译的语言包括原来的语言和要翻译成的语言。我们只需要将lan.htm中的内容拷到提供多语言翻译的页面中就可以了。
translate.asp
<html>
<head>
<title>在线翻译</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<%
‘on error resume next
‘ 如果网速很慢的话,可以调整以下时间。单位秒
Server.ScriptTimeout = 999999
‘========================================================
‘字符编码函数
‘========================================================
Function BytesToBstr(body,code)
dim objstream
set objstream = Server.CreateObject("adodb.stream")
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset =code
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function
‘取行字符串在另一字符串中的出现位置
Function Newstring(wstr,strng)
Newstring=Instr(lcase(wstr),lcase(strng))
if Newstring<=0 then Newstring=Len(wstr)
End Function
‘替换字符串函数
function ReplaceStr(ori,str1,str2)
ReplaceStr=replace(ori,str1,str2)
end function
‘=====================================================
function ReadXml(url,code,start,ends)
set oSend=createobject("Microsoft.XMLHTTP")
SourceCode = oSend.open ("GET",url,false)
oSend.send()
ReadXml=BytesToBstr(oSend.responseBody,code )
if(start="" or ends="") then
else
start=Newstring(ReadXml,start)
ReadXml=mid(ReadXml,start)
ends=Newstring(ReadXml,ends)
ReadXml=left(ReadXml,ends-1)
end if
end function
dim urlpage,lan
urlpage=request("urls")
lan=request("lan")
%>
<form method="post" action="translate.asp">
<input type="text" name="urls" size="150" value="<%=urlpage%>">
<input type="hidden" name="lan" value="<%=lan%>">
<input type="submit" value="submit">
</form>
<%
dim transURL
transURL="http://216.239.39.104/translate_c?hl=zh-CN&ie=UTF-8&oe=UTF-8&langpair="&server.URLEncode(lan)&"&u="&urlpage&"&prev=/language_tools"
if(len(urlpage)>3) then
getcont=ReadXml(transURL,"gb2312","","")
response.Write(getcont)
end if
%>
</body>
</html>
translate.asp实现翻译功能,这是利用google的语言工具实现的。
注意,因为提供多语言支持,所以translate.asp文件所用的编码是支持所有字符的"utf-8" 。
第一招、屏幕保护
在Windows中启用了屏幕保护之后,只要我们离开计算机(或者不操作计算机)的时间达到预设的时间,系统就会自动启动屏幕保护程序,而当用户移动鼠标或敲击键盘想返回正常工作状态时,系统就会打开一个密码确认框,只有输入正确的密码之后才能返回系统,不知道密码的用户将无法进入工作状态,从而保护了数据的安全。
提示:部分设计不完善的屏幕保护程序没有屏蔽系统的“Ctrl+Alt+Del”的组合键,因此需要设置完成之后测试一下程序是否存在这个重大Bug。
不过,屏幕保护最快只能在用户离开1分钟之后自动启动,难道我们必须坐在计算机旁等待N分钟看到屏幕保护激活之后才能再离开吗?其实我们只要打开Windows安装目录里面的system子目录,然后找到相应的屏幕保护程序(扩展名是SCR),按住鼠标右键将它们拖曳到桌面上,选择弹出菜单中的“在当前位置创建快捷方式”命令,在桌面上为这些屏幕保护程序建立一个快捷方式。
此后,我们在离开计算机时双击这个快捷方式即可快速启动屏幕保护。
第二招、巧妙隐藏硬盘
在“按Web页”查看方式下,进入Windows目录时都会弹出一句警告信息,告诉你这是系统文件夹如果“修改该文件夹的内容可能导致程序运行不正常,要查看该文件夹的内容,请单击显示文件”,这时单击“显示文件”就可以进入该目录了。
原因是在Windows根目录下有desktop.ini和folder.htt两个文件作祟。将这两个文件拷贝到某个驱动器的根目录下(由于这两个文件是隐藏文件,之前必须在文件夹选项中单击“查看”标签,选择“显示所有文件”,这样就可以看见这两个文件了)。再按“F5”键刷新一下,看看发生了什么,是不是和进入Windows目录时一样。
接下来我们用“记事本”打开folder.htt,这是用HTML语言编写的一个文件,发挥你的想像力尽情地修改吧。
如果你不懂HTML语言也没关系,先找到“显示文件”将其删除,找到“修改该文件夹的内可能导致程序运行不正常,要查看该文件夹的内容,请单击显示文件”,将其改为自己喜欢的文字,例如“安全重地,闲杂人等请速离开”。
将“要查看该文件夹的内容,请单击”改为“否则,后果自负!”,接着向下拖动滑块到倒数第9行,找到“(file://%TEMPLATEDIR%wvlogo.gif)”这是显示警告信息时窗口右下角齿轮图片的路径,将其改为自己图片的路径,例如用“d: upian upian1.jpg”替换“//”后面的内容,记住这里必须将图片的后缀名打出,否则将显示不出图片。
当然,你还可以用像Dreamweaver、FrontPage这样的网页工具做出更好的效果,然后只要将原文件拷贝到下面这段文字的后面,覆盖掉原文件中“~”之间的内容就可以了。
*ThisfilewasautomaticallygeneratedbyMicrosoftInternetEXPlorer5.0
*usingthefile%THISDIRPATH%folder.htt.
保存并退出,按“F5”键刷新一下,是不是很有个性?接下来要作的就是用“超级兔子”将你所要的驱动器隐藏起来,不用重新启动就可以欣赏自己的作品了。最后告诉大家一招更绝的,就是干脆将folder.htt原文件中“~”之间的内容全部删除,这样就会给打开你的驱动器的人造成一种这是一个空驱动器的假象,使其中的文件更安全。
第三招、禁用“开始”菜单命令
在Windows2000/XP中都集成了组策略的功能,通过组策略可以设置各种软件、计算机和用户策略在某种方面增强系统的安全性。运行“开始→运行”命令,在“运行”对话框的“打开”栏中输入“gpedit.msc”,然后单击“确定”按钮即可启动WindowsXP组策略编辑器。
在“本地计算机策略”中,逐级展开“用户配置→管理模板→任务栏和开始菜单”分支,在右侧窗口中提供了“任务栏”和“开始菜单”的有关策略。
在禁用“开始”菜单命令的时候,在右侧窗口中,提供了删除“开始”菜单中的公用程序组、“我的文档”图标、“文档”菜单、“网上邻居”图标等策略。清理“开始”菜单的时候只要将不需要的菜单项所对应的策略启用即可,比如以删除“我的文档”图标为例,具体操作步骤为:
1)在策略列表窗口中用鼠标双击“从开始菜单中删除我的文档图标”选项。
2)在弹出窗口的“设置”标签中,选择“已启用”单选按钮,然后单击“确定”即可。
第四招、桌面相关选项的禁用
WindowsXP的桌面就像你的办公桌一样,有时需要进行整理和清洁。有了组策略编辑器之后,这项工作将变得易如反掌,只要在“本地计算机策略”中展开“用户配置→管理模板→桌面”分支,即可在右侧窗口中显示相应的策略选项。
1)隐藏桌面的系统图标
倘若隐藏桌面上的系统图标,传统的方法是通过采用修改注册表的方式来实现,这势必造成一定的风险性,采用组策略编辑器,即可方便快捷地达到此目的。
若要隐藏桌面上的“网上邻居”和“InternetEXPlorer”图标,只要在右侧窗口中将“隐藏桌面上网上邻居图标”和“隐藏桌面上的InternetEXPlorer图标”两个策略选项启用即可。如果隐藏桌面上的所有图标,只要将“隐藏和禁用桌面上的所有项目”启用即可。
当启用了“删除桌面上的我的文档图标”和“删除桌面上的我的电脑图标”两个选项以后,“我的电脑”和“我的文档”图标将从你的电脑桌面上消失了。如果在桌面上你不再喜欢“回收站”这个图标,那么也可以把它给删除,具体方法是将“从桌面删除回收站”策略项启用。
2)禁止对桌面的某些更改
如果你不希望别人随意改变计算机桌面的设置,请在右侧窗口中将“退出时不保存设置”这个策略选项启用。当你启用这个了设置以后,其他用户可以对桌面做某些更改,但有些更改,诸如图标和打开窗口的位置、任务栏的位置及大小在用户注销后都无法保存。
第五招、禁止访问“控制面板”
如果你不希望其他用户访问计算机的控制面板,你只要运行组策略编辑器,并在左侧窗口中展开“本地计算机策略→用户配置→管理模板→控制面板”分支,然后将右侧窗口的“禁止访问控制面板”策略启用即可。
此项设置可以防止控制面板程序文件的启动,其结果是他人将无法启动控制面板或运行任何控制面板项目。另外,这个设置将从“开始”菜单中删除控制面板,同时这个设置还从Windows资源管理器中删除控制面板文件夹。
提示:如果你想从上下文菜单的属性项目中选择一个“控制面板”项目,会出现一个消息,说明该设置防止这个操作。
第六招、设置用户权限
当多人共用一台计算机时,在WindowsXP中设置用户权限,可以按照以下步骤进行:
1)运行组策略编辑器程序。
2)在编辑器窗口的左侧窗口中逐级展开“计算机配置→Windows设置→安全设置→本地策略→用户权限指派”分支。
3)双击需要改变的用户权限,单击“添加用户或组”按钮,然后双击想指派给权限的用户账号,最后单击“确定”按钮退出。
第七招、文件夹设置审核
WindowsXP可以使用审核跟踪用于访问文件或其他对象的用户账户、登录尝试、系统关闭或重新启动以及类似的事件,而审核文件和NTFS分区下的文件夹可以保证文件和文件夹的安全。为文件和文件夹设置审核的步骤如下:
1)在组策略窗口中,逐级展开右侧窗口中的“计算机配置→Windows设置→安全设置→本地策略”分支,然后在该分支下选择“审核策略”选项。
2)在右侧窗口中用鼠标双击“审核对象访问”选项。
3)用鼠标右键单击想要审核的文件或文件夹,选择弹出菜单的“属性”命令,接着在弹出的窗口中选择“安全”标签。
4)单击“高级”按钮,然后选择“审核”标签。
5)根据具体情况选择你的操作:
倘若对一个新组或用户设置审核,可以单击“添加”按钮,并且在“名称”框中键入新用户名,然后单击“确定”按钮打开“审核项目”对话框。
要查看或更改原有的组或用户审核,可以选择用户名,然后单击“查看/编辑”按钮。
要删除原有的组或用户审核,可以选择用户名,然后单击“删除”按钮即可。
6)如有必要的话,在“审核项目”对话框中的“应用到”列表中选取你希望审核的地方。
7)如果想禁止目录树中的文件和子文件夹继承这些审核项目,选择“仅对此容器内的对象和/或容器应用这些审核项”复选框。
注意:必须是管理员组成员或在组策略中被授权有“管理审核和安全日志”权限的用户可以审核文件或文件夹。在WindowsXP审核文件、文件夹之前,你必须启用组策略中“审核策略”的“审核对象访问”。否则,当你设置完文件、文件夹审核时会返回一个错误消息,并且文件、文件夹都没有被审核。
越狱第三季好像已经开播了,但是目前只拿得到这个17分钟的Preview。
有兴趣的朋友可以用这个BT种子Down下来Preview一下先——
附件:prison_break_s03e01_17_minutes_preview.3783456.tpb.zip(19982 Byte)
美国ZIP Code 一览表
邮编 城市(city) 州(state)
12201 Albany NewYork(NY)
30301 Atlanta Georgia(GA)
21401 Annapolis Maryland(MD)
21201 Baltimore Maryland(MD)
35201 Birmingham Alabama(AL)
14201 Buffalo NewYork(NY)
60601 CHICAGO Illinois(IL)
45201 Cincinnati Ohio(OH)
44101 Cleveland Ohio(OH)
43085 Columbus Ohio(OH)
71953 Dallas Arkansas(AR)
80002 Denver Colorado(CO)
99701 Fairbanks Alaska(AK)
19019 Philidelphia pennsylvania(PA)
96801 Honolulu Hawii(HI)
46201 Indianapolis Indiana(IN)
32099 Jacksonville FLORIDA(FL)
64101 Kansas City Missouri(MO)
90001 Los Angeles California(CA)
89101 Las Vegas Navada(NV)
55199 Minneapolis Minnesota(MN)
10001 New York NewYork(NY)
70112 New orleaans Louisana(LA)
68046 Omaha Nebraska(NE)
85001 Phoenix Arizona(AZ)
15122 Pittsburgh pennsylvania(PA)
84101 Salt Lake City Utah(UT)
94203 Sacramento California(CA)
92101 San Diego California(CA)
94101 San Francisco California(CA)
95101 San Jose California(CA)
55101 Saint Paul Minnesota(MN)
63101 Saint Louis Missouri(MO)
98101 Seattle Washington(WA)
33601 Tampa FLORIDA(FL)
清脂减肥胶囊400mg*60粒
差评 [详情] 骗人,我拍的是一瓶。他却发一颗,那有吃1颗就减肥的,顺属欺诈2007.04.03 19:50
解释:哦对不起,到昨天我才知道,我用的这个快递业务员是属耗子的!
夏天适用时尚提包
差评 [详情]卖家服务不好,虽然我知道你很忙,但每次也不必和我说话如此简单吧,不是恩,就是好,一个字一个字的说,太不尊重人了,所以给个差评。2007.01.10 18:22
解释:呸
精美欧洲进口巧克力
差评 [详情]巧克力晚了3天才到,而且到的时候都碎了,害我跟男友吵了一架2007.02.12 15:32
解释:打是亲,骂是爱,实在不行下脚踹。
中药 美颜纤体粥
差评 [详情] 完全没有效果!!!!! 2006.09.14 08:48
解释:完全没说实话!
考拉玩具树袋抱抱熊
差评 [详情] 邮寄单上名字写错了2006.11.01 02:42
解释:
晕,这样也给差评,那我就多写几遍好了。。李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,李金花,
马鞭草–瘦身,治疗头痛
差评 [详情] 为什么你的马鞭草和别人家的不一样?2007.02.02 14:21
解释:为什么你和别人长的不一样?
闹钟/床头钟/圆形饼干钟表
差评 [详情] 由于频频上当,好久都没有在网上购物了,这次还是忍不住,买了这块表,结果又上当了。你们究竟在干什么?2005.02.13 14:29
解释:马三立说了:“逗你玩!”
中式淑女唐装折扣特价
差评 [详情] 这么久了,还是不理我,只好给你个差评啦!!!2007.01.23 19:44
解释:冤哪,我生病住院了,刚刚从医院回来,看来又得住院去了。
野生榛子
差评 [详情] 榛子壳很硬,吃完这一斤,我的牙都快掉了,为了增加重量多收邮费,还往箱里塞一块破铁。2006.12.03 01:51
解释:
你细看那块铁,中间是否有个螺丝,再往下看,是不中间有条缝,沿着这个缝用力分开—这块破铁就是给你夹榛子壳用的特制钳子!
莱挺宝天然丰胸美
差评 [详情] 此广告与实际效果不相符,请大家擦亮眼睛。2006.09.13 00:02
解释:此评价与实际情况不相符,请大家擦亮眼睛。
草本配方-安全减肥
差评 [详情] 实际服用的情况与网上的描述根本不一样,也没有说明书上的效果,服用后心慌,厌食,睡不着,一点没作用 2007.03.22 14:205
解释:撒谎~~副作用和描述完全吻合!
物品名称: 韩国时尚最新款式性感MM上衣
差评:不错,我喜欢!
解释:难道你老公不喜欢吗?
物品名称:丰盛水果篮–12种水果
中评 [详情] 部分水果还是太熟了2006.05.10 14:49
解释:按你妈妈的要求发了熟一点的果果,收到后只能放3,5天的,放冰箱时间能长一点.(记住下次要你妈妈做评价。)
物品名称:益达口香糖
差评 [详情] 我要的是口香糖,但结果送来了一块象白乎乎的东西,甜死.无法吃.2006.04.04 16:56
解释:晕死,那是我送你的白巧克力啊, 口香糖包在下面报纸里面呀,不会扔垃圾桶了吧?快去找找
物品名称:玛姬儿纯棉压缩纸膜
中评*未使用支付宝成功交易 [详情] 没什么
解释:没什么是什么!!什么是没什么!!没什么给中评做什么!!什么什么人!!狂晕!!!
物品名称:欧诗漫—30g珍珠水嫩保湿眼霜
差评 [详情] 怎样退货?
解释:冤枉啊,拍下后,款都没有付,我都没发货,谈什么退货?
物品名称:带核话梅500克
中评 [详情] 怎莫脆梅变话梅了呢?和我要的完全不相符哦2006.03.19 20:19
解释:大概时间长干了吧,一样的,也好吃的。
物品名称:*耳饰*小鸟耳钉
中评 [详情] 好评点了怎么没反应,试试中评可以不。
解释:怎么可以这样啊,哎,你的电脑可以升极拉:( 非常非常郁闷
物品名称:水晶球
差:球球挺好,照片上的底坐为啥不给我?
解释:冤枉!那是我LG的烟灰缸。
中评 虽然还是失败了~~但是`还是谢谢你~~ [详情] –2004.08.29 20:45
解释:失败什么?是你拍下不买的哎~~真受不了
差评: 对不起我不换好评的. [详情] –2004.04.29 15:22
解释: 我什么时候和你换好评了。真是的!缺德!!
差评 : 汇款之前:热心+耐心+诚心,哄得我很开心;汇款之后:冷心+狠心+绝心,骗得我好伤心。购买的YY跟收到的YY完全不一样(款式和颜色)。换货不肯,退货不行,退款没门。几十元的信用都没有,这样的卖家,遇上一个就足够了。网上购物,还得长个心眼。不知道卖家会编造一个怎样的理由,自圆其说。[详情] –2004.09.10 22:04
解释:小姐你是不是发错了啊!!
中平:珍珠项链不错,戒指也挺好看,抱枕手感很好,手机挂件也不错,都挺喜欢的,就是卖家态度在好点就好了。
解释:您买的我店里一样也没有呀?我猜您一定是个很有钱的人,一下子买了这么多东西……
镀白金项链*9元~
中评 我女朋友的评价是“一般”
解释:你给她买个钻戒看看!
好评 态度不好,东西还行, [详情] –2004.12.03 13:31
解释:我什么时候对你态度不好了??????????莫名其妙 是不是要我说我爱你 觉得态度才好啊!?
中评:我没买
解释: 唉!
前言
笔者在飞行过程中体会到:由于不知道到底配置才能符合3D飞行的需要,期间也花了不少冤枉钱,有鉴于此,笔者提供一些个人在选择直升机和其配置的经验给各位玩家参考,工欲善其事,必先利其器,选对了配件,相信一定能事半功倍,成为PRO级的3D玩家绝不是梦想。
遥控器与配置
在遥控器方面笔者建议最好能选择八通道以上(含八通道),因为八通道以上的遥控器在油门曲线与螺距曲线调整功能方面较为完善,且都有多个混控功能,可用于动作(AILE,EVEL,RUDO)对油门(THRO)混控,或针对有僻性的直升机做混控来改善僻性在伺服器方面,由于3D飞行时动作剧烈,伺服器的负荷较重,因此笔者建议在50级以下直升机上最好使用扭力4公斤以上的伺服器,60级以上直升机则使用扭力5公斤以上的伺服器。伺服器有足够的扭力才能机体应有的性能,若使用扭力不足的伺服器勉强飞行,不但无法发挥直升机应有的性能,甚至可能导致伺服器的损坏而造成更多的损失。
在尾舵伺服器方面比较需要的是速度,速度越快的伺服器越能有效的发挥陀螺仪的效果,当然尾舵伺服器的选择也不能仅考虑速度而已,扭力也不应完全忽视,笔者曾多次见过飞友使用扭力不足的尾舵伺服器在强风下试着做尾仪自旋的动作,不但无法将尾仪顺利自旋,甚至在多次尝试后当场把伺服器给损坏了,所以建议使用扭力3公斤以上的伺服器来控制尾舵会比较保险,尾舵伺服器的选择除了考虑其速度与扭力两项因素以外,更重要的是与陀螺仪是否能搭配,有些陀螺仪有指定使用专用的伺服器,如FUTABA和GY-601陀螺仪就必须搭配5291的伺服器,JR的G6000T陀螺仪就得搭配8700G伺服器等……
在陀螺仪方面笔者强烈建议使用具有锁定功能的陀螺仪,因为3D飞行时经常需要做各种倒退,横滑的动作,为了能更精准且轻松的掌握尾陀,锁定式陀螺仪可说是3D飞行不可缺的配置。
主旋翼的选择
由于3D飞行时经常使机体处于倒飞状态,所以主旋翼的翼型最好能采用全对称翼型,让倒飞时能拥有较好的升力,且倒飞时所需的螺距也较容易测量,不过在选择主旋翼时仍须注意,虽然市面上所贩售的主旋翼包装上都会注明翼型为全对称或准对称,但实际上仍有少部分标示翼型不符的情况,外包装标示为全对称但实际上却是半对称的主旋翼,选择时特别注意,至于材质方面的选择则是以碳纤维主旋翼较佳,因为碳纤维一般都比玻璃纤维或木制主旋翼要硬,在执行剧烈的3D动作时比较不易变形,动力较能发挥,笔者在飞行场中已看过多次因主旋翼硬度不够,在执行剧烈动作或转速不足的情况下打到尾管,甚至是在高转速的情况下主旋翼从翼跟位置裂开而射出,直升机就好像在空中爆炸似的解体,修复直升机的费用恐怕比一组碳纤维主旋翼贵多了,所以基于安全上考虑,笔者建议在做3D飞行时,尽量避免使用木制主旋翼,尤其是50级以上的机种,因为其大动力实在不是木制主旋翼所能承受的……安全第一嘛。虽然说碳纤维主旋翼是3D飞行时的最佳选择,但在选择时仍需注意,同样是碳纤维的主旋翼,不同厂牌或规格在硬度上仍有不小的差距,甚至有些号称碳纤维制的主旋翼却比玻璃纤维制的主旋翼还软,所以在购买时还是多做比较,避免买到名不符实的“ ”纤维主旋翼。 主旋翼夹头与固定螺丝直升机在3D飞行时的主旋翼转速几乎都在1800RPM以上,此时主旋翼夹头与主旋翼的固定螺丝承受的拉力是相当大的,若材质不够坚固在飞行中就有可能会发生断裂的情形,一旦夹头或固定螺丝断裂,那一台完的直升机就有可能再变回套件……目前大部份30级的直升机都使用直径4mm的固定螺丝,较不会有断裂的情形发生,不过仍有少部份的机种还是采用直径3mm的固定螺丝,笔者建议尽量避免使用它来做剧烈的3D飞行。 现在市面上大部分的50级直升机都是由30级改装而来的(改装齿轮比、尾管长度、主旋翼长度等),其主旋翼夹头并没有改装,虽然在30级上搭配长度550mm的主旋翼执行高转速的3D飞行没有问题,但在50级直升机上搭配600mm的主旋,主旋翼的重量加重且引擎马力也加大,主旋翼夹头就有可能因而断裂,笔者在飞行场中见过不少这种例子,原本是30级的直升机在操各种剧烈的动作都没发生问题,直接改装成50级后第一趟飞行就下课了,还没感受到大动力所带来的乐趣就先瘦了荷包,所以笔者建议各位玩家对于部份主旋翼夹头强度的机种,最好能更换为金属夹头,虽然价格上较为昂贵,但绝对比修理直升机来的便宜。
十字盘控制模式
目前市面上较常见的十字盘除了传统的90度版以外,大概就是120度的CCPM版了,这两种十字盘控制模式在飞行特性有些许的不同,尤其是螺距的反应速度,CCPM版的螺距反应比传统版的反应要快,对于喜欢将直升机瞬间弹射出去的玩家是再适合不过的了,笔者个人也较喜好这种飞行特性,不过此种十字盘控制模式在组装上有较多的限制,如三个控制十字盘的伺服器必须是一样的规格、伺服器臂的长度、行程等都需一致,面传统十字盘模式就无此种限制了,所以在组装与设定上较为单纯,一般初学的玩家也较容易了解。
尾旋翼传动方式
尾旋翼的传动方式一般可分为轴传动与皮带传动两种,两种传动方式各有其优缺点,皮带传动的优点是噪音小、维修方便且较便宜,便缺点是动力损耗较大,尤其在30级直升机上更为明显,至于轴传动的优点则是传动效率较佳,所以动力损耗较小,但由于多了一级齿轮,自然噪音就比较大,而摔机时由于传动轴受损的机率较皮带受损的机率高,因此维修成本也较高,这是轴传动的缺点。就笔者个人经验来说,在30级直升机上,由于引擎动力相当有限,皮带张力对它来说是一明显的负担,尤其是张力调的太紧的时候,动力损耗就会更明显,这对于需要大动力的3D飞行来说是一项不利的因素,因此对于这种动力较小的直升机,若仅就性能方面的考量,笔者个人较喜好尾旋翼采用轴传动的方式,因为其动力损耗较少,直升机会有较好的动力表现,且在熄火降落方面也会有帮助。不过对于50级以上的机种来说,皮带传动所能损耗掉的动力就不是那么明显了,因为50级以上的直升机拥有较充足的动力,皮带张力所损耗掉的动力对它而言相当有限,不至于影响到飞行性能,反倒显现出其低噪音与低维修成本的两个优点,一般而言,50级以上的直升机其维修成本较高,所以轴传动与皮带传动在维修方面的费用差距颇大,若仅就经济方面来考量,笔者个人觉得尾旋翼采用皮带传动的直升机飞起来会比较没有心理压力,尤其是在飞60级以上直升机时,这种感会更明显。
熄火降落装置
目前市面上仍有部分直升机无熄火降落装置,笔者建议玩家们能将此装置加装上去,因为若能以精彩的熄火降落来作为整趟飞行动作的结束,那将使整趟飞行更完美。一般熄火降落装置可分为磨擦式与分离式齿盘两种,笔者个人不建议使用磨擦式的熄火降落装置,因为在引擎熄火后,若要再执行尾舵的动作,如尾舵自旋熄火降落、倒退熄火降落等动作时,往往会产生打滑的现象,造成尾旋翼转数不足而难以完成此类动作,因此建议使用分离式齿盘的熄火降落装置,这种装置的尾旋翼传动确实,虽然对主旋翼来说会产生较大的负荷,但唯有此种装置才能在引擎熄火后还能确实操控尾舵,完成许多难度较高的熄火降落动作。
垂直及水平尾翼面积由于3D飞行中经常会有高速倒退、高速横向滑动、尾舵快速自旋等动作,这时垂直及水平尾翼的面积若是太大,反而会使得这些动作难以顺利完成,如水平尾翼面积太大会造成高速倒退时的直线航道较难掌控,而垂直尾翼面积太大则会造成机体在横向滑动或在执行尾舵动作时的尾舵负荷增加,因此若能适当的缩小垂直水平尾翼的面积,将更加有利于3D飞行,现在市面上有许多机种都有“中空”的垂直及水平尾翼设计,这样的设计较有利于3D飞行。
加速管
就笔者个人经验而言,在原厂直升机套件中所附的排气管,对于引擎动力的提升效果实在有限,而且消音效果也不是很理想,要应会剧烈的3D飞行显得有点勉强,因此笔者认为选择一支适当的加速管是必要的,然而目前市面上的加速管种类繁多,效果不一,建议在选购时最好能多请教一些老经验的玩家,避免买到重看不重用的消音器,笔者个人较喜好两截式的加速管,因为这类的加速管在高速方面都有不错的表现,但在中低速的稳定性方面较不易调整,有时甚至得搭配适当长度的弯管才能发挥效果,调整上较为麻烦,虽然动力大但不见得适合每一个人。
螺距总行程
由于直升机在3D飞行时所需的螺距总行量至少必须达到23度,因为在3D飞行模式中螺距行程为+10度到-10度,而熄火降落时最大螺距为+13度,所以说,一台要用来做3D飞行的直升机其主旋翼的总螺距最好能超过23度,如此才能应付3D飞行时所有的动作,因此玩家在选择直升机时一定得多注意这点,才不会去买到一台因为螺距不足而导致要做3D就不能做熄火降落、要做熄火降落就不能做3D的直升机,真可说是先天不足引发后天失调,买到这种直升机,技术要进步恐怕会有点……慢
锂电池最常用的有锂聚合物(Li-Poly)与锂离子(Li-ion) 这两种,与我们常用在模型上的镍镉(Ni-Cd)与镍氢(Ni-MH)电池有相当大的差异。
一、充电/安全 重要!!!
若你是飞行的新手,记住“不要”使用聚合物锂电池,没有任何例外,继续读下去就知道这么规定的原因了。
至于其它重要的有:锂电池充电的方法与传统镍镉及镍氢电池有很大不同,要对锂电池充电必须使用专门为锂电设计的锂电专用充电器。
一般而言如果锂电充电器可以正确计算掌握锂电池的组成Cell数(指的是一大条锂电是由几颗单颗小锂电组成的),则可以适应离子电池(Li-ion)和聚合物锂电池(Li-Poly)的充电需要。记住千万不要用只能充镍镉(Ni-Cd)与镍氢(Ni-MH)电池的充电器来对锂电充电,那非常的危险!
对锂电池充电是使用锂电时最危险的一个部分,当在对锂电充电时请极端地注意锂电的充电情况。对锂电充电器设定正确的充电电压或正确的电池颗数是十分重要的,若没做好锂电充电器的设定,可能会造成锂电池的过充而产生爆炸与大火。已经有好几回火灾是由锂电池所引起的。请以负责任的态度进行锂电池的充电工作。 以下是一些锂电池在充电与使用上的指导原则:
1.使用经过验证可安全使用的锂电专用充电器
2.确定你已经正确的设定了锂电专用充电器上面的电压或是电池颗数的参数,如果你不知道如何进行设定,请去买一个你知道如何进行设定的锂电充电器,不然就是不要用锂电,以免在充电时发生爆炸。 3.在对锂电进行充电时一定要有人在场,不要在无人在场时对锂电进行充电,曾经有人因为这个原因把房子跟车子给烧掉了,切记切记。
4.在充电时请准备一个合适的平台放置你的充电器以及锂电,以确保当锂电因为意外发生爆炸或是火灾时不会造成任何的损坏和危险。要预留防火空间,准备消防沙或准备灭火器、壁炉等都是好的选择。
5.请不要用超过1C的电流进行充电,我个人曾经因为违反这一条规则而在家里造成火灾。
6.若在充电时有其中一颗锂电发生膨胀的现象,当它还在发热时千万不要搓破它。把锂电池放在盐水中,等到有问题的cell冷却之后,小心地把锂电池组的外皮剥掉然后再把电池组放回盐水中,之后才能安全地把有问题的锂电丢到回收桶中。
7.非常重要:当你用锂电飞行不幸摔机,此时锂电池是被放置在飞机中,或许电池看起来没有受损。不过仍要请您千万小心地把锂电池从飞机上拆下,然后静置在安全的地方至少20分钟以上以确保锂电真的没有受损无爆炸之虞。有好几起火灾例子是在发生摔机后,机主把飞机尸体丢在车子里,然后受损的锂电在车内发生爆炸把整台车子都烧光光。
8.请在开放通风的地方进行锂电的充电,因为若是锂电池真的发生破裂跟爆炸,则危险有害的烟雾及物质会从电池外泄出来。
9.当您使用锂电池进行飞行或是充电时,请准备一桶沙子在旁边,当发生锂电爆炸时用沙子灭火这是最经济有效的方法,这个作法非常的便宜而且是必须的。
10.请了解这些电池是有危险性的,不要有“我不会那么衰,这不会发生在我身上”的想法,否则搞不好下一个在着火的房子或车子里拯救妻儿的人就是你,我非常重视这点。
至此我们已经涵盖一些重点的主题,再来讲点比较不那么严重的:
二、什么是锂聚合电池?
锂聚合电池被应用在很多电子装置上。随便举例就有手机、笔记本计电脑、PDA和随身听等。不过大部分的锂电池不是被设计来用在遥控模型上的,我们把锂电用在遥控模型上,这并未在这些锂电池当初被设计出来所考量的应用用途之内。锂聚合电池与锂离子电池相似的是单颗电压通常都是3.6V,不过与锂离子电池不同的是锂离子电池外壳通常是硬壳的,而锂聚合物电池的外壳则是软壳的。一般的锂聚合物电池是薄长方形并且在上方有两个突出点,一为正极一为负极。
我们使用锂电池的原因是锂电池显著比镍镉或是镍氢电池在重量上轻很多,这可以使我们的飞机飞得更久更好。此外,聚合物锂电池的安全性比金属外壳的液态锂离子电池的安全性更高,聚合物锂电池不爆炸、不燃烧,使用非常安全。但我们还是要提醒您小心使用,短路也是造成间接燃烧的可能因素!
三、电压与电池数的计算
锂聚合物电池在充电与放电时的特性与镍镉(Ni-Cd)与镍氢(Ni-MH)电池有所不同,当单颗锂电池充饱电时的电压约为4.2V,全放电完时的单颗电压则约为3V。我们在使用上锂电池时要保持单颗锂电池的电压介于3~4.2V之间,过充与过放皆会对锂电池造成伤害。不要忘记设定你的电子变速器的截止放电电压以避免锂电过放。
如果您有使用过镍镉(Ni-Cd)与镍氢(Ni-MH)电池进行飞行,由于单颗镍镉(Ni-Cd)与镍氢(Ni-MH)电池的电压为1.2V,而锂电池则是3.6V,因此您必需进行一些换算。如果原来是用6~7颗镍镉或镍氢电池,则可用两颗锂电池串联以取得近似的电压。如果原来是用10~11颗镍镉或镍氢电池,则可用三颗锂电池串连以取得近似的电压。
有许多飞友原来是用8颗镍镉或镍氢电池,则会有卡在该选择两颗或是三颗锂电池串连以取得近似的电压的选择之中。以我的经验来说,最好选择的方法应该是要先了解之前在使用镍镉或镍氢电池飞行时,所需消耗的功率瓦数(W),再透过搭配使用锂电、马达、螺旋桨以取得进似的功率输出。
举例来说:如果你之前的飞机是用400级的马达,使用8颗镍镉或镍氢电池(9.6V),飞行时电流为10安培。则你每秒需要损耗9.6×10 = 96 (W)瓦的功率,因此若您使用两颗锂电池(7.2V),则你可能得换桨飞行,电流为13安培;或是使用三颗锂电池(10.8V),并换桨飞行,让电流为8.9安培。诸如此类的搭配估计需要一点经验,以求得最好的搭配效果,不过计算功率输出以此为基准来进行估计是一个不错的开始方式。
四、利用3S4P(3串4并)来取得10C的锂电池电流放电能力
电池放电的速度取决于瞬间所能提供的最大电流输出。电流输出通常使用“C”这个字来估计,C代表的是:60分钟/电池放电完毕所需分钟。
举例来说1C代表这颗电池花1小时(60分钟)把电力放完;2C代表这颗电池花0.5小时(30分钟)把电力放完。
所有的电池都是用“毫安培小时(mAh)”来计算电池的容量。假设一颗电池标示2000mAh,则代表当我们使用2000mA(等于2A)的电流对其进行放电时,其需要花费一小时才能放电完毕。电池在使用时是以多少C来进行放电跟电池的容量有关。若一颗2000mah的电池以2A的电流放电,则是属于1C放电;若以6A的电流放电,则是属于3C放电(6A = 6000mA = 2000mA * 3)。
目前的锂电池科技尚无法让锂电池拥有像镍镉或镍氢电池般的高C数大电流放电能耐,因此许多锂电池组透过并联的方式取得更高的瞬间放电电流的能力。当两组电池透过正极接正极、负极接负极的方式并联成一颗更大的电池时,此时电池的电压不变、电容量则倍增成两倍。如果您有两颗2000mAh的电池,如果您将它们进行并联,则效果相当于1颗4000mAh的电池组。这组4000mAh的电池组其最高放电C数跟原来2000mAh的电池是一样的,不过由于电容量倍增的关系,假设原来2000mAh的电池最高可以5C放电提供10A的最大电流;透过并联两组2000mAh的电池而得来的4000mAh电池同样是5C放电,其最大放电电流则提升至20A。透过这个方式可以让锂电池组提供单一颗锂电池所无法提供之瞬间高电流输出的能力。
透过XSXP的命名方式可以让我们很容易的了解一个电池组是由多少颗电池进行串联来提高电压、由多少组同电压电池组并联来提高放电电流。其中前面的“S”代表的是串联(Series);后面的“P”代表的是并联(Parallel)。因此一个由单颗2100mAh的锂电池所组成3S4P的电池组,其意味着由12颗锂电池所组成,其电压为单颗锂电池的三倍,放电电流能力为单颗锂电池的四倍。因此若这组电池组的最大放电C数为6C,则代表了他是一组电压为10.8V(3×3.6),并提供最高50.4A放电电流(2100mAh × 6C × 4P = 2.1A × 6 × 4 = 50.4 A)的锂电池组。
五、一般使用提示
1.锂电池在寒冷的天气无法发挥应有的性能,若您在冬天进行飞行,在未使用前可以将电池放在车内以求锂电池发挥应有的性能。
2.注意不要让电池过热,使用时尽量保持电池温度在华氏温度140~160度左右可以让您的锂电池活久一点。
3.不要让锂电池超过其原本设计最大的放电C数放电(不要让锂电池过电流放电),这将会造成电池的损坏,并让电池的原本最大电池容量降低。如果你在对锂电池进行充电后发现你只能充进原本电池标称容量的二分之一或是四分之三时,你很有可能是因为在使用锂电池时,使用过高的电流放电导致电池受损的关系(前提是电池容量没有不实标示)。
4.监控一电池组内的个别单颗锂电池的电压,保持同一电池组内之各颗锂电池的电压一致是很重要的,这可以让使用时的安全性增加,并且延长电池寿命。
5.若您是自行制作锂电池组,请记得在每颗锂电池间保持一些空隙以利电池的散热,当在制作两颗以上的锂电池组时这是最重要的了。
6.有些锂聚合物电池的正负极接点是使用铝的材质,如果你要对其进行焊接,必须记住一般的焊接程序无法使用在铝质接点上,你可能得买焊接铝用的焊接片,通常卖给你这种电池的厂商那边也会有销售焊接片。