.NET BS项目边进行边总结
.NET BS项目边进去边总结,防止头脑不清醒的时候:
1]var ret=XmlHttpPost("../Library/WebPostOperationPage.tkx?Source=BSQuery"+condition, "");
将查询条件传递到后台,使用request.QueryString["XX"];接收;
如果查询结果是表类似的数据.可以使用GetXml();方法将查询后的数据XML化返回给接收的变量.
var xmlDoc=GetXmlDocument();
xmlDoc.loadXML(ret);
xmlDoc.setProperty("SelectionLanguage", "XPath");
这样就可以得到一个XML格式的字符串.利用
nodes=xmlDoc.selectNodes("/Toolkit/VIPInfo");获取节点集
node=xmlDoc.documentElement.selectSingleNode("/Toolkit/VIPInfo["+num+"]/GKDM");获取指定节点的值
2]num=window.showModalDialog("WebInitPage.tkx?Source=VIPListPage",ret,style);
在JS方法中打开一个模态页面,数据由ret传递过去生成,style="dialogWidth:450px;dialogHeight:"+height+"px;center:yes;scroll:no";用来修饰页面.在页面关闭后返回一个值.其中传递的ret参数有限定长度(目前还没弄清楚)
3]利用JS方法格式化数字,特别适合于金额
![]()
function FormatNumber(srcStr,nAfterDot) //格式化数字,特别对于金额;nAfterDot小数位数
{
var srcStr,nAfterDot;
var resultStr,nTen;
srcStr = ""+srcStr+"";
strLen = srcStr.length;
dotPos = srcStr.indexOf(".",0);
if (dotPos == -1){
resultStr = srcStr+".";
for (i=0;i<nAfterDot;i++){
resultStr = resultStr+"0";
}
return resultStr;
}
else{
if ((strLen - dotPos - 1) >= nAfterDot){
nAfter = dotPos + nAfterDot + 1;
nTen =1;
for(j=0;j<nAfterDot;j++){
nTen = nTen*10;
}
resultStr = Math.round(parseFloat(srcStr)*nTen)/nTen;
return resultStr;
}
else{
resultStr = srcStr;
for (i=0;i<(nAfterDot - strLen + dotPos + 1);i++){
resultStr = resultStr+"0";
}
return resultStr;
}
}
}
暂时这样了
4]JS实现浏览器菜单命令
![]()
![]()
<object id=min classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"><param name="Command" value="Minimize"></object>
<object id=max classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"><param name="Command" value="Maximize"></object>
<object id=close classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><PARAM NAME="Command" value="Close"></object>
![]()
<input type=button value=最小化 onclick=min.Click()>
<input type=button value=最大化 onclick=max.Click()>
<input type=button value=关闭 onclick=close.Click()></div>
![]()
<INPUT type=button onclick="document.execCommand('open')" value=打开>
<INPUT type=button onclick="document.execCommand('saveas')" value=保存>
<INPUT type=button onclick="document.execCommand('print')" value=打印>
![]()
<INPUT type=button onclick="document.execCommand('selectall')" value=全选>
<INPUT type=button onclick="location.replace('view-source:'+location)" value=源文件>
<INPUT type=button onclick="window.external.ShowBrowserUI('PrivacySettings',null)" value=安全选项>
![]()
<input type=button onClick="window.external.ShowBrowserUI('LanguageDialog', null)" value=语言设置>
<INPUT type=button onclick="window.external.AddFavorite(location.href, document.title)" value=加入收藏夹>
<INPUT type=button onclick="window.external.ShowBrowserUI('OrganizeFavorites', null)" value=整理收藏夹>
![]()
<INPUT onclick=history.go(-1) type=submit value=后退>
<INPUT onclick=history.go(1) type=submit value=前进>
<input type=button value=刷新 name=refresh onclick="window.location.reload()">
![]()
<input type="button" value="导入收藏夹" onClick=window.external.ImportExportFavorites(true,'');>
<input type="button" value="导出收藏夹" onClick=window.external.ImportExportFavorites(false,'');>
5]在向页面输出现画的图片时,为了在FIREFOX中可以显示图片.
需要在输出时设置类型
/// <summary>
/// 保存绘制的图片
/// </summary>
///<param name="myPage" >输出的页面</param>
public void CreateImage(Page myPage)
{
myPage.Response.ClearContent();
myPage.Response.ContentType = "image/Gif";
image.Save(myPage.Response.OutputStream, ImageFormat.Gif);
}
6]在用DataView时,如果数据是经过过滤得到的.
RowFilter和Sort属性设置后,用DataView[行][列]可以取值,
但前提是过滤后过值,实际上DataView中是有值的.
过滤后可能无值.这时要访问DataView,就得DataView.Table.Row[行][列]来访问了
同时在绑定数据控件时,从数据库取出的数据经过处理后还需要排序,也可以使用DataView:
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = "TimeClass_Name, DateType, TCOrder";
DatagridTC.DataSource = dv;
DatagridTC.DataBind();
此代码上就简洁多了,更重要的是它不要再新创建dataset等,减少了内存和CPU的消耗。
XMLNews xmlnews = new XMLNews();
DataTable tbl = xmlnews.loadFromXMLOrCache(Server.MapPath(XMLFile));//读取XML数据到DataTable 中
if (tbl != null && tbl.Rows.Count > 0)
{
DataView dv = tbl.DefaultView;
dv.Sort = "NewsTime desc";
DataTable srcTbl = tbl.Clone();
for (int i = AspNetPagerNews.StartRecordIndex; i <= AspNetPagerNews.EndRecordIndex; i++)
{
srcTbl.ImportRow(dv[i - 1].Row);
}
当然可以对DataView中的多列数据进行排序
7]在NET1.0或1.1中可能会在ASPX代码中出现CodePage="936",导致页面部分控件的属性和事件不能正常.原因是由于:
<%@ codepage=936%>简体中文
<%@ codepage=950%>繁体中文
<%@ codepage=65001%>UTF-8
由于NET1.1和2.0都通用UTF-8,直接去掉CodePage="936"就可.
8]Repeater控件在绑定数据的时候,如果从外面另加一列数据绑定的话可以从
ItemDataBound(object sender, RepeaterItemEventArgs e)
事件中进行绑定.
但由于Repeater控件中ItemType分为Item,AlternatingItem,Header和Footer,
所以需要根据你绑定数据的位置进行判断.比如在Item,AlternatingItem中.
protected void NobleMetalFromMarket_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
可以执行当中的ITEM绑定
}
}
9]DataGrid控件在设置其属性的时候发现怎么设置bordercolor,生成页都变成了
style="bordercolor..",这样不能为生成的TABLE显示边框颜色.
但可以在后台进行设置
jiqiXunJia.Attributes.Add("bordercolor", "BAD7E7");
10]给绑定的短标题加提示,除了<A>自带的TITLE属性外还可以自定义一个DIV
<div id="showTip" style="DISPLAY: none;border=1;border-width:2;position:absolute;z-index:1;font-size:10pt;color:#755100; background-color:#f9f4e8;border-color:#bd9a4a"></div>
![]()
![]()
<a onmouseover="ShowTips('<%#DataBinder.Eval(Container.DataItem,"NewsTitle")%>',event)" onmouseout="HideTips()"![]()
![]()
![]()
function ShowTips(tips,ex)
{
var x,y;
try{
x=event.clientX;
y=event.clientY+ document.body.scrollTop;
}catch(E){
x=ex.pageX;
y=ex.pageY;
}
document.getElementById("showTip").style.left=x+10+"px";
document.getElementById("showTip").style.top=y+10+"px";
document.getElementById("showTip").innerHTML="<u>"+tips+"</u>";
document.getElementById("showTip").style.display="block";
}
function HideTips()
{
document.getElementById("showTip").innerHTML="";
document.getElementById("showTip").style.display="none";
}
这样兼容了IE和FF浏览器,在确定事件的位置时,给纵人材加上了document.body.scrollTop;
当要显示的层的位置为position:fixed时就可以不用加上滑动条的高度,不过好像在IE6下不能实现.IE7下正常显示.
08-04-10更新:
后来发现在VS2003中ASPX页面中有:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >申明
而在VS2005中有
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
已经变成了XHTML1.0了,同时支持document.documentElement.scrollTop;
所以在VS2005中可以用document.documentElement.scrollTop取得滚动高.
而在VS2003中用document.body.scrollTop;取得滚动高;
[11]关于服务器生成的客户端ID
1]var ret=XmlHttpPost("../Library/WebPostOperationPage.tkx?Source=BSQuery"+condition, "");
将查询条件传递到后台,使用request.QueryString["XX"];接收;
如果查询结果是表类似的数据.可以使用GetXml();方法将查询后的数据XML化返回给接收的变量.
var xmlDoc=GetXmlDocument();
xmlDoc.loadXML(ret);
xmlDoc.setProperty("SelectionLanguage", "XPath");
这样就可以得到一个XML格式的字符串.利用
nodes=xmlDoc.selectNodes("/Toolkit/VIPInfo");获取节点集
node=xmlDoc.documentElement.selectSingleNode("/Toolkit/VIPInfo["+num+"]/GKDM");获取指定节点的值
2]num=window.showModalDialog("WebInitPage.tkx?Source=VIPListPage",ret,style);
在JS方法中打开一个模态页面,数据由ret传递过去生成,style="dialogWidth:450px;dialogHeight:"+height+"px;center:yes;scroll:no";用来修饰页面.在页面关闭后返回一个值.其中传递的ret参数有限定长度(目前还没弄清楚)
3]利用JS方法格式化数字,特别适合于金额

function FormatNumber(srcStr,nAfterDot) //格式化数字,特别对于金额;nAfterDot小数位数
{
var srcStr,nAfterDot;
var resultStr,nTen;
srcStr = ""+srcStr+"";
strLen = srcStr.length;
dotPos = srcStr.indexOf(".",0);
if (dotPos == -1){
resultStr = srcStr+".";
for (i=0;i<nAfterDot;i++){
resultStr = resultStr+"0";
}
return resultStr;
}
else{
if ((strLen - dotPos - 1) >= nAfterDot){
nAfter = dotPos + nAfterDot + 1;
nTen =1;
for(j=0;j<nAfterDot;j++){
nTen = nTen*10;
}
resultStr = Math.round(parseFloat(srcStr)*nTen)/nTen;
return resultStr;
}
else{
resultStr = srcStr;
for (i=0;i<(nAfterDot - strLen + dotPos + 1);i++){
resultStr = resultStr+"0";
}
return resultStr;
}
}
} 暂时这样了
4]JS实现浏览器菜单命令


<object id=min classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"><param name="Command" value="Minimize"></object>
<object id=max classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11"><param name="Command" value="Maximize"></object>
<object id=close classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"><PARAM NAME="Command" value="Close"></object> 
<input type=button value=最小化 onclick=min.Click()>
<input type=button value=最大化 onclick=max.Click()>
<input type=button value=关闭 onclick=close.Click()></div>
<INPUT type=button onclick="document.execCommand('open')" value=打开>
<INPUT type=button onclick="document.execCommand('saveas')" value=保存>
<INPUT type=button onclick="document.execCommand('print')" value=打印>
<INPUT type=button onclick="document.execCommand('selectall')" value=全选>
<INPUT type=button onclick="location.replace('view-source:'+location)" value=源文件>
<INPUT type=button onclick="window.external.ShowBrowserUI('PrivacySettings',null)" value=安全选项>
<input type=button onClick="window.external.ShowBrowserUI('LanguageDialog', null)" value=语言设置>
<INPUT type=button onclick="window.external.AddFavorite(location.href, document.title)" value=加入收藏夹>
<INPUT type=button onclick="window.external.ShowBrowserUI('OrganizeFavorites', null)" value=整理收藏夹>
<INPUT onclick=history.go(-1) type=submit value=后退>
<INPUT onclick=history.go(1) type=submit value=前进>
<input type=button value=刷新 name=refresh onclick="window.location.reload()">
<input type="button" value="导入收藏夹" onClick=window.external.ImportExportFavorites(true,'');>
<input type="button" value="导出收藏夹" onClick=window.external.ImportExportFavorites(false,'');>5]在向页面输出现画的图片时,为了在FIREFOX中可以显示图片.
需要在输出时设置类型
/// <summary>
/// 保存绘制的图片
/// </summary>
///<param name="myPage" >输出的页面</param>
public void CreateImage(Page myPage)
{
myPage.Response.ClearContent();
myPage.Response.ContentType = "image/Gif";
image.Save(myPage.Response.OutputStream, ImageFormat.Gif);
}6]在用DataView时,如果数据是经过过滤得到的.
RowFilter和Sort属性设置后,用DataView[行][列]可以取值,
但前提是过滤后过值,实际上DataView中是有值的.
过滤后可能无值.这时要访问DataView,就得DataView.Table.Row[行][列]来访问了
同时在绑定数据控件时,从数据库取出的数据经过处理后还需要排序,也可以使用DataView:
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = "TimeClass_Name, DateType, TCOrder";
DatagridTC.DataSource = dv;
DatagridTC.DataBind();此代码上就简洁多了,更重要的是它不要再新创建dataset等,减少了内存和CPU的消耗。
XMLNews xmlnews = new XMLNews();
DataTable tbl = xmlnews.loadFromXMLOrCache(Server.MapPath(XMLFile));//读取XML数据到DataTable 中
if (tbl != null && tbl.Rows.Count > 0)
{
DataView dv = tbl.DefaultView;
dv.Sort = "NewsTime desc";
DataTable srcTbl = tbl.Clone();
for (int i = AspNetPagerNews.StartRecordIndex; i <= AspNetPagerNews.EndRecordIndex; i++)
{
srcTbl.ImportRow(dv[i - 1].Row);
}7]在NET1.0或1.1中可能会在ASPX代码中出现CodePage="936",导致页面部分控件的属性和事件不能正常.原因是由于:
<%@ codepage=936%>简体中文
<%@ codepage=950%>繁体中文
<%@ codepage=65001%>UTF-8
由于NET1.1和2.0都通用UTF-8,直接去掉CodePage="936"就可.
8]Repeater控件在绑定数据的时候,如果从外面另加一列数据绑定的话可以从
ItemDataBound(object sender, RepeaterItemEventArgs e)
事件中进行绑定.
但由于Repeater控件中ItemType分为Item,AlternatingItem,Header和Footer,
所以需要根据你绑定数据的位置进行判断.比如在Item,AlternatingItem中.
protected void NobleMetalFromMarket_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
可以执行当中的ITEM绑定
}
}9]DataGrid控件在设置其属性的时候发现怎么设置bordercolor,生成页都变成了
style="bordercolor..",这样不能为生成的TABLE显示边框颜色.
但可以在后台进行设置
jiqiXunJia.Attributes.Add("bordercolor", "BAD7E7");
10]给绑定的短标题加提示,除了<A>自带的TITLE属性外还可以自定义一个DIV
<div id="showTip" style="DISPLAY: none;border=1;border-width:2;position:absolute;z-index:1;font-size:10pt;color:#755100; background-color:#f9f4e8;border-color:#bd9a4a"></div>

<a onmouseover="ShowTips('<%#DataBinder.Eval(Container.DataItem,"NewsTitle")%>',event)" onmouseout="HideTips()"


function ShowTips(tips,ex)
{
var x,y;
try{
x=event.clientX;
y=event.clientY+ document.body.scrollTop;
}catch(E){
x=ex.pageX;
y=ex.pageY;
}
document.getElementById("showTip").style.left=x+10+"px";
document.getElementById("showTip").style.top=y+10+"px";
document.getElementById("showTip").innerHTML="<u>"+tips+"</u>";
document.getElementById("showTip").style.display="block";
}
function HideTips()
{
document.getElementById("showTip").innerHTML="";
document.getElementById("showTip").style.display="none";
}这样兼容了IE和FF浏览器,在确定事件的位置时,给纵人材加上了document.body.scrollTop;
当要显示的层的位置为position:fixed时就可以不用加上滑动条的高度,不过好像在IE6下不能实现.IE7下正常显示.
08-04-10更新:
后来发现在VS2003中ASPX页面中有:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >申明
而在VS2005中有
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
已经变成了XHTML1.0了,同时支持document.documentElement.scrollTop;
所以在VS2005中可以用document.documentElement.scrollTop取得滚动高.
而在VS2003中用document.body.scrollTop;取得滚动高;
[11]关于服务器生成的客户端ID
普通添加生成的ASPX页面中服务器控件的ID值在生成静态页面后不变
但如果页面用到母版页,刚服务器控件生成的客户端ID则会变化
一般生成的ID值会跟随母版页的变化而变化
但如果母版页保持不变,则
[1]我们可以利用生成后的客户端ID值还控件JS操作
[2]在后台中利用this.ServerControlID.ClientID来获取服务器控件生成的客户端ID值,
然后赋给一个客户端标签上,利用JS取得.
[12]处理页面中多个回车事件:
function canQuit(e)//调用OnClientClick="canQuit(this);"
{
alert(e.id);
if(e.id=='ctl00_quitSys')//服务器控件ID:'<%= quitSys.ClientID %>'
event.returnValue = false;//取消回车键的默认操作
}
通过上面的方法可以判断是哪个控件上的回车事件;
如果不想让页面有回车事件可:
function document.onkeydown()
{
if(event.keyCode == 13)
event.returnValue = false;
}
作者:Bober Song
出处:http://bober.cnblogs.com/
CARE健康网: http://www.aicareyou.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://bober.cnblogs.com/
CARE健康网: http://www.aicareyou.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


浙公网安备 33010602011771号