智能导航的方法SmartNavigation

(百度和网页 http://wayneliu.ms.mblogger.cn/Rss.aspx?CategoryID=1015 的作者无关,不对其内容负责。)
http://wayneliu.ms.mblogger.cn/ 我的.net世界 zh-CHS RSS Generated by MBlogger Blogs wayneliu http://wayneliu.ms.mblogger.cn/posts/7411.aspx Mon, 26 Jul 2004 14:51:00 GMT http://wayneliu.ms.mblogger.cn/posts/7411.aspx http://wayneliu.ms.mblogger.cn/comments/7411.aspx http://wayneliu.ms.mblogger.cn/posts/7411.aspx#feedback 1 http://wayneliu.ms.mblogger.cn/comments/commentRss/7411.aspx http://wayneliu.ms.mblogger.cn/trackback.aspx?ID=7411

我们在做.net开发时,经常能碰到这样的情况,页面很长,而我们一般用的都是服务器端控件,用服务器端控件有这样一个缺点,就是控件每次都要和服务器交互,而产生页面的刷新,试想一下,如果页面很长,而页面中的控件又很多,每次都要刷新到页面顶部,那我们在填写资料时页面每刷新一次我们都要拖动一次滚动条,这样实在是很麻烦,问题由此产生,一些人用SmartNavigation 方法,这个方法可行,但它一般会与页面中的验证控件或是JS 产生冲突,从而导致页面的失效,在这我找到一个用JS来解决问题的办法供大家参考

环境为VS.NET 2000和VS.NET 2003通过

<script language="javascript">
function GetCookie (name)
{
   var arg = name + "=";
   var alen = arg.length;
   var clen = document.cookie.length;
   var i = 0;
   while (i < clen)
   {
       var j = i + alen;
       if (document.cookie.substring(i, j) == arg)
       return getCookieVal (j);
       i = document.cookie.indexOf(" ", i) + 1;
       if (i == 0) break;
   }
 return null;
}

function getCookieVal (offset)
{
   var endstr = document.cookie.indexOf (";", offset);
   if (endstr == -1)
     endstr = document.cookie.length;
     return unescape(document.cookie.substring(offset, endstr));
   }
function SetCookie (name, value)
   {
     document.cookie = name + "=" + escape (value)
   }
</script>

在body中加入
<body bgColor="#f1f5f5" leftMargin="0" topMargin="0" rightMargin="0" MS_POSITIONING="GridLayout" οnlοad="document.body.scrollTop=GetCookie('posy')" οnunlοad="SetCookie('posy',document.body.scrollTop)">

测试已通过~~~如有问题请大家指正!

wayneliu http://wayneliu.ms.mblogger.cn/posts/3723.aspx Fri, 16 Apr 2004 16:38:00 GMT http://wayneliu.ms.mblogger.cn/posts/3723.aspx http://wayneliu.ms.mblogger.cn/comments/3723.aspx http://wayneliu.ms.mblogger.cn/posts/3723.aspx#feedback 1 http://wayneliu.ms.mblogger.cn/comments/commentRss/3723.aspx http://wayneliu.ms.mblogger.cn/trackback.aspx?ID=3723

我在一些书上,经常看到一些不错了例子,单从代码上而言,没有任何的问题,但在实际开发过程中,有时却不是很实用,因为他们往往是孤立的,如果我们把它完全的拿过来又感觉非常麻烦,特别是对库反复操作时,我们写了大量的代码去只能完成几个很少的东西,真是麻烦透顶!效率很低,所以我结合了我在实际开发过程中的一点经验,和大家分享!

首先,对数据库的连接,我们可以统一写在web.config页中,这样以后系统如果需要更改连接时,我们不用到每一页中去改,只需在config中改一次就可以了,非常的方便!具体操作如下:

在web.config页中

<configuration>
   
  <system.web>

         ........................................

  </system.web>
  <appSettings>
  <add key="ConnectString" value="server=webserver;UID=sa;PWD=km;DATABASE=testservice;connect timeout=3220"/>
 </appSettings>
</configuration>

以下是建立公共类Public_Class.cs 实现对数据库的操作,具体操作如下:

先在项目中添加新类,命名为Public_Class.cs (名称自定义,我这里叫Public_Class),在Public_Class中添加代码如下:

using System;
using System.Data .SqlClient ;
using System.Configuration;
using System.Data;
namespace common_function
{

 public class Public_Class
 {

     private static string ConnectString = ConfigurationSettings.AppSettings["ConnectString"]; //找到对数据库的连接字符串

   public static void Execute_Command(string sql_str)        //执行插入、删除、更新语句
  {
   SqlConnection myConnection = new SqlConnection(ConnectString);
   SqlCommand myCommand = new SqlCommand();
   try
   {
    myConnection.Open();
    myCommand.Connection = myConnection;
    myCommand.CommandText = sql_str;
    myCommand.ExecuteNonQuery();
   
   }
    
   catch(Exception err)
   {
    throw err;
   }
   finally
   {
    myCommand.Dispose();
    myConnection.Close();
    myConnection.Dispose();
   }

}

  public static string  Judge_Repeat(string sql_str)
  {                                                                      //判断表中返回的数量

   SqlConnection  myConnection  =  new  SqlConnection(ConnectString);  
   SqlCommand  myCommand  =  new  SqlCommand  (sql_str,myConnection);
   myCommand.Connection.Open();
   SqlDataReader Dr;
   Dr=myCommand.ExecuteReader();
   try
   {
    Dr.Read();     
    return Dr[0].ToString ();
  
   }
   catch(Exception err)
   {
    return "";
   }
   finally
   {
    Dr.Close();
    myCommand.Connection.Close();
   }
  
  }

   public static DataTable Get_Select_Table(string sql_str)           //执行查询,返回DataTable
  {
   SqlConnection myConnection;
   myConnection = new SqlConnection( ConnectString);                  
   SqlDataAdapter myCommand = new SqlDataAdapter(sql_str, myConnection);
   DataSet ds = new DataSet();
   myCommand.Fill(ds, "t1");
   return ds.Tables ["t1"];

  }

}

}

//在.cs页面中的实际应用如下

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Configuration;
using common_function;

//在DataGrid中查询显示

  private void  first_BindGrid()  
  {
   string sql_str="select * from repair_instead_detail ";
   MyDataGrid.DataSource =Public_Class.Get_Select_Table(sql_str);//此时返回值为DataTable类型
   MyDataGrid.DataBind();//绑定显示
  }

//新增数据并判断是否有重复项

  private void insert()
  {

       string instead_num=Public_Class.Judge_Repeat("select count(*) from repair_instead_master where instead_no='"+Txt_code.Text+"'");
    if(instead_num!="0")
    {
     Response.Write ("<script language=javascript>alert('此退机单号已存在!')</script>");
     return;
    }

    string sql_insert=“insert into  repair_instead_master  values(...........)“; //sql语句

    Public_Class.Execute_Command(sql_insert); //调用公共类,执行添加数据!如果是删除和更新,用法同新增一样。
  }

wayneliu http://wayneliu.ms.mblogger.cn/posts/3676.aspx Thu, 15 Apr 2004 17:38:00 GMT http://wayneliu.ms.mblogger.cn/posts/3676.aspx http://wayneliu.ms.mblogger.cn/comments/3676.aspx http://wayneliu.ms.mblogger.cn/posts/3676.aspx#feedback 5 http://wayneliu.ms.mblogger.cn/comments/commentRss/3676.aspx http://wayneliu.ms.mblogger.cn/trackback.aspx?ID=3676

       现在经常能碰到客户要求打印报表的问题,我们知道B/S架构下,打印一般只有两种,一种用水晶报表,一种就是将数据倒入到Excel中进行打印,相比于第一种来说,Excel的优势还是很明显的!首先,水晶报表的价钱非常昂贵,对于一个中小型软件开发公司来说,不可把那么多资金投入到购买相关的开发工具产品当中,如果选用vs.net 自带的报表,又经常难以满足客户的真正需要。如果用倒入Excel的办法,一来可以节省不小的资金,二来也可以减短开发的周期,那我们何乐而不为呢!!!

下面我举个实际的例子,以下的代码测试已通过

//在.cs 里

using System.Configuration; //须在Config中指定连接的数据库
using common_function; //声明 namespace
using System.Data .SqlClient;

  private void Page_Load(object sender, System.EventArgs e)
  {
       if(!Page.IsPostBack)
       {
            BindGrid();    
        }
  }

private void BindGrid()

{

   string sql_str="select * from repair_now ";
   MyDataGrid.DataSource =Public_Class.Get_Select_Table(sql_str); //调用公共类返回datatable
   MyDataGrid.DataBind();

   //导入Excel表时,先求数量
            string sql_count="select count(*) from repair_now ";
            string temp=Public_Class.Judge_Repeat(sql_count);
            ViewState["count"]=temp;

}

  private string Table_Name()
  {
   string tn="To_Excel";
   return tn;
  }
  private void ToExcel(System.Web.UI.Control ctl,string Table_Name) 
  {
   HttpContext.Current.Response.AppendHeader("Content- Disposition","attachment;filename="+""+Table_Name+".xls");
   HttpContext.Current.Response.Charset ="gb-2312"; 
   HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default ;
   HttpContext.Current.Response.ContentType ="application/ms-excel/ms-  word";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword
   ctl.Page.EnableViewState =true;   
   System.IO.StringWriter  tw = new System.IO.StringWriter() ;
   System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw);
   
   ctl.RenderControl(hw);
   HttpContext.Current.Response.Write(tw.ToString());
   HttpContext.Current.Response.End();
  }

  private void Button_Excel_Click(object sender, System.Web.UI.ImageClickEventArgs e)//倒入Excel按钮事件
  {
       MyDataGrid.PageSize=Convert.ToInt32(ViewState["count"].ToString());
       BindGrid();
       MyDataGrid.PagerStyle.Visible =false;
       ToExcel(MyDataGrid,Table_Name());
   }

以下是被调用公共类 Public_Class.cs

using System.Data .SqlClient ;
using System.Configuration;

 public class Public_Class
 {

private static string ConnectString = ConfigurationSettings.AppSettings["ConnectString"];

  public static DataTable Get_Select_Table(string sql_str)           //执行查询,返回DataTable
  {
   SqlConnection myConnection;
   myConnection = new SqlConnection( ConnectString);                  
   SqlDataAdapter myCommand = new SqlDataAdapter(sql_str, myConnection);
   DataSet ds = new DataSet();
   myCommand.Fill(ds, "t1");
   return ds.Tables ["t1"];

  }

  public static string  Judge_Repeat(string sql_str)
  {                                                                    

   SqlConnection  myConnection  =  new  SqlConnection(ConnectString);  
   SqlCommand  myCommand  =  new  SqlCommand  (sql_str,myConnection);
   myCommand.Connection.Open();
   SqlDataReader Dr;
   Dr=myCommand.ExecuteReader();
   try
   {
    Dr.Read();     
    return Dr[0].ToString ();
  
   }
   catch(Exception err)
   {
    return "";
   }
   finally
   {
    Dr.Close();
    myCommand.Connection.Close();
   }
  
  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值