zoukankan      html  css  js  c++  java
  • .Net开发小技巧

    .NET项目开发中的小技巧

     

     

    1、不要频繁的创建对象。。。这个损失是巨大的。。。new太多了,后果比较严重。

    2、打开数据库后要及时的关闭连接,如果你不能做到一个open后跟一个close,那也没关系,用Using满足你偷懒的欲望吧

    3、别太迷信string str1 = "";和string.empty之间的差异,性能上和你想的完全不一样。放心大胆的使用""吧。

    4、如果你的项目比较大,或者你的IIS服务器配置不太高,那么,我还是建议你多用存储过程,减少前端服务器的压力。不过绝大多数项目来说,你去写你的SQL语句也是没问题的。

    5、接第四条,如果你决定抛弃存储过程,那也没关系,但是,我还是建议你多优化一下你的SQL语句,多调试才是正途;本人曾经因为写了一个垃圾的SQL语句,导致一个百万万记录的表加载了整整17秒。

    后来才发现由于自己习惯性的代码导致了错误,改正后连桌面数据库都能在1秒内处理完毕,尽量抛弃排序吧。

    6,都说string类型的+导致性能开销,但是如果你+的不太多,达不到几十个的话,还是可以放心大胆的+ 。不过,使用tostring()还是必要的,节省开支。 

    7,不要在你的代码里进行硬编码,见到一些朋友整个项目里都是连接字符串,这样导致的开销太大了,在本地测试可能还没什么,要是应用到实际项目中,后果非常严重。推荐使用config文件,建议只使用一个连接字符串。因为ADO.NET启用连接池的话,同一个连接字符串的资源是可以多次利用的。 

    8,在你开发ASP.NET程序时,记得把数据缓存一下。。。但是不要缓存的太多。。。

    9,使用SqlDataReader 而不是DataSet,尽量使用SqlDataReader ,别为了2行代码的偷懒使用DATASET,性能不是一个数量级的。

    10,不要使用过多的事务,导致不必要的开销;不要把反射用的那么频繁;不要大量使用try...catch...,这对性能来说是致命的,但是一旦你用了,你也不要随意的抛出异常,因为用户是看不懂的。。。尽量自己编写异常处理模块,记录日志,给用户一个良好的使用体验。

    11,在ASP.NET中使用IsPostBack减少开销。 

    12,不要在Page_Load 里面进行数据绑定,尽量在Page_PreRender里面进行数据绑定操作。 

    13,不要去做类似于开发汽车轮子的事情,总是有人说微软给的控件不好用,试图自己开发一个或者做类似的事情,其实是没有意义的。实在有空的话,看看微软提供的控件源代码,如果感觉自己做的比他还好,可以自己二次开发。 

    14,发布网站的时候记得禁用调试模式。 

    15,不要为了分层而分层,好多次碰到有新人求助,我发现北大X鸟的学员总是容易出现这样的情况,分了好多层,但是却不知所以然。。。工程里随处可见的连接字符串,到处都是拼接SQL

    语句的影子,一个界面上拖了数不清的控件。。。然后问:为什么我的程序这么大,这么卡。。。

    16,不要在程序里使用大量的控件【或者图片】,原则上,能少用就少用,要提高开发效率,降低维护的难度。 

    17,不要把图片上传到数据库里,这样会加重数据库的负担,无论是显示还是插入,都是性能的瓶颈。而且以后也会取消Image字段。。。正确的做法是数据库里保存路径就可以了。。。 

    18,有空的话,可以自己常识安装多种数据库,例如,SQL SERVER2005/2008 系列数据库,可以自己选择2,3个不同的版本安装,因为不同的版本,有不同的特性,连接字符串也是不同的。不要出现给XP安装SQL SERVER企业版的笑话。

    19,不要认为自己会做ASP.NET开发就沾沾自喜,抽空自己从开发到部署都做一次,不要以后到了服务器上,却不知道如何在IIS上部署你的程序。。。

    20,可以多从网上看看技术书籍,或者拷贝一些代码,但是自己要理解其中的原理,做出改进,不要为了COPY而COPY

    ,不然多年以后,可能离开了浏览器,就发现自己连个基本的数据访问都写不好。【绝非夸张,很多人都是如此】 

    21,学无止境,不要认为自己懂得ASP.NET就一路顺风了。。。这只是.NET平台中一个很小的解决方案罢了,没什么可自豪的,应该顺便学习一下WINFORM开发,数据库开发,智能设备开发,MDX开发,等等等等。再说了,.NET

    现在开源了,我们没有理由说自己学不好。也不要把自己绑定在特定的平台上,有条件的朋友,可以自己常识在LINUX上开发一下自己的.NET程序。 

    22,不要过多的使用AJAX,说白了只是一个不太成熟的解决方案罢了。它也不能为你的项目解决压力。更不能减少服务端的交互。。。拖拽几个AJAX控件,实在没意思。让美工去做就足矣。 

    23,不要什么项目都顺手给他捆绑到SQL SERVER上去,成本是很高的,尤其是一些桌面级应用的开发,用ACCESS

    就足矣了,小型应用,用MYSQL也能满足需求。

     

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

    }

    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("onmous

     

    eover","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(" ");

        }

        strBuilder.Append(ex.Message).Append(" ").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.EventL

     

    ogSourceName );

         //写入事件日志

         eventLog.WriteEntry(messageText, LogEntryType);

        }

       catch {} //忽略任何异常

      }

     } //class ApplicationLog

    }

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

    <asp:panel style="overflow-x:scroll;overflow-y:auto;"></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>

      

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

      }

     }

    }

      

    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:yy

     

    yy-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" />

    ......

    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")%>’

    />

    <asp:RegularExpressionValidator id="revS" runat="server" C ErrorMessage="must be integer" Validati />

    </ItemTemplate>

    </asp:TemplateColumn>

    <asp:TemplateColumn HeaderText="单价">

    <ItemTemplate>

    <asp:TextBox id="DanJian" runat=’server’ Text=’<%# DataBinder.Eval(Container.DataItem,"DG_

     

    DanJian")%>’

    />

    <asp:RegularExpressionValidator id="revS2" runat="server" C ErrorMessage="must be numeric" Validati />

    </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.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 C+Content+"’);"+"if(retValue){window.location=’"+PageTarget+"’;}";

     C + 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["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");

    }

      

    最好将你的aspnetmenu升级到1.2版

     

     

     

  • 相关阅读:
    java Activiti 工作流引擎 SSM 框架模块设计方案
    自定义表单 Flowable 工作流 Springboot vue.js 前后分离 跨域 有代码生成器
    数据库设计的十个最佳实践
    activiti 汉化 stencilset.json 文件内容
    JAVA oa 办公系统模块 设计方案
    java 考试系统 在线学习 视频直播 人脸识别 springboot框架 前后分离 PC和手机端
    集成 nacos注册中心配置使用
    “感恩节 ”怼记
    仓颉编程语言的一点期望
    关于System.out.println()与System.out.print("\n")的区别
  • 原文地址:https://www.cnblogs.com/Mryang-blog-cn/p/DotNetSkill.html
Copyright © 2011-2022 走看看