总结一下散乱的开发点滴(高手勿入)

工作中总结的一些小知识点,散乱的记录下来的,现在总结一下, (可能看起来比较晕呢 = =!):

1. string.Compare()方法有没有用过呢? 它能对strA,strB进行某一段开始的串比较,可以设置是否忽略大小写等.

2. 三级联动下拉框A,B,C,A>B>C
    若A变,则C也要清空时,可以用: B_SelectedIndexChanged(null,null);
    使C重新绑定一次,结果为空,但勿多用,好象会出现性能的损失喔。
  
3. DataGrid相关的几个Tips:
  1) datagrid:对其中的单元做变更时要注意,任何类似visible=false这种操作都会使
    当前的index变小,循环操作时要注意减到由visible=false引起的差量

  2) datagrid生成的table有一些我们不需要的样式,删掉datagrid自动生成的style      

var  obj1  =  document.getElementById( " dgrLevelList " );
if  (obj1  !=   null ) {document.getElementById("dgrLevelList").style.cssText="";}

  3) ((DataBoundLiteralControl)e.Item.Cells[2].Controls[0]); 看明白了吗?可以将一个cell转化为 DataBoundLiteralControl 类型
 
  4) 取得DataGrid绑定的某一个字段值: (DataRowView)e.Item.DataItem)["isrecent"].ToString()
 
  5) DataGrid的ITEM绑定事件:
        itemcreated方法:是由上至下一条一条的生成item的事件
       itembound方法:是全部生成完datagrid触发的事件
       postback时,一定会触发itemcreated事件,但不会触发itembound事件。前面是绑定时,后者只会在datagrid.bind()时触发
    
   6) 有时我们需要动态invisible一些列.但必须要注意每次进行绑定之前,必须将所有列的visible还原为true,以免以前invisible的列显示不出来(上次为搞这头疼了2小时呢)
 
4. 自定义控件如何自定义TagName:

using  System;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.ComponentModel;

[assembly:TagPrefix(
" Emily.PlayControlbox " " Emily " )]  //  <- 这一句,看到了吗?在namespace上面定义
namespace  Emily.PlayControlbox

5. 有时我们需要将jscript输出在一些控件后,以及某一些控件之前,可以将Script写到Literal对象中来实现
  
6. 可以使用ListBox.ClearSelection();方法来清除已选择的项

5. 有时我们需要将jscript输出在一些控件后,以及某一些控件之前,可以将Script写到Literal对象中来实现
  
6. 可以使用ListBox.ClearSelection();方法来清除已选择的项

7. 转义字符:
  /a 与响铃(警报)/u0007 匹配。
  /b 如果在 [] 字符类中,则与退格符 /u0008 匹配;如果不是这种情况,请参见本表后面的“注意”部分。
  /t 与 Tab 符 /u0009 匹配。
  /r 与回车符 /u000D 匹配。
  /v 与垂直 Tab 符 /u000B 匹配。
  /f 与换页符 /u000C 匹配。
  /n 与换行符 /u000A 匹配。
  /e 与 Esc 符 /u001B 匹配。
  /040 将 ASCII 字符匹配为八进制数(最多三位);如果没有前导零的数字只有一位数或者与捕获组号相对应,则该数字为后向引用。(有关详细信息,请参见反向引用。)例如,字符 /040 表示空格。
  /x20 使用十六进制表示形式(恰好两位)与 ASCII 字符匹配。
  /cC 与 ASCII 控制字符匹配;例如,/cC 为 Ctrl-C。
  /u0020 使用十六进制表示形式(恰好四位)与 Unicode 字符匹配。
  / 在后面带有不识别为转义符的字符时,与该字符匹配。例如,/* 与 /x2A 相同。
 
8.  Request.PhysicalApplicationPath.ToString(); 如果不指定则文件写在:c:/winnt/system32 目录

9.  模态窗口:
 父页面:

btnMore.Attributes.Add( " onclick " " var st = window.showModalDialog('SelectPerson.aspx','','dialogHeight: 220px;status: no;');if(st!= null){ document.all('TextMng').value=st};return st; " );

 子页面:

RegisterStartupScript( " OnClick " , " <script>window.returnValue =' "   +  DataList.Items[ 0 ].Cells[ 0 ].Text  +   " ';window.close();</script> " );

 子页面返回结果给window.returnValue;父页面得到结果st
 注意:模态窗口里一定要有这一句:<base target=_self> (写在body前)
取消时:

RegisterStartupScript( " key " , " <script>alert('您取消了操作!');window.returnvalue=null ;window.opener=null;window.close(this);</script> " );

10. 能用switch的地方总能抽象出一个抽象类(当然视必要性而言)

11. Oracle的几点Tips:
 1) 时间的比较,还能用add_months来进行比较,eg: add_months(sysdate,012) 

SELECT  t.id, count   AS  v_count, ' [ ' || s.cname || ' ] ' || t.title  AS  title,to_char(t.createdate, ' yyyy-mm-dd ' AS  datea 
   
FROM  news_information t,news_class_dic s 
  
WHERE  t.levelid  =  s.cid 
    
AND  to_char(t.createdate, ' yyyy-mm-dd ' <=   ' 2006-1-1 '   AND  author  !=   ' system '

    2) 还是时间的比较:
  SYSDATE为系统时间,直接用sysdate-t.e_date会得出秒的时差,而用t.e.date+3,则为+3天

      SELECT  ( CASE   WHEN  t.e_date  +   3   >  SYSDATE  THEN   1   ELSE   0   END AS  abc
     
FROM  base_class_info t
    
WHERE  (t.e_date  +   3 >=  SYSDATE

  3) 几个常用系统对象的查询:
   查询视图 select * from user_views
   查询表格 select * from user_all_tables
   查询所有系统列 select * from ALL_CONS_COLUMNS
   查询所有用户列的注释 select * from USER_COL_COMMENTS where lower(column_name) like '%train_type_name%'
   
12. #define的妙用: (看懂了莫? 有时需要有一些debug的数据,可以这么做)

#define  SXUN_DEBUG 
#if  SXUN_DEBUG
//
#else
// ..
#endif

不用时:
 #undef SXUN_DEBUG

 

总结一下散乱的开发点滴(2) (高手勿入)

最近做的都是些杂活,总结出来的更偏重于一些vs.net的使用方法,不过挺有用的,怕以后忘记,丢出来先:)

1. options > source control > SCC > perform background status updates > 去掉,可以省去每次打开项目时自动进行后台版本控件的状态更新(这东东让VS。NET启动速度大大的慢)

2. 用过vs.net里的bookmark和navigate吗?当然有很多人用过,不过偶从来没用过 T.T,我突然发现这东东特好用,比如在页面中设置一个书签,再切换过去,不过vs关掉就消失了,而且书签的导航只能限于一个文件;navigate可以记录你点击过的行数的顺序,使用前后按钮可以切换你点击过的东东(比较方便喔,不用"咦?我刚看的方法跑哪去了?" 这么老是找来找去的)

3. 编译的时候,可以实现检查是否每个方法前都有XML的注释,如果没有注释,就有warning的提示:) 不过具体方法(?) - -!

4. ReSharper工具不错,能反射出来此方法在什么地方被调用过,主要是用于代码重构
   在重构的过程中起到很方便的作用,能提取出接口,公共类等。在寻找调用过它方法的功能上尤其能胜任:)
   还有一些其它的好处,等待大家发现

5. aspnet_static 有没有试过有时这个服务启动不了呢,它有什么用.
  在web.config里面定义 session_status: 有一个inproc,一个为aspnet_static...一个是session为共用的(编译后session不会消失),一个是aspnet_wp进程内的

6. dos命令 - -!
   cd: 待删文件的顶层目录
   dir FOLDER
   >del *.keep/s //s,删除子文件夹D东东(可以把*.bak等,cc里生成的*.keep都给del掉,方便)

7. 对viewstate定义枚举量的方法来进行实现,可以省去定义属性的麻烦(其实这种也很麻烦,得不停的ToString()转换:( )

   private   enum  VSNames
  
{
   
/// <summary>
   
/// 存储项目编码的ViewState名称
   
/// </summary>

   ProjectNo,
   
/// <summary>
   
/// 存储是否是添加课程信息的ViewState名称
   
/// </summary>

   IsAdd,  
  }

  实事上我们更偏向于用属性来进行存取
  
8.  有没有试过在vs.net里定义一些常用的快捷键( Tools > options > environment > keyboard ) 呢,我现在觉得有用的快捷以及功能如下,可以存为自己的命名如syveen:
   Edit.CompleteWord (自动完成关键词)   alt+j
   Edit.CommentSelection (注释代码)     alt+w
   Edit.unCommentSelection (反注释代码)  alt+e
  
   另外还有一些已经定义的有用的:
   页面书签导航 Ctrl+k , Ctrl+n
   扩展收缩代码 Ctrl+m , Ctrl+l
   (还有有用的快捷和功能吗?)  

9.  objArr = object.getElementsByTagName("select"); ^^ 找出页面所有select的Tag的控件对象,可以实现编辑页面直接用js来达到显示文本的目的(上次帮朋友想的,本机没代码:( );
   思路及实现步骤:
   1) 整理页面需要显示的对象,如input(文本框),select(下拉框)
   2) 隐藏当前控件,使用obj.style.display = "none",注意不要用其它隐藏,因为页面可能使用过这些控件
   3) 用 objArr.parentNodes[0].innerHtml 取出父控件下的所有html代码,将obj中显示的值写进objArr.parentNodes[0].innerHtml中(当然是用 += 来连接串了)
    最后注意循环控件时要从大往小循环,以避免一个TD(或父控件)出现一个以上的需要处理的控件对象
    *JS中得到select的ITEM的个数,为selObj.options.length 而非items.length

10. System.Collection.HybridDictionary是什么?
     MSDN: 在集合较小时,使用 ListDictionary 来实现 IDictionary,然后当集合变大时,切换到 Hashtable。 
     建议在集合比较小时使用HybridDictionary而非Hashtable;
     我记得这儿有人贴过另一种名值对的对象(?)

11. SELECT COUNT(1) FROM TBL 来进行记录数的统计,而不需要用count(*),以小小节省性能

12. 对于在一个域内只使用一次的非静态公共方法,可以用  

int  iRet  =   new  DAL.Fee.PersonalAccountDA().DecomposeInternalFee(user);  

  来进行实现, 而不用总是:

DAL.Fee.PersonalAccountDA _pa  =   new  DAL.Fee.PersonalAccountDA();
int  iRet  =  _pa.DecomposeInternalFee(user);

 

总结一下散乱的开发点滴(3) (高手勿入)

1. 从一个枚举值得到对应的串:   

//  定义一个枚举
    enum  Colors  { Red, Green, Blue, Yellow } ;
   
//  得到串
   System.Enum.GetName(System.Type type,  object  obj);
  Enum.GetName(
typeof (Colors),  3 )
   
//  返回Yellow

2. oracle: blob的读写方法write,read

3. ref在置参前,一定要先给参数分配内存,也就是需要实例化
   如果遇到接口不允许实例化,可以先实例化继承接口的类,如下:  

public   abstract   class   UserInfo : IIdentity
实例化方法:
UserInfo user 
=   System.Web.HttpContext.Current.User.Identity  as  UserInfo;

5.下面代码一出来大家就知道是干嘛用的吧
   有的时候我们不想让用户直接在IE中打开已知类型的文件,比如Word,而希望能直接下载,这时候可用下面代码来替换Response.Redirect

Response.ContentType  =   " application/octet-stream " ;
Response.AddHeader(
" Content-Disposition " " attachment;FileName= " + fileName);
Response.BinaryWrite((
byte [])YourFileData.Rows[ 0 ][ " AttachmentContent " ]);
Response.End();

   Lostinet :
        补充一下。通常我喜欢把链接做成这样:
       <a href="download.aspx/hello.chm?fileid=12345">hello.chm</a> _fcksavedurl=""download.aspx/hello.chm?fileid=12345">hello.chm</a>"
       这样客户端下载的时候默认是 hello.chm 这个名字的。

6.  用如下方法来创造一个类的单例实例化方法         

/// <summary>
  
/// 内容摘要: 构造函数进行初始化
  
/// </summary>

   protected  EvalModelBLLBase()
  
{
  }

  
private   static   volatile  EvalModelBLLBase m_instance  =   null ;
  
/// <summary>
  
/// 内容摘要: 取得EvalModelBLLBase对象
  
/// </summary>
  
/// <returns>返回一个已经存在的实体</returns>

   public   static  EvalModelBLLBase GetInstance()
  
{
   
// 通用的必要代码 iBatisNet双校检机制,如果实例不存在


   
if (m_instance == null)
   
{
    
lock (typeof (EvalModelBLLBase))
    
{
     
// 如果实例不存在


     
if (m_instance == null)
     
{
      
// 创建一个的实例
      m_instance = new EvalModelBLLBase();
     }

    }

   }


   
// 返回业务逻辑对象
   return m_instance;
  }




使用的时候就可以直接:obj.GetInstance().xxx();即可,在一定缓存时间内,使用的是同一个对象,省去了频繁的new obj();

注: volatile关键字,能将此线程中的对象缓存到属于它自己的内存空间中。在一个线程中使用单例.
         这儿有个关于volatile的详细解释:
         http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/csref/html/vclrfvolatile.asp
         http://www.coogo.net/bbs/dispbbs.asp?boardid=45&id=174529
         "使用 volatile 修饰符能够确保一个线程检索由另一线程写入的最新值。"        

7.  if (mString.length > 0) 比 if (mString != "") 效率高

8. obj.scrollIntoView()相当于focus

9.  <asp:BoundColumn DataField="INVESTIGATESTARTDATE" HeaderText="开始日期" DataFormatString="{0:d}"></asp:BoundColumn>
     来显示日期而不显示时间, 这个和formatstring的用法相同
  
10. dropdownlist等类似控件,它们寻找selectedIndex,是按value来找的,也就是说如果几个items的value相同,则会找到第一个items为selectedItem.所以当你发现几个ITEM使用同一个VALUE,无论怎么点,.net都只认为你选中第一项时不要意外。

11 动态装载usercontrol.  

userControl  =  (userControls.ProjectHome)LoadControl( " ../userControls/Project/ProjectHome.ascx " );
ctlHome.Controls.Add(userControl);     

12. 从XML转成DATASET

System.IO.StringReader sr  =   new  System.IO.StringReader(xmlstr);
DataSet ds 
=   new  DataSet();
ds.ReadXml(sr);

13. 模态窗口有时因为缓存的原因,有时无法进入page_load方式进行刷新:
      须加入 <meta http-equiv="pragma" content="no-cache">

(二)

最近做的都是些杂活,总结出来的更偏重于一些vs.net的使用方法,不过挺有用的,怕以后忘记,丢出来先:)

1. options > source control > SCC > perform background status updates > 去掉,可以省去每次打开项目时自动进行后台版本控件的状态更新(这东东让VS。NET启动速度大大的慢)

2. 用过vs.net里的bookmark和navigate吗?当然有很多人用过,不过偶从来没用过 T.T,我突然发现这东东特好用,比如在页面中设置一个书签,再切换过去,不过vs关掉就消失了,而且书签的导航只能限于一个文件;navigate可以记录你点击过的行数的顺序,使用前后按钮可以切换你点击过的东东(比较方便喔,不用"咦?我刚看的方法跑哪去了?" 这么老是找来找去的)

3. 编译的时候,可以实现检查是否每个方法前都有XML的注释,如果没有注释,就有warning的提示:) 不过具体方法(?) - -!

4. ReSharper工具不错,能反射出来此方法在什么地方被调用过,主要是用于代码重构
   在重构的过程中起到很方便的作用,能提取出接口,公共类等。在寻找调用过它方法的功能上尤其能胜任:)
   还有一些其它的好处,等待大家发现

5. aspnet_static 有没有试过有时这个服务启动不了呢,它有什么用.
  在web.config里面定义 session_status: 有一个inproc,一个为aspnet_static...一个是session为共用的(编译后session不会消失),一个是aspnet_wp进程内的

6. dos命令 - -!
   cd: 待删文件的顶层目录
   dir FOLDER
   >del *.keep/s //s,删除子文件夹D东东(可以把*.bak等,cc里生成的*.keep都给del掉,方便)

7. 对viewstate定义枚举量的方法来进行实现,可以省去定义属性的麻烦(其实这种也很麻烦,得不停的ToString()转换:( )

   private   enum  VSNames
  
{
   
/// <summary>
   
/// 存储项目编码的ViewState名称
   
/// </summary>

   ProjectNo,
   
/// <summary>
   
/// 存储是否是添加课程信息的ViewState名称
   
/// </summary>

   IsAdd,  
  }

  实事上我们更偏向于用属性来进行存取
  
8.  有没有试过在vs.net里定义一些常用的快捷键( Tools > options > environment > keyboard ) 呢,我现在觉得有用的快捷以及功能如下,可以存为自己的命名如syveen:
   Edit.CompleteWord (自动完成关键词)   alt+j
   Edit.CommentSelection (注释代码)     alt+w
   Edit.unCommentSelection (反注释代码)  alt+e
  
   另外还有一些已经定义的有用的:
   页面书签导航 Ctrl+k , Ctrl+n
   扩展收缩代码 Ctrl+m , Ctrl+l
   (还有有用的快捷和功能吗?)  

9.  objArr = object.getElementsByTagName("select"); ^^ 找出页面所有select的Tag的控件对象,可以实现编辑页面直接用js来达到显示文本的目的(上次帮朋友想的,本机没代码:( );
   思路及实现步骤:
   1) 整理页面需要显示的对象,如input(文本框),select(下拉框)
   2) 隐藏当前控件,使用obj.style.display = "none",注意不要用其它隐藏,因为页面可能使用过这些控件
   3) 用 objArr.parentNodes[0].innerHtml 取出父控件下的所有html代码,将obj中显示的值写进objArr.parentNodes[0].innerHtml中(当然是用 += 来连接串了)
    最后注意循环控件时要从大往小循环,以避免一个TD(或父控件)出现一个以上的需要处理的控件对象
    *JS中得到select的ITEM的个数,为selObj.options.length 而非items.length

10. System.Collection.HybridDictionary是什么?
     MSDN: 在集合较小时,使用 ListDictionary 来实现 IDictionary,然后当集合变大时,切换到 Hashtable。 
     建议在集合比较小时使用HybridDictionary而非Hashtable;
     我记得这儿有人贴过另一种名值对的对象(?)

11. SELECT COUNT(1) FROM TBL 来进行记录数的统计,而不需要用count(*),以小小节省性能

12. 对于在一个域内只使用一次的非静态公共方法,可以用  

int  iRet  =   new  DAL.Fee.PersonalAccountDA().DecomposeInternalFee(user);  

  来进行实现, 而不用总是:

DAL.Fee.PersonalAccountDA _pa  =   new  DAL.Fee.PersonalAccountDA();
int  iRet  =  _pa.DecomposeInternalFee(user);

 

(三)

1. 从一个枚举值得到对应的串:   

//  定义一个枚举
    enum  Colors  { Red, Green, Blue, Yellow } ;
   
//  得到串
   System.Enum.GetName(System.Type type,  object  obj);
  Enum.GetName(
typeof (Colors),  3 )
   
//  返回Yellow

2. oracle: blob的读写方法write,read

3. ref在置参前,一定要先给参数分配内存,也就是需要实例化
   如果遇到接口不允许实例化,可以先实例化继承接口的类,如下:  

public   abstract   class   UserInfo : IIdentity
实例化方法:
UserInfo user 
=   System.Web.HttpContext.Current.User.Identity  as  UserInfo;

5.下面代码一出来大家就知道是干嘛用的吧
   有的时候我们不想让用户直接在IE中打开已知类型的文件,比如Word,而希望能直接下载,这时候可用下面代码来替换Response.Redirect

Response.ContentType  =   " application/octet-stream " ;
Response.AddHeader(
" Content-Disposition " " attachment;FileName= " + fileName);
Response.BinaryWrite((
byte [])YourFileData.Rows[ 0 ][ " AttachmentContent " ]);
Response.End();

   Lostinet :
        补充一下。通常我喜欢把链接做成这样:
       <a href="download.aspx/hello.chm?fileid=12345">hello.chm</a>
       这样客户端下载的时候默认是 hello.chm 这个名字的。

6.  用如下方法来创造一个类的单例实例化方法         

/// <summary>
  
/// 内容摘要: 构造函数进行初始化
  
/// </summary>

   protected  EvalModelBLLBase()
  
{
  }

  
private   static   volatile  EvalModelBLLBase m_instance  =   null ;
  
/// <summary>
  
/// 内容摘要: 取得EvalModelBLLBase对象
  
/// </summary>
  
/// <returns>返回一个已经存在的实体</returns>

   public   static  EvalModelBLLBase GetInstance()
  
{
   
// 通用的必要代码 iBatisNet双校检机制,如果实例不存在


   
if (m_instance == null)
   
{
    
lock (typeof (EvalModelBLLBase))
    
{
     
// 如果实例不存在


     
if (m_instance == null)
     
{
      
// 创建一个的实例
      m_instance = new EvalModelBLLBase();
     }

    }

   }


   
// 返回业务逻辑对象
   return m_instance;
  }




使用的时候就可以直接:obj.GetInstance().xxx();即可,在一定缓存时间内,使用的是同一个对象,省去了频繁的new obj();

注: volatile关键字,能将此线程中的对象缓存到属于它自己的内存空间中。在一个线程中使用单例.
         这儿有个关于volatile的详细解释:
         http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/csref/html/vclrfvolatile.asp
         http://www.coogo.net/bbs/dispbbs.asp?boardid=45&id=174529
         "使用 volatile 修饰符能够确保一个线程检索由另一线程写入的最新值。"        

7.  if (mString.length > 0) 比 if (mString != "") 效率高

8. obj.scrollIntoView()相当于focus

9.  <asp:BoundColumn DataField="INVESTIGATESTARTDATE" HeaderText="开始日期" DataFormatString="{0:d}"></asp:BoundColumn>
     来显示日期而不显示时间, 这个和formatstring的用法相同
  
10. dropdownlist等类似控件,它们寻找selectedIndex,是按value来找的,也就是说如果几个items的value相同,则会找到第一个items为selectedItem.所以当你发现几个ITEM使用同一个VALUE,无论怎么点,.net都只认为你选中第一项时不要意外。

11 动态装载usercontrol.  

userControl  =  (userControls.ProjectHome)LoadControl( " ../userControls/Project/ProjectHome.ascx " );
ctlHome.Controls.Add(userControl);     

12. 从XML转成DATASET

System.IO.StringReader sr  =   new  System.IO.StringReader(xmlstr);
DataSet ds 
=   new  DataSet();
ds.ReadXml(sr);

13. 模态窗口有时因为缓存的原因,有时无法进入page_load方式进行刷新:
      须加入 <meta http-equiv="pragma" content="no-cache">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值