日期:2014-05-20  浏览次数:20830 次

用户控件如何传一个datatable给主页面
我把搜索做成一个用户控件mysearch.ascx,它有如下的按钮事件:
  protected void Search_Click(object sender, EventArgs e)
  { DataTable mydt = ubDAO.selectall("20");//此处取到了
  Response.Redirect("../a/aa.aspx");
  }
在aa.aspx中引入用户控件<uc2:mysearch ID="mysearch1" runat="server" />
  protected void Page_Load(object sender, EventArgs e)
  {
  GridView1.DataSource =this.mysearch1.mydt;//此处的值为NULL
  GridView1.DataBind();
  }
对用户控件的传值不太懂,求高人指点一下,我就是想点了用户控件的搜索按钮,控件传一个DT给主页,能在主页面aa.apsx显示出搜索结果。非常感谢

------解决方案--------------------
等到了你用户控件的事件的时候,已经过了 Page_Load 事件。

建议你在用户控件里定义一个事件,让主页面绑定。

C# code
public event Action<DataTable> SearchCompleted;

protected void Page_Load(object sender, EventArgs e)
{
   // 绑定事件处理
   mysearch1 += MySearchComplete;
}
private void MySearchComplete(DataTable dt)
{
    GridView1.DataSource = dt;//此处的值为NULL
    GridView1.DataBind();
}

-------------- 控件的Button事件 --------------------
protected void Search_Click(object sender, EventArgs e)
{ 
    DataTable mydt = ubDAO.selectall("20");//此处取到了
    // 触发这个事件
    SearchCompleted(mydt);
}

------解决方案--------------------
修改下:
C# code
mysearch1.SearchCompleted += MySearchComplete;