c# asp.net gridview 上方有个新增按钮,点击这个按钮弹出一个aspx页面,下面是父页面按钮代码
protected void BtAdd_Click(object sender, EventArgs e)
    {
        Response.Write("<script language='javascript'>var result = window.showModalDialog('Default2.aspx',window,'status:no;dialogHeight:400px;dialogWidth:350px;');if(result==1){ alert('刷新了');window.location.reload();}</script>");
    }
在子页面中有一个textbox(实际有多个,这个举例一个来说明),和一个按钮,下面是按钮事件
protected void Button1_Click(object sender, EventArgs e)
    {
        string Vendor = Vendor1.Text.Trim();
string sqlstr = "insert into PriceExcel(Vendor) values('";
        if (!string.IsNullOrEmpty(Vendor))
        {
            sqlstr += Vendor+"')";
        }
        else
        {
            Response.Write("<script>alert('供方不能为空,请重新输入!');history.back();</script>");//这里没效果
        }
qlcon = new SqlConnection(strcon);
        SqlCommand cmd = new SqlCommand(sqlstr, sqlcon);
        sqlcon.Open();
        try
        {
            //cmd.ExecuteNonQuery();
            if (cmd.ExecuteNonQuery() == 1)            {
                Response.Write("<script language='javascript'>alert('新增价格成功!');</script>");
            }
        }
        catch (Exception erro)
        {
            //Response.Write("错误" + erro);
            return;
        }
        finally
        {
            sqlcon.Close();
        }
        //如果处理成功 时候使用
        Response.Write("<script language='javascript'>window.returnVal='1';parent.window.dialogArguments.location.reload();window.close();</script>");
    }
子页面前台代码,已加<base target="_self" /><span class="sp"><a class="a11">供  方:</a><asp:TextBox ID="Vendor1" runat="server" CssClass="tb1"></asp:TextBox></span><br />
                <span class="sp"><asp:Button ID="Button1" runat="server" Text="确定" CssClass="bt1" OnClick="Button1_Click" /><asp:Button ID="Button2" runat="server" Text="取消" CssClass="bt2" OnClick="Button2_Click" /></span>
现在的问题是:
1、新增后Gridview不刷新。问题是怎样点击“确定”后刷新gridview(网上的解决方法我都看过,请给出代码,及代码位置)
2、在新增时,Vendor为空时,却还能插入,并提示插入成功。(这个是主要问题)问题是,如何终止插入,并返回输入界面(这里我用history.back()没有用,可能是其他地方有错误也有可能),并且不显示错误类似于“404”的内容在页面上。(这里数据库表中是允许该字段为空的,因为该字段为新增字段,以前的列数据都为空。)谢谢大家asp.netc#showmodaldialoggridviewjs

解决方案 »

  1.   

    如果你是本页跳出“窗口”进行新增那么使用 div弹出层仿制一个窗口就行了,添加后重新绑定
    如果是你新开窗口,添加后返回请求页就可以了。
      

  2.   

    1、可以在 BtAdd_Click 中重新绑定资料试一下;
    2、把 history.back() 换成 return 试一下。
      

  3.   

    1、我这里也重新绑定过,但是会出现提示“要再次显示该网页,Internet Explore需要重新发送您以前发送的信息。如果您正在交易,应单击“取消”避免重新交易。否则单击“重试”再次显示该网页。”
    2、return表示没用,如何终止插入呢,有没有高人解答
      

  4.   

    这个我当然知道了,问题是我添加还错误,怎么改,改哪里啊。
    你的代码不是我说的方案的代码。
    你在添加成功里也没有重新绑定数据。
    代码比较不规范,数据操作不应该放在button事件中。
    新开窗口的数据处理后 Response.Redirect 到原请求页面就可以刷新了。
      

  5.   

    这个我当然知道了,问题是我添加还错误,怎么改,改哪里啊。
    你的代码不是我说的方案的代码。
    你在添加成功里也没有重新绑定数据。
    代码比较不规范,数据操作不应该放在button事件中。
    新开窗口的数据处理后 Response.Redirect 到原请求页面就可以刷新了。
    刷新自己改好了,关键是新增啊,新增的记录是错误的,还增进去了,这让人怎么活啊,输入为空怎么控制。还有数据操作那写在哪里啊?用response.redirect没做出来,初学者,纯粹业余时间学习。我用location.href=location.href就好了,去掉了reload(),我bind()方法没有写上去,以前写上去了,会弹出重复加载,就被我删掉了。现在也加上去了
      

  6.   

    使用JS方法,首先那个新增的页面使用弹出新页面,然后你使用window.opener.location.href对象是可以更新原页面的。
      

  7.   

    你这个好像是open用的把,没看懂我新增需要表达的意思么?
    突然发现我的刷新没刷新,要刷新还是要弹出提示。
      

  8.   

    你这个好像是open用的把,没看懂我新增需要表达的意思么?
    突然发现我的刷新没刷新,要刷新还是要弹出提示。你不就是原来的网页没有刷新吗?你先看看数据库里面的内容改了没?如果改了,说明新增已经成功了,只是网页没刷新,opener对象可以获得原来的网页URL,用JS文件刷新一下就行了,或者重新载入。
      

  9.   

    另外忘记说了,如果你使用两次response .write,第二次的是不会输出的,你要把所有的JS语句都放到同一个response中去。
      

  10.   

    简单说吧,就是如果你的提示弹出了,后面的刷新是不会执行的,你不能把JS语句分开在两个response中。
      

  11.   

    Response.Write("<script language='javascript'>var result = window.showModalDialog('Default2.aspx',window,'status:no;dialogHeight:400px;dialogWidth:350px;');if(result==1){ alert('刷新了');window.location.href()=window.location.href();}</script>");
    这是一行啊,怎么不能执行了
      

  12.   

    Response.Write("<script language='javascript'>alert('新增价格成功!');</script>");这一行你不算的?
      

  13.   

    可是我那样写,明明弹出来了“刷新了”啊,就是会弹出“要再次显示该网页,Internet Explorer 需要重新发送你以前提交的信息.如果你正在交易,应单击"取消"避免重复交易.否则,单击"重试"再次显示改网页.”。
    (这个我不着调怎么去掉,刚才换了那个,结果是没有刷新)
    请注意我代码的位置,“刷新了”在父页面,“新增价格成功”在子页面啊。新增的问题是我为空新增进去了,怎么让为空时禁止新增。
      

  14.   

    这个怎么去掉提示我就不会了,不过你两个页面的话,是不会出我说的问题。
    不过你新增用的back,你调试一下试试,后面的代码还执行不执行了
    就是这句
    qlcon = new SqlConnection(strcon);
            SqlCommand cmd = new SqlCommand(sqlstr, sqlcon);
            sqlcon.Open();
      

  15.   

           if (!string.IsNullOrEmpty(Vendor))
            {
                sqlstr += Vendor+"')";
            }
            else
            { 
                return ""; //在这里return结束语句,这样应该就不会再执行下面的代码了,
                Response.Write("<script>alert('供方不能为空,请重新输入!');history.back();</script>");//这里没效果
            }
      

  16.   

    貌似正解,我再去看看,不过要把return放在下面,然后我没有返回值。 就return,仙哥也是对的。不过我放在js中了,菜鸟啊。
    有没有第1个刷新问题会的。
      

  17.   

    Response.Write("<script language='javascript'> window.close();window.opener.location.href='SelectCourse.aspx' </script>");
    我的代码是这样写的
      

  18.   

    不过,我那个刷新的页面绑定是放在
    /// <summary>
        /// 呈现网页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Page_PreRender(object sender, System.EventArgs e)
        {
            BindTermCourse();
            lblTitle.Text = Utility.GetYearTermName(Utility.selectTerm) + Session["MajorName"].ToString();
            lblInfo.Text = "(" + Utility.selectStage + @"阶段)若无“选课”标志,1、可能不在选课阶段2、未完成重修课程报名,请点击<a href=""ReupSelectCourse.aspx"">报名</a>";
        }这个函数中的,好早之前写的了,不过应该没什么影响才对。如果你放在!page.ispostback中绑定数据,理论上来讲应该是没用的
      

  19.   

    不管放在GridView1_PreRender中,还是Page_PreRender中,还是会提示那句“要再次显示该网页,Internet Explore需要重新发送您以前发送的信息。如果您正在交易,应单击“取消”避免重新交易。否则单击“重试”再次显示该网页。”