c#常用编程方法 (二)

28.有些数据字段在程序控制中一般以1,2,3,4..等等进行判断,但是为了增强程序的易读性,需要使用enum将其所代表的意思表达出来,
可以单独做一个类来实现这个功能
如:
  namespace enumDemo
  {
    public enum RightEnum
 {
   //组,用户,角色维护
   GroupEdit=1,
   //功能项维护
   FunctionEdit=2,
   //权限点维护
   RightEdit=3,
 }
  }
引用时,直接用RightEnum.GroupEdit即代表1,这样会使程序更清晰。
29.弹出页返回时对上级页界面控件的编程
   dialogArguments.document.all.txtOriginRecord.value="none";
30.在单元格中检索按钮的onmouseover onmouseout事件的编程:
<TD align="right"><INPUT class="smbuttonStyle" id="Submit1" οnmοuseοver="blackFont(this)";" οnmοuseοut="whiteFont(this);"
type="submit" value="检索" name="submitb" runat="server" ></TD>
脚本程序:
function blackFont(param){
var blackVar = '#000000';
 try
 {
  if(!document.layers){
   param.style.color=blackVar;
  }
 }
 catch(e)
 {}
}
31.几种常用的快捷键
   Ctrl+A:全选
   Ctrl+S:保存
   Ctrl+F:查找
   Ctrl+Z:撤销
   F5:启动调试
   F10:单步调试,不进入下级函数体
   F11:单步调试,进入下级函数体
   F7: 页面和后台代码页的切换
   F1:帮助
32.获取服务器上虚拟应用程序根路径: Context.Request.ApplicationPath
   例如在web项目test下有一个Default1.aspx和一个Default2.aspx页面
   则从Default1.aspx跳转到Default2.aspx的代码为:
   Response.Redirect(Context.Request.ApplicationPath+"Default2.aspx");
33.一个实用的加密函数
     public static string Encrypt(string pToEncrypt, string sKey)
  {
   DESCryptoServiceProvider des = new DESCryptoServiceProvider();
   //把字符串放到byte数组中
   byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); 

   //建立加密对象的密钥和偏移量
   //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
   //使得输入密码必须输入英文文本
   des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
   des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
   MemoryStream ms = new MemoryStream();
   CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
   //Write  the  byte  array  into  the  crypto  stream
   //(It  will  end  up  in  the  memory  stream)
   cs.Write(inputByteArray, 0, inputByteArray.Length);
   cs.FlushFinalBlock();
   //Get  the  data  back  from  the  memory  stream,  and  into  a  string
   StringBuilder ret = new StringBuilder();
   foreach(byte b in ms.ToArray())
   {
    //Format  as  hex
    ret.AppendFormat("{0:X2}", b);
   }
   ret.ToString();
   return ret.ToString();
  }
34.一个解密字符串:
   public static string Decrypt(string pToDecrypt, string sKey)
  {
   DESCryptoServiceProvider des = new DESCryptoServiceProvider();

   //Put  the  input  string  into  the  byte  array
   byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
   for(int x = 0; x < pToDecrypt.Length / 2; x++)
   {
    int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
    inputByteArray[x] = (byte)i;
   }

   //建立加密对象的密钥和偏移量,此值重要,不能修改
   des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
   des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
   MemoryStream ms = new MemoryStream();
   CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
   //Flush  the  data  through  the  crypto  stream  into  the  memory  stream
   cs.Write(inputByteArray, 0, inputByteArray.Length);
   cs.FlushFinalBlock();

   //Get  the  decrypted  data  back  from  the  memory  stream 
   //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
   StringBuilder ret = new StringBuilder();

   return System.Text.Encoding.Default.GetString(ms.ToArray());
  }
35.程序中加密调用:Person.PerPwd = Security.Encrypt(this.PerPwd.Text, "&!#-?,:*");
   采用这种方法可以把加密后的字符串保存到数据库中,即使有人看到数据库也是一个加密后的字符串,增强了系统的安全性。
36.HTML页面中引用.css文件
     <LINK href="../css/main.css" type="text/css" rel="stylesheet">
     注意"../"的写法如果要引用css的页面为A页面,则../表示A页面的上一级目录
37.StringBuilder的用法
   StringBuilder sb=new StringBuilder();
   sb.Append("1=1");
   if(this.SearchValue.Text!="")
{
   sb.AppendFormat("and {0} like '%{1}%'",this.SearchType.SelectedValue,this.SearchValue.Text);
}
38.判断一个字符串是否属于另一个字符串一部分
   string temp="chinese";
   int flag=temp.IndexOf("ese")
   则 flag=4 ("ese"字符串在temp中的位置)
   如果 int flag=temp.IndexOf("iceworld");
   则 flag=-1("iceworld"不属于temp字符串的一部分)
39.获取与服务器上虚拟路径相对应的物理文件路径
   string s1=DateTime.Now.ToString("yyyyMM"); (200612)
   string s2=DateTime.Now.ToString("dd");  (29)
   path=Server.MapPath("/book/upload/"+s1+"/"+s2);
   if(!Directory.Exists(path))
{
  DirectoryInfo di=Directory.CreateDirectory(path);
}
40.再编程中可能会出现错误,不同的错误提示的信息不同,有些很难懂,我们可以在一个类中专门对一些常见的错误进行处理。
   如在ExceptionHandler类中定义这个的函数
   pullic static string DealError(string errmsg)
   {
    if(errmsg.IndexOf(Index was outside the bounds of the array.">=0)
    {
     return "数组超界,请检查!";
    else if( errmsg.IndexOf("There is no row at position 0")>=0)
    {
     return "第0行没有数据!";
    }
    }
   }
   这样在程序中为了方便读取异常信息,可以这样写
   string result=semiManage.Update();
   Response.Write("<script>alert('"+ExceptionHandler.DealErrorMsg(result)+"')</script>");
41.对于一些公用的函数,我们可以也单独建一个类进行集中处理
   1.安全转换字符串为数字
   public static decimal ConvertToNum(object obj)
 {
  try
  {
   return Convert.ToDecimal(obj);
   }
   catch
   {
    return 0;
   }
 }
    2.格式化数字
    public static string FormatDecimal(string NumString)
   {
    try
     {
       decimal tempvalue=Convert.ToDecimal(NumString);
       return tempvlue.ToString("0.####");
     }
     catch
     {
       return "";
      }
    }
    3.格式化日期
    public static string FormatDate(string DateString)
    {
     try
      {
      DateTime tempvalue=Convert.ToDateTime(DateString);
      return tempvalue.ToString("yyyy-MM-dd");
      }
      catch
      {
 return "";
      }
    }
    4.格式化字符串函数
    public string FormatString(string str)
    {
    if(str!=null)
    {
     str=str.Trim();
     str=str.Replace("'","’")
     str=str.Replace("|","");
    }
    return str;
   }
    5.检查字符串是否是合法数字
    public static bool IsNumber(string NumString)
    {
     return Regex.IsMatch(NumString,"^//d+(?://.//d+)?$");
    }
    其中Regex属于System.Text.RegularExpressions这个命名空间
42.为了系统安全,用户长时间不使用系统以致session过期时,需要重先登陆才能继续使用系统
   可以让每个页面继承一个基类BasicPage,基类中进行如下编码
   protected override void OnInit(EventArgs e)
   {
     base.OnInit(e);
     this.Load+=new System.EventHandle(this.MainPage_Load);
   }
   private void MainPage_Load(object sender,System.EventArgs e)
   {
    if(Context.User.Identity.IsAuthenticated)
    {    
    }
    else
    {
     Response.Redirect("~/Login.aspx");
    }
   }
43.在类的组织中,如果有些类有公用的一些方法,可以抽象出一个基类,让其它类都继承这个基类,也可以再为基类定义一个接口,
便于实现多重继承;简单介绍一下一种多重继承方法。
A基类--A接口--A类
A基类--B接口--B类
AB类: A基类,A接口,B接口
注意在AB类的构造函数中需要实例化A,B两个类,则可以调用AB中的方法。
44.验证一个TextBox(例如名字为txtName)为必须输入或者限定其某种输入格式的方法
添加一个RegularExpressionValidator,然后指定其ControlToValidate的属性为txtName,
ErrorMessage显示如果输入出错时提示的信息;validationExpression属性如果不填,将对输入是否为空进行校验;
如果输入一个正则表达式,则如果输入格式有误,会提示错误信息。
45.对用户输入的字符串进行加密
 string password=FormsAuthentication.HashPasswordForStoringInConfigFile(this.Password.Text,"MD5");
 其中 FormsAuthentication类属于System.Web.Security命名空间。
46.DataGrid中删除一条记录时,要实现立即刷新并且有相应删除提示(下边为Favorite.aspx页面的部分html代码)
   可以增加一个模版列
   <asp:TemplateColumn HeaderText="修改">
      <ItemStyle HorizontalAlign="Center"></ItemStyle>
   <ItemTemplate>
   <asp:HyperLink NavigateUrl='<%# "/Company/Chance/Favorite.aspx?type=DEL&Info_ID="+DataBinder.Eval(Container.DataItem,"Info_ID") %>' Runat="server" ID="Hyperlink1">
   删除
   </asp:HyperLink>
      </ItemTemplate>
   </asp:TemplateColumn>
然后在后台进行处理
if(Request.QueryString["type"].ToUpper() == "DEL")
this.DelFavorite();
在DelFavorite()函数中通过int Info_ID = Int32.Parse(this.operate.FormatString(Request.QueryString["Info_ID"].ToString()));
获取的ID就能够删除这一条记录并给出相应提示信息。
47.
Request.ServerVariables("Path_Info")
客户端提供的路径信息
Request.ServerVariables("Remote_Addr")
发出请求的远程主机的IP地址
Response.Redirect(Request.ServerVariables["PATH_INFO"]);
通过上面这种方式可以实现刷新本页面功能。
48.cs结构程序中的假进度条
   在主要处理函数开始处定义
   int roll=0;
   在主函数处理环节中
    if(roll%2==0)
    {
     this.ProgressBar(5000);
    }
    结尾处
    roll++;
    if(roll==100)
    {
      roll=0;
    } 
    private void ProgressBar(int count)
 {
  progressBar.Value=1;
  progressBar.Minimum=1;
  progressBar.Maximum=count;
  for(int step=1;step<count;step++)
  {
   progressBar.Value =step;
  }
 }
    这样主函数每执行两遍,会将进度条滚动一次,提示用户程序正在处理中。
49.从xml中取出相应信息(bak.config)
   <?xml version="1.0"?>
<ProjectConnection>
  <Project name="源数据库" select="true" remark="">
    <BasiceData>server=10.210.5.184;database=cgHott;uid=cghot;pwd=5656;Pooling=true;Max Pool Size=10;Min Pool Size=0;Connection Lifetime=300;packet size=1000</BasiceData>
    <BasiceData>server=10.210.5.154;database=cgHott;uid=cghot;pwd=565;Pooling=true;Max Pool Size=10;Min Pool Size=0;Connection Lifetime=300;packet size=1000</BasiceData>
  </Project> 
</ProjectConnection>
后台cs代码
  System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
 doc.Load("bak.config");
 System.Xml.XmlNode root = doc.DocumentElement;
 System.Xml.XmlNode target = root.SelectSingleNode("descendant::Project[@name='源数据库']");
 strChecked = target.Attributes["select"].Value;
 string strCon=target.ChildNodes[0].InnerXml;
则能够取到  strCon="10.210.5.184;database=cgHott;uid=cghot;pwd=5656;Pooling=true;Max Pool Size=10;Min Pool Size=0;Connection Lifetime=300;packet size=1000"
50.向xml文件中写入数据
strData为需要写入的字符串
 System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
 doc.Load("bak.config");
 System.Xml.XmlNode root = doc.DocumentElement;
 System.Xml.XmlNode target = root.SelectSingleNode("descendant::Project[@name='源数据库']");  
 if( target != null )
  {
   target.ChildNodes[0].InnerXml = strData;        
   System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter("bak.config",null);
   writer.Formatting = System.Xml.Formatting.Indented;
   doc.Save(writer);
   writer.Close();    
  }  

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值