public class WebForm1 : System.Web.UI.Page
{
//声名全局变量 String strconn=ConfigurationSettings.AppSettings["conn"];
String sql="select * from class order by id desc";
SqlConnection objconn;
SqlDataAdapter adapter; protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.TextBox name;
protected System.Web.UI.WebControls.TextBox sex;
protected System.Web.UI.HtmlControls.HtmlTable Table1;
protected System.Web.UI.WebControls.DataGrid show;
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
LoadGrid();
}
}
//绑定DataGrid的函数
private void LoadGrid()
{
Conn();
adapter = new SqlDataAdapter(sql,objconn);
DataSet ds = new DataSet();
//adapter.Fill(ds,Table);
adapter.Fill(ds);
disconn(); show.DataSource=ds.Tables[0];
show.DataBind();

}

//连接数据库函数
private void Conn()
{
if (objconn == null)
objconn=new SqlConnection(strconn);
//objconn.Open();

if (objconn.State == ConnectionState.Closed)
objconn.Open();

} //conn对像关闭函数
private void disconn()
{
objconn.Close();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void Button1_Click(object sender, System.EventArgs e)
{
if(Page.IsValid)
//if(!IsPostBack)
{
Conn();
adapter=new SqlDataAdapter(sql,objconn);
SqlCommandBuilder cb = new SqlCommandBuilder(adapter);
DataSet dsTemp = new DataSet("class");
adapter.Fill(dsTemp);
DataRow r = dsTemp.Tables[0].NewRow();
r["name"]=name.Text;
r["sex"]=sex.Text;
dsTemp.Tables[0].Rows.Add(r); adapter.Update(dsTemp);
disconn(); LoadGrid();
}
}
}

解决方案 »

  1.   

    重载页面 是哪个?
    是 Server.Transfer 吗?
    我加上这个了,重载的时候文本框里 是没数据了,以前我点填加的时候 数据填加了 文本框里还有数据。
    但是 我一刷新页面 那数据还是又填加上了。
      

  2.   

    防止回发操作了吗?象VB版的,要确定page.ispostpage 是false 才添加数据
      

  3.   

    在 IE 上面,它会警告用户“不重新发送信息,则无法刷新......”。你用的是 IE 吗?如果是其他浏览器,可能程序比较偷工减料,没有这个警告信息。
      

  4.   

    这是因为,在GRID中,添加数据之后,它并没有刷新页面,还残留着上一次添加的信息,一刷新,它就添加一条记录,实际上更新的时候也一样,只不过,更新不会添加数据而已.
    简单的方式可用如下方式解决:
    Page.RegisterStartupScript(Guid.NewGuid().ToString().Trim(), "<script language='javascript'>window.location.href = window.location.href;</script>");
    如上方式可解决问题,但如果你有分页,它将返回到第一页.还可以在page_load 加如下语句:
    page.smartNavigation=true
    但会与验证控件产生冲突还可以用如下语句:关于页面刷新的问题~~~~
    我们在做.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" onload="document.body.scrollTop=GetCookie(''posy'')" onunload="SetCookie(''posy'',document.body.scrollTop)">测试已通过~~~如有问题请大家指正!
      

  5.   

    vb 代码:
    if not isposback then
    '加数据操作
    end if
      

  6.   

    Server.Transfer 没有影响到浏览器,所以不能防止重复提交按钮事件。应该使用客户端的重定向功能 response.redirect 来重载页面。
      

  7.   

    如果你的页面响应了按钮事件,可以在此事件中设置一个端点,看看是否再按刷新的时候次按钮被重新触发了!如果是,那么这不仅仅会触发按钮事件,而是会触发所有事件。一般来说这种机制是正常的,例如选择菜单、修改数据的时候。但是个别“新增”操作就需要防止这种刷新(当然,不太紧要的程序也可以不做防备)。上面正好提到刷新时可能使得datagrid回到第一页的问题。实际上,在正常浏览datagrid的时候,如果定向到后面一页,然后执行浏览器的刷新操作,如果你的程序也回到第一页,那么这个问题显然是属于使用datagrid本身的问题,到外部环境去解决往往“凑巧”搞对了但是换个地方又会出错。datagrid在自身状态中并不保存页号!不知道为什么微软这么弱,反正我自己设计控件决不会犯这种错误。所以,如果 datagrid是分页的,你的程序必须自己在wiewstate中保存datagrid的当前页号并且在绑定数据的时候重新设置(注意要处理待绑定的数据少于期望的页数的意外情况)。
      

  8.   

    其实 datagrid 在自身状态中几乎什么也不保存。所以要想做出比较“友好”的程序,应该在datagrid上面扩展一些功能。除了数据需要重新绑定(节省服务器或者页面资源),其他状态应该能够保持。以及能够给出数据的流水号(不是页面内的)等等。
      

  9.   

    上面我写的东西,有些小错误,多了一点单引号,下面再贴一个修改后的.<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>
    </HEAD><body bgColor="#f1f5f5" leftMargin="0" topMargin="0" rightMargin="0" MS_POSITIONING="FlowLayout" onload="document.body.scrollTop=GetCookie('posy')" onunload="SetCookie('posy',document.body.scrollTop)">