快捷代码

1. 打开新的窗口并传送参数:

   
传送参数: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("\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

}

12.Panel 横向滚动,纵向自动扩展

<asp:panel ></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"

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.读取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使用:

  添加删除确认:

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(’确认删除此项吗?’);"); 
  } 
 } 
}

  样式交替:

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’;" ; 

}

  添加一个编号列:

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();

  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);

33.在自己的网站上登陆其他网站:(如果你的页面是通过嵌套方式的话,因为一个页面只能有一个FORM,这时可以导向另外一个页面再提交登陆信息)

<SCRIPT language="javascript"> 
<!-- 
 function
gook(pws) 
 { 
  frm.submit(); 
 } 
//-->

</SCRIPT> <body leftMargin="0" topMargin="0"
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"); 
}

写文本文件

TextWriter tw = new StreamWriter("date.txt");
tw.WriteLine(DateTime.Now);
tw.Close();

读文本文件

写法一
Textreader tr = new StreamReader("date.txt");
Console.WriteLine(tr.ReadLine());
tr.Close();
写法二
Textreader tr = new StreamReader("date.txt");
Console.WriteLine(tr.ReadLine());
tr.Close();
 

其实,上面的写文本文件和读文本文件,都有一个bug,当程序中有代码改变当前目录时,date.txt的目录就是这个被改变的目录,而不是我们期待的当前应用程序所有的目录。所以,推荐的写法是这样的

string file = "Cnblogs.txt";
string cnblogs = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, file);
if (File.Exists(cnblogs))
{
using (StreamReader reader = File.OpenText(cnblogs))
{
rtfCnblogs.Text = reader.ReadToEnd();
}
}

加入了完整的文件名路径,这样才是正确的读写文件的方法。如果是ASP.NET应用程序,可以用Server.MapPath代替,

或是HttpContext.Current.Request.PhysicalApplicationPath。

跨线程访问控件

delegate void dSetText(string text);
private void SetText(string text)
{               
  if (InvokeRequired)      
  {    
        dSetText d = new dSetText(SetText);       
        this.Invoke(d);      
  }  
      else
{      
       this.textBox1.Text = text; 
      }
}
 

调用Code Smith模板

CodeTemplateCompiler compiler = new CodeTemplateCompiler(@"c:\test.cst");
compiler.Compile();

if (compiler.Errors.Count == 0){
CodeTemplate t = compiler.CreateInstance();
this.txtSql.Text = t.RenderToString();
}
compiler.Cleanup();
compiler = null;


如果是x64的系统,请设置Target为x86(need to set the program to compile as X86)。

设置程序集运行时版本


当旧的程序是以.NET 2.0编译的,又无法升级到.NET
4.0,而有部分组件是以.NET编译的,在运行时,会抛出混合程序集的异常,需要修改配置文件,请参考这个片段

<?xml version ="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
</startup>
</configuration>

这个需求源于,Code Smith 5.0是以.NET
2.0编译的。在我的代码生成可器中,它用来反射读取程序集信息,生成代码,而这个被读取的程序集的Target是.NET
4.0,这时,你需要这个技巧来解决运行时的问题。

另一个场景是ILMerge,用于合并.NET程序集的工具,只有.NET 2.0的版本,要可以合并.NET
4.0的程序集,也需要运用这个技巧(ILMerge config file for executing within the CLR v4.0
runtime)。

枚举类型的反射调用


在有些场景,我们需要把反射的参数值传到对象的方法中,而参数值是enum类型,这实现起来并不简单。

请参考codeproject中这的篇文章《Setting Enum‘s Through Reflection 》,它的经典代码是这样的

int enumValue1 = (int)enumItem1.GetValue(enumType);
int enumValue2 = (int)enumItem2.GetValue(enumType);
int currentValue = (int)flagsInfo.GetValue(remoteObject, null);
int newValue = currentValue | enumValue1 | enumValue2;

举例说明,我需要反射生成ReportViewer控件的对象实例,并且要传一个Mode值给它(Server,LocalReport)以表示是本地报表,还是取服务器报表。这种情况下,非得用反射的方式传入值。

在我的.NET通用平台中,也应用到这项技术,以反射方式创建CrystalReportViewer报表控件,再传入参数值。这种方式稍微复杂一些,但是对比它带来的灵活性,是非常值得的。

目录选择功能

FolderBrowserDialog dlg = new FolderBrowserDialog();
if (!string.IsNullOrEmpty(txtPath.Text))
dlg.SelectedPath = txtPath.Text;
if (dlg.ShowDialog() == DialogResult.OK)
{
txtPath.Text = dlg.SelectedPath;
}
 

文件选择功能

OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "All File(*.*)|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{
txtPath.Text = dlg.FileName;
}

Filter是经常容易忘记的选项,再举一个例子

dlg.Filter = "Xml file (*.xml)|*.xml|All Files|*.*";

读取嵌入到程序集中的资源文件

Assembly assm = Assembly.GetAssembly(typeof(DatabaseCleanup));
string file = "DatabaseCleanup.txt";
Stream input = assm.GetManifestResourceStream("DataLoader.Resource" + "." + file);
StreamReader reader=new StreamReader(input);
string sql=reader.ReadToEnd();
reader.Close();

只要可能,对只读的不需要修改的配置选项资源(SQL语句,文本文件),尽可能的使用Embedded Resource方式。

微软企业库的调用方式


经过一层简单的封装,以下面的这种方式来调用企业库以访问数据库

EnterpriseLibraryShared.ConnectonString =ConnectionString;
Microsoft.Practices.EnterpriseLibrary.Data.Database m_commonDb = DatabaseFactory.CreateDatabase();
DbCommand cmd = m_commonDb.GetSqlStringCommand(sql);
int rowAffected = m_commonDb.ExecuteNonQuery(cmd);

我把企业库的连接字符串放到一个static class中,这样可以简化调用方式,不必要一定要加App/Web.config文件。

监控文件或目录的变化


这个功能比较常用,在Data Loader也有一个PDF
Watcher的程序,以监控指定的目录是否有新加入的PDF文件(可能来自远程传输,或是从网页中下载回来),然后对它进转换,导入到文档服务器中。

public void StartMonitor(string path)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = path;

watcher.NotifyFilter = NotifyFilters.FileName;
// Only watch pdf files.
watcher.Filter = "*.pdf";
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.EnableRaisingEvents = true;
}

// Event handler for when a file is created in the watched folder
private void OnChanged(object source, FileSystemEventArgs e)
{
string word = DocumentUtility.ConvertPdfToDoc(e.FullPath);
}

快捷代码,码迷,mamicode.com

时间: 2024-08-08 23:40:53

快捷代码的相关文章

sublimi 自定义快捷代码

选择打开tools ->developer->new snippet <snippet> <content><![CDATA[Hello, ${1:this} is a ${2:snippet}. ]]></content> <!-- Optional: Set a tabTrigger to define how to trigger the snippet --> <!-- <tabTrigger>hello&l

清除浮动快捷代码

clear{     overflow: auto/hidden; zoom: 1; //zoom: 1; 是在处理兼容性问题 } .clear:after{display:block;clear:both;content:"";visibility:hidden;height:0} .clear{zoom:1}

创建自己的代码片段(CodeSnippet)

前言 工作中经常会写一些重复的代码片段,如自动属性.for循环.Action等等,针对这种情况,VisualStudio已经给我们提供了一个非常方便的功能--代码片段,是我们可以简单的输入几个字母就能生成大段代码. 但是,工作中总会遇到一些重复代码是VisualStudio没有提供的,这时就需要我们自己去编写片段模板了,本文我将简单讲一下如何创建并使用自己的代码片段. 一.模板文件在哪 在工具-代码片段管理器(快捷键Ctrl+K,B)可以打开代码片段管理器,如下图: 选择模板所属语言,之后就可以

快捷使用AndroidStudio开发工具

从2015年下半年开始,Google为了简化Android的开发工作,不再支持对Eclipse等开发工具的更新,主推由Google开发的AndroidStudio开发工具. 到目前为止,相信还有不少的Android开发同行使用的Eclispe做为开发工具,为了顺序潮流,为了更方便地开发出高效的Android应用,我们应该尽快从 Eclipse上转移到AndroidStudio开发工具上来.从去年9月份开始用AndroidStudio开发工具到现在已经半年有余了,把工作中用到的以及在网上学 习到的

【转】elipse的代码提示小结

1.次方法用于没有一点提示的情况:依次打开eclipse上面的windows --preferences --java --editor -- content assist ,在右上方有一行"select the proposal kinds contained in the 'default' content assist list" 下面,勾选Java Prolosals 复选框,保存退出即可. 2.此种方法用于打出单词缩写没有提示的情况(例如:打出syso没有提示):依次打开ec

MyEclipse用Alt+/不提示代码

MyEclipse用Alt+/不提示代码,原因: 1.MyEclipse 代码提示的快捷代码不是Alt+/: 2.Alt+/ 没有分配给单词提示 恢复Alt+/快捷键: 1.菜单Window-->Preferences-->Genaral(有的版本:Workbench)-->keys 下, 设置Content Assist 的快捷键,Binding的值为Alt+/(同时按下Alt和/) 2.菜单Window-->Preferences-->Genaral(有的版本:Workb

单例模式探索

单例模式OC/C++探索 以前写OC中的单例很固定,一直都这样写,后来我就把它放在快捷代码块里面,只要输入singleton就直接输出这段代码 + (instancetype)instance { static Class *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[self alloc] init]; }); return sha

[Objective-c 基础 - 2.5] .h和.m文件,点语法,成员变量作用域

A. 命令行编译和XCode编译 1.在存在多个.m源码实现文件的情况下,若根据需要引入.m文件,使用命令行仅仅编译主.m文件即可,但是XCode会同时编译全部.m文件,会发生编译错误(重复定义全局变量或函数) 解决方案: 使用.h和.m文件,分开声明和定义 B.XCode功能 1.自动生成.h和.m 2.保存.引用快捷代码块 3.方法索引注释 #pragma mark 方法的说明 #pragma mark - 方法的说明 加入分组线 4.链接错误查看,使用左上角的感叹号logo C.点语法 实

Drupal 7 模块开发 建立模块 第一个页面(hook_menu)

建立模块请参考 <Drupal 7 模块开发 建立> 如果你要支持中文,文件格式必须保存为 UTF-8,NO BOM ------------------------------ hook_menu 定义菜单项和页面反馈. 我们要用自己模块名替换 hook.在这里我们建立一个 my_first_module_menu() 在 my_first_module.module文件里 <?php function my_first_module_menu() { $items = array()