.net 1.1中,datasource如果是DATATABLE之类
在REPEATER中某控件的CLICK事件里,想获得数据行某值
可以使用LinkButton button= (LinkButton)sender;
RepeaterItem container = (RepeaterItem)button.NamingContainer;
string aaa = ((DataRowView)container.DataItem)["xxx"].ToString();.NET 2.0中如果用
ObjectDataSource  并且是List<T>的数据源
想获得 T的某属性,该怎么做?

解决方案 »

  1.   

    没有 理解 到楼主的意思
    是说?
    Ilist a = List<T>;
    怎么取a里的数据?
      

  2.   

    Repeater的数据源是List<User>
    Repeater的ItemTemplate有个LinkButton
    在Repater ItemCreate时给LinkButton注册了Click事件在Click事件中,想通过sender获得RepeaterItem,然后获得这一行的User对象,取得ser.Id
      

  3.   

    如果确定List<T>的T派生自User,那么
    ((DataRowView)container.DataItem)["Id"].ToString();
    不能获取到么?不同的是数据源,对于控件来讲应该一样吧
    或者指定列的序号
    ((DataRowView)container.DataItem)[0].ToString();
      

  4.   

    List<T>的数据源  container.DataItem 是空
      

  5.   

    发现好像数据源是datatable也不行了可是像3楼说的这个问题怎么解决呢
      

  6.   

    假设T是User,User有Id属性LinkButton button= (LinkButton)sender;
    RepeaterItem container = (RepeaterItem)button.NamingContainer;
    string id = ((User)container.DataItem).Id;
      

  7.   

    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName == "Delete")
            {
                string test = ((Button)e.CommandSource).Text;
                int index = 2;// 内容子控件的索引
                string dataItem = ((DataBoundLiteralControl)e.Item.Controls[index]).Text;
                Response.Write(test);
                // 输出repeater项的整个内容
                Response.Write(dataItem);
            }
        }
    不能获取单元格的内容,只能自己解析,建议用datalist或gridview
      

  8.   

    cnjj的说法不行 container.DataItem就已经是NULL了yan63的方法可以把Dataitem强转成LIST<T>里的T或者DATAROWVIW么?
    但是如果是DROPDOWNLIST怎么写COMMANDNAME?
    不能获取单元格的内容,只能自己解析,建议用datalist或gridview
    这句话什么意思?
      

  9.   

    但是如果是DROPDOWNLIST怎么写COMMANDNAME?
    --------------------------------------------
    在itemcreated事件中绑定当前项索引到dropdownlist,然后关联事件处理代码:
        protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e)
        {
            switch (e.Item.ItemType)
            {
                case ListItemType.Item:
                case ListItemType.AlternatingItem:
                    DropDownList ddlItem = 
                        e.Item.FindControl("DropDownList1") as DropDownList;
                    ArrayList al = new ArrayList();
                    ddlItem.SelectedIndexChanged += new EventHandler(ddlItem_SelectedIndexChanged);
                    ddlItem.Attributes.Add("index",e.Item.ItemIndex.ToString());
                    al.Add("1");
                    al.Add("2");
                    ddlItem.DataSource = al;
                    ddlItem.DataBind();
                    break;
                default:
                    break;
            }    }    void ddlItem_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList ddlItem = sender as DropDownList;
            int index = Convert.ToInt32( ddlItem.Attributes["index"]);
            Response.Write(string.Format("msg:{0}!<br>",index.ToString()));
        }不能获取单元格的内容,只能自己解析,建议用datalist或gridview
    ------------------------------------
    container.DataItem不能获得数据源,只能使用
    string dataItem = ((DataBoundLiteralControl)e.Item.Controls[index]).Text;
    获得整个项的内容,但是无法获得单元格的内容,
    只能得到repeater项中的客户端脚本,运行1下就知道了