我想实现这样一个功能:有一个1.aspx的页面,包含几个textbox的web控件和一个链接,当我点击链接就打开一个新的页面,在这个新的页面中有一个datagrid控件来显示数据,如果把这个datagrid控件的第一列设成一个超链接,那么当我点击其中的某一个链接后,怎么才能把我所点的那一行的相关数据取出传回到1.aspx中的textbox控件中去。

解决方案 »

  1.   

    <asp:HyperLinkColumn DataNavigateUrlField="id" DataNavigateUrlFormatString="AddStore.aspx?StoreId={0}&amp;Flag=0"
    DataTextField="StoreName" HeaderText="小店名称"></asp:HyperLinkColumn>
      

  2.   

    Response.Write("<script>opener.document.getElementById('txtSourceNo').value='" & GridDetail.Items(e.Item.ItemIndex).Cells(1).Text & "';opener.document.getElementById('txtSourceNo').onchange() </script>")
    差不多就是这样吧
      

  3.   

    一、使用Querystring
    Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:
    1、创建一个web form
    2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
    3、为button按钮创建click事件
    代码如下:
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
     string url;
     url="webform2.aspx?name=" + 
      TextBox1.Text + "&email=" + 
      TextBox2.Text;
     Response.Redirect(url);
    }
    4、新建一个目标页面命名为webform2
    5、在webform2中放置两个Label1,Label2
    在webform2的Page_Load中添加如下代码:
    private void Page_Load
    (object sender, System.EventArgs e)
    {
     Label1.Text=Request.QueryString["name"];
     Label2.Text=Request.QueryString["email"];
    }
    运行,即可看到传递后的结果了。
    二、使用Session变量
    使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。举个例子看看:
    1、创建一个web form
    2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
    3、为button按钮创建click事件
    代码如下:
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
            Session["name"]=TextBox1.Text;
     Session["email"]=TextBox2.Text;
     Response.Redirect("webform2.aspx");
    }
    4、新建一个目标页面命名为webform2
    5、在webform2中放置两个Label1,Label2
    在webform2的Page_Load中添加如下代码:
    private void Page_Load
    (object sender, System.EventArgs e)
    {
     Label1.Text=Session["name"].ToString();
     Label2.Text=Session["email"].ToString();
     Session.Remove("name");
     Session.Remove("email");
    }
    运行,即可看到传递后的结果了。
      

  4.   

    三、使用Server.Transfer
    虽然这种方法有点复杂,但也不失为一种在页面传值的方式。
    举个例子看看:
    1、创建一个web form
    2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
    3、为button按钮创建click事件
    代码如下:
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
     Server.Transfer("webform2.aspx");
    }
    4、创建过程来返回TextBox1,TextBox2控件的值代码如下:
    public string Name
    {
     get
     {
      return TextBox1.Text;
     }
    }
    public string EMail
    {
     get
     {
      return TextBox2.Text;
     }
    }
    5、新建一个目标页面命名为webform2
    6、在webform2中放置两个Label1,Label2
    在webform2的Page_Load中添加如下代码:
    private void Page_Load
    (object sender, System.EventArgs e)
    { //创建原始窗体的实例
     WebForm1 wf1;
     //获得实例化的句柄
     wf1=(WebForm1)Context.Handler;
     Label1.Text=wf1.Name;
     Label2.Text=wf1.EMail;}
      

  5.   

    楼上的好像都不符合楼主的要求
    楼主好像要求两个页面同时存在(打开)的情况下传值我觉的只能是采用父子页面(window.open打开新页面)+js进行操作了window.parent.控件名称
      

  6.   

    0.先给datagrid添加一个ItemCommand事件
    1.获取datagrid里面的值,用datagrid.Items[x].Cells[y]来获取
    2.将获取回来的值保存在Session里面,用Session.Add来保存。或者通过URL参数传递给目标页面,在目标页面用Request.QueryString来获取。
    3.将Session里面的值或者Request.QueryString获取的值赋值给相应的控件
      

  7.   

    是啊,如果要达到要求的话,得在javascript中打开一个模式窗口,好像是用window.showmodeldialog
    返回一个值之后,再在脚本中给父页面的textbox赋值
      

  8.   

    sorry没注意,你要两个页面同时打开时传值在则必须在1.aspx里面开启一个监听进程,在新页面出发事件获取相应的值后,对监听的端口发送时间代码和数据,进程监听到数据后获取数据,刷新页面重新绑定,应该可以。
    要么参考聊天室的做法,可以做到无刷新~
      

  9.   

    xueqs() 正解,那位写了一大段的朋友辛苦了,楼主还是仔细研究下xueqs()的说法
      

  10.   

    xueqs() ,能讲得详细一点吗
      

  11.   

    NetCode(灵光) 说得不无道理。
    在1.aspx里面开启一个监听进程,在新页面出发事件获取相应的值后,对监听的端口发送时间代码和数据,进程监听到数据后获取数据,刷新页面重新绑定。
    我想,楼主要实现的想法应该要这样做才行。
    xueqs()的三种方法概述了页面间的数据传递,但是的确不符合楼主的要求。