none
页面跳转问题 RRS feed

  • 问题

  • 代码
     //删除选定
        protected void LnkDelete_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < GVCp.Rows.Count; i++)
            {
                bool isChecked = ((CheckBox)GVCp.Rows[i].FindControl("CheckSingle")).Checked;
                if (isChecked)
                {
                    string strSql = "Delete From Company Where [id]=" + GVCp.DataKeys[i].Value + "";
                    DB.RunExecuteNonQuery(strSql);
                }
            }
           
            Response.Write("<script>window.location.href='company.aspx';</script>");
           // Response.Redirect("company.aspx");
        }

    这个是我删除gridview上 选择checkbox 后点删除按钮执行的代码,我想删除后页面刷新本页起到更新作用,但是我用  Response.Write("<script>window.location.href='company.aspx';</script>");
           // Response.Redirect("company.aspx"); 这2个 那个删除后页面都没刷新 要自己点ie上刷新才更新数据.我以前做的时候同样写法都可以.但是设置断点执行却有执行跳转页面代码.为什么那
    不用羡慕----那,只是个传说!
    2009年4月10日 7:14

答案

  • 楼主,你好,

    问题出现在(测试通过)不属于跳转的问题,

        public static int RunExecuteNonQuery(string strSql)
        {
            OleDbConnection SqlCon1 = new DB().GetCon();
            //OleDbCommand cmd = CreateCmd(strSql);                         //失败
            //OleDbCommand cmd = CreateCmd(strSql,SqlCon1);            //成功
            int i = (int)cmd.ExecuteNonQuery();
            SqlCon1.Close();
            return i;
        }

    调用CreateCmd(strSql)方法时,方法里面也有一个OleDbConnection Con = new DB().GetCon();对象,
    但是SqlCon1对象在这里就变得没有任何作用,只是开了,然后关了,但是,对于Con对象,始终没有关闭。

    其他地方没有修改,就是调用你的另外一个重载方法就成功了,
    同时,Response.Redirect("Company.aspx"); 可以采用,GVCp.DataBind();

    jon.valett@gmail.com
    2009年4月10日 16:32
    版主

全部回复

  • Response.Redirect("company.aspx?tmp=" + (Guid.NewGuid()).ToString());

    加随机数
    孟宪会
    2009年4月10日 7:17
    版主
  • 执行后 ie :http://localhost:3037/CustMang/company.aspx?tmp=38f95726-0e90-45de-ba91-6d7f390264a4  但是还要点ie 上刷新数据才删掉拉
    不用羡慕----那,只是个传说!
    2009年4月10日 7:50
  • 那就在你的页面里面的PageLoad里加
    Response.Expires = -1000;
    孟宪会
    2009年4月10日 8:38
    版主
  • 我发现
     DB db=new DB();
            for (int i = 0; i < GVCp.Rows.Count; i++)
            {
                bool isChecked = ((CheckBox)GVCp.Rows[i].FindControl("CheckSingle")).Checked;
                if (isChecked)
                {
                  
                    string strSql = "Delete From Company Where [id]=" + GVCp.DataKeys[i].Value + "";
                   // DB.RunExecuteNonQuery(strSql);
                    OleDbCommand cmd = new OleDbCommand(strSql,db.GetCon());
                    cmd.ExecuteNonQuery();
                    db.GetClose();
                }
            }
            Response.Redirect("Company.aspx");也就是说我不用DB.RunExecuteNonQuery(strSql);这个方法执行.单纯的写 却能跳转
    用DB.RunExecuteNonQuery(strSql);却有问题

    public OleDbConnection Con = null;
        public OleDbConnection GetCon()
        {
            try
            {
               
                //设置连接数据库字符串
                Con = new OleDbConnection(ConfigurationManager.AppSettings["connection"]);
                if (Con.State == ConnectionState.Closed)
                {
                    Con.Open();//打开连接            
                }
                return Con;
            }
            catch (Exception ee)
            {
                return null;
            }
          
        }

    public static OleDbCommand CreateCmd(string strSql)
        {
            OleDbConnection Con = new DB().GetCon();
            if (Con.State.Equals(ConnectionState.Closed))
            {
                Con.Open();
            }
            OleDbCommand cmd = new OleDbCommand();
            try
            {
                cmd.Connection = Con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = strSql;
            }
            catch (Exception ee)
            {
                throw new Exception(ee.Message);
            }
            return cmd;
        }


     public static int RunExecuteNonQuery(string strSql)
        {
            OleDbConnection Con = new DB().GetCon();
            OleDbCommand cmd = CreateCmd(strSql);
            int i = (int)cmd.ExecuteNonQuery();
          
            Con.Close();
            return i;
        }
    这些是DB.RunExecuteNonQuery(strSql); 用到的方法..  为啥用调用方法就有我说的问题.单纯写发就可以有效果
    不用羡慕----那,只是个传说!
    2009年4月10日 9:03
  • 一般情况下,数据库操作不会影响跳转的。
    你把
    catch (Exception ee)
            {
                throw new Exception(ee.Message);
            }

    改成
    catch (Exception ee)
            {
                //throw new Exception(ee.Message);
            }

    去掉这些看看。

    你throw了之后,调用的时候没有进行处理,不知道是不是这里的影响。
    孟宪会
    2009年4月10日 9:10
    版主
  • 更新数据不一定要刷新页面来实现,写一个数据绑定的方法,在页面初始化后调用这个方法进行数据绑定,
    操作数据后,再调用该方法重新数据绑定。
    jon.valett@gmail.com
    2009年4月10日 9:14
    版主
  • 孟老师可能我没表达明白 。我把程序发到你邮箱amxh@tom.com里了。比较小。



    回复:邹俊才。我绑定数据是用控件没自己写方法

    不用羡慕----那,只是个传说!
    2009年4月10日 10:09
  • 楼主,你好,看到你的回复,
    其实是控件绑定和不是控件绑定是一样的,实践证明,控件绑定控件还比较容易刷新数据,只要调用控件的属性方法就可以了。
    数据绑定控件很多属性,在后台代码是可以修改的。

    当然,我认为这是一个方式方法的问题,实现效果会有很多种。
    jon.valett@gmail.com
    2009年4月10日 10:24
    版主
  • 回复:邹俊才 你邮箱里也有一份程序 你运行看看就知道我说的问题啦
    不用羡慕----那,只是个传说!
    2009年4月10日 10:41
  • 我也要1份

    blackshaman_wayne#hotmail.com


    工作突然有点忙 嘿嘿
    2009年4月10日 14:48
  • 楼主,你好,

    问题出现在(测试通过)不属于跳转的问题,

        public static int RunExecuteNonQuery(string strSql)
        {
            OleDbConnection SqlCon1 = new DB().GetCon();
            //OleDbCommand cmd = CreateCmd(strSql);                         //失败
            //OleDbCommand cmd = CreateCmd(strSql,SqlCon1);            //成功
            int i = (int)cmd.ExecuteNonQuery();
            SqlCon1.Close();
            return i;
        }

    调用CreateCmd(strSql)方法时,方法里面也有一个OleDbConnection Con = new DB().GetCon();对象,
    但是SqlCon1对象在这里就变得没有任何作用,只是开了,然后关了,但是,对于Con对象,始终没有关闭。

    其他地方没有修改,就是调用你的另外一个重载方法就成功了,
    同时,Response.Redirect("Company.aspx"); 可以采用,GVCp.DataBind();

    jon.valett@gmail.com
    2009年4月10日 16:32
    版主
  • 邹俊才:谢谢按照你说的我测试,完全解决拉..

    我昨天搞了半天不知道什么问题.最后我把数据库连接方法改成 静态的,用静态的就没出现这个问题

     public static OleDbConnection Con = null;
        public static OleDbConnection GetCon()
        {
            try
            {
               
                //设置连接数据库字符串
                Con = new OleDbConnection(ConfigurationManager.AppSettings["connection"]);
                if (Con.State == ConnectionState.Closed)
                {
                    Con.Open();//打开连接            
                }
                return Con;
            }
            catch (Exception ee)
            {
                return null;
            }
          
        }
        public static void GetClose()
        {
            if (Con.State == ConnectionState.Open)
            {
               
                Con.Close();//关闭数据库连接
                Con.Dispose();//释放资源
            }
        }

        public static int RunExecuteNonQuery(string strSql)
        {
            OleDbConnection SqlCon = GetCon();
            OleDbCommand cmd = CreateCmd(strSql);
            int i = (int)cmd.ExecuteNonQuery();
            GetClose();
            return i;
        }

    但是有个问题.数据库连接 用静态的.当多用户访问的时候的.会不会有问题..
    不用羡慕----那,只是个传说!
    2009年4月11日 0:32
  • 120%会有问题

    你的问题是  在你做了数据库操作后  没有通知 控制显示render 的程序你有更新  需要重新render  就直接把内容写出来了
    和你更新的代码关系不大  主要要看你是如何显示数据的. 用绑定或者别的什么有cache的方法的话 要清除cache 重新取数据   或者删除缓集合中指定成员
    工作突然有点忙 嘿嘿
    2009年4月11日 3:01