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

List<T>的数据源,点击事件中,RepeaterItem怎么获得T的属性?
.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的某属性,该怎么做?

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

LinkButton button= (LinkButton)sender;
RepeaterItem container = (RepeaterItem)button.NamingContainer;
string id = ((User)container.DataItem).Id;
------解决方案--------------------
但是如果是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下就知道了

------解决方案--------------------
用过接口吗?这可以用接口解决