21.自定义异常处理 //自定义异常处理类 
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> 
  /// 事件日志记录类,提供事件日志记录支持 
  /// <res> 
  /// 定义了4个日志记录方法 (error, warning, info, trace) 
  /// </res> 
  /// </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("\r\n"); 
  } 
  strBuilder.Append(ex.Message).Append("\r\n").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.Info: 
  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 

22.Panel 横向滚动,纵向自动扩展 
<asp:panel style="overflow-x:scroll;overflow-y:auto;"></asp:panel> 
23.回车转换成Tab 
(1) 
<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> 
(2)  //当在有keydown事件的控件上敲回车时,变为tab 
public void Tab(System.Web .UI.WebControls .WebControl webcontrol) 

webcontrol.Attributes .Add ("onkeydown", "if(event.keyCode==13) event.keyCode=9"); 

24.DataGrid超级连接列 
DataNavigateUrlField="字段名" DataNavigateUrlFormatString="http://xx/inc/delete.aspx?ID={0}" 
25.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"+"\""); 
  } 

26.模板列 
<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" horiz></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; 
  } 
  }