.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时,如果数据是经过过滤得到的.
RowFilterSort属性设置后,用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

普通添加生成的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;
}

posted @ 2007-08-27 16:54  大力哥的技术  阅读(744)  评论(6)    收藏  举报
版权
作者:Bober Song

出处:http://bober.cnblogs.com

Care健康:http://www.aicareyou.com

推荐空间:华夏名网

本文首发博客园,版权归作者跟博客园共有。

转载必须保留本段声明,并在页面显著位置给出本文链接,否则保留追究法律责任的权利。