我们在做.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)">
测试已通过~~~如有问题请大家指正!
我在一些书上,经常看到一些不错了例子,单从代码上而言,没有任何的问题,但在实际开发过程中,有时却不是很实用,因为他们往往是孤立的,如果我们把它完全的拿过来又感觉非常麻烦,特别是对库反复操作时,我们写了大量的代码去只能完成几个很少的东西,真是麻烦透顶!效率很低,所以我结合了我在实际开发过程中的一点经验,和大家分享!
首先,对数据库的连接,我们可以统一写在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); //调用公共类,执行添加数据!如果是删除和更新,用法同新增一样。
}
现在经常能碰到客户要求打印报表的问题,我们知道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();
}
}
}