我在用户控件中放了一个DataList,DataList根据宿主页中传来的参数进行数据绑定,这个已经不成问题,问题是,我在用户控件的DataList中加了一个按钮列,希望用户点击某行的按钮时,能把这行的主键传给宿主页。
我这个需求并不过分,但实现起来一点思路也没有,例子在网上也搜不到,请高手指点。

解决方案 »

  1.   

    在DataList加载数据的时候取得行主键ID,按钮打开宿主页加参数,例如xxx.aspx?ID=yyy
    在原宿主页打开,这样就相当于刷新了宿主页,同时传递参数ID
      

  2.   

    虽然写例子很辛苦,但解释清了这个问题可以普度一方啊,请一定用代码说明一下
    下面是我的用户控件:using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlTypes;
    using Model;
    using BLL;public partial class Controls_CtrlframeRolesInSchoolClass : System.Web.UI.UserControl
    {
        private FrameFrameRoleWorkflow BLLFrameRole;
        private FrameFrameworkInfo FrameFramework4Parameter;
        private Dictionary<string, Object> Parameter;
        private SqlGuid _frameFrameworkID = SqlGuid.Null;
        private SqlGuid _frameFrameRoleID = SqlGuid.Null;    public SqlGuid frameFrameworkID
        {
            get { return _frameFrameworkID; }
            set
            {
                _frameFrameworkID = value;
                Page_Load(null, null);
            }
        }    public SqlGuid frameFrameRoleID
        {
            get { return _frameFrameRoleID; }
            set
            {
                _frameFrameRoleID = value;
                Page_Load(null, null);
            }
        }    protected void Page_Load(object sender, EventArgs e)
        {
            FrameFramework4Parameter = new FrameFrameworkInfo();
            Parameter = new Dictionary<string, object>();
            Parameter.Add("FrameFrameworkInfo", FrameFramework4Parameter);
            BLLFrameRole = new FrameFrameRoleWorkflow();
            DtLstframeRolesInSchoolClass_Bind();
        }    private void DtLstframeRolesInSchoolClass_Bind()
        {
            FrameFramework4Parameter.ID = frameFrameworkID;
            Parameter.Clear();
            Parameter.Add("FrameFrameworkInfo", FrameFramework4Parameter);
            this.DtLstframeRolesInSchoolClass.DataSource = BLLFrameRole.ListFrameFrameRoles(Parameter);        this.DtLstframeRolesInSchoolClass.DataBind();
            if (this.DtLstframeRolesInSchoolClass.Items.Count == 0)
            {
                this.DtLstframeRolesInSchoolClass.ShowHeader = false;
            }
        }
        
        
        protected void DtLstframeRolesInSchoolClass_ItemCommand(object source, DataListCommandEventArgs e)
        {
            //提供成员角色编号和班级编号,用于在下页列出成员角色
            if(e.CommandName == "Detail")
            {
                frameFrameRoleID = (SqlGuid)this.DtLstframeRolesInSchoolClass.DataKeys[e.Item.ItemIndex];   
                        }
        }
    }其中DataList控件ID=“DtLstframeRolesInSchoolClass”,请问用户单击按钮的时候,怎么把DataKeys[e.Item.ItemIndex]送到宿主页去,谢谢。  
      

  3.   

    用户控件设置属性
    按钮
    Button btn =sender as Button;
    DataListItem item = (sender as Button).NamingContainer as DataListItem;
    TextBox txt=btn.NamingContainer.FindControl("txt") as TextBox;
      

  4.   

       在用户空间中添加如下代码:目的是给用户空间弄个事件
       声明一个代理 
       public delegate void MyDelegate();
        //声明一个事件
        public event MyDelegate MyEvent;
        给你的按钮弄个事件
        protected void Button1_Click(object sender, EventArgs e)
        {
            //调用事件
            if(MyEvent!=null)
            {
                MyEvent();
            }    }
        public string DataKey
        {
            get { return 获取主键值代码; }
        }
    宿主页面中的代码
    protected void Page_Load(object sender, EventArgs e)
        {//然后再宿主页面中为改控件注册一个事件        YongHuControlcs1.MyEvent+=new UserControls_YongHuControlcs.MyDelegate(nn);
        }
        //代理函数
        public void nn()
        {
            此处你可以点击你的用户控件按钮,想做什么业务都行
            TextBox1.Text = YongHuControlcs1.DataKey;
        }
      

  5.   

    http://topic.csdn.net/u/20091112/09/342769c1-0abf-4f92-8699-7ac7d462e0cf.html
      

  6.   

    办法估计很多放HIDDEN了LABEL了,什么的,直接搞连接或者异步访问都行吧.
      

  7.   

    你的意思是说你在Datalist 控件里面再加一个Button 按钮吗?  是的话,我可能有个例子可能适合你,要的可以联系我  qq:823783931