I have set a list of items as datasource for a repeater and I have created a custom template. Is there any way to directly access the current bound item in the template ? Example code below
class MyObject
{
public string Somevalue{get;set;}
}
Code in my Page_Load
List<MyObject> selections = new List<MyObject>();
selections.Add(new MyObject());
Repeater1.ItemTemplate = new MyObjectTemplate();
Repeater1.DataSource = selections;
Repeater1.DataBind();
The template
public class MyObjectTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
//Get the current item
MyObject o = ????? as MyObject;
string txt = "<h1>开发者_JAVA百科"+ o.Somevalue + "</h1>";
LiteralControl h1 = new
LiteralControl(txt);
container.Controls.Add(h1);
}
}
I know that If I just wanted to display the value of "Somevalue" in the repeater there would be easier ways of achieving this, but the actual logic of which values to display and how is more complicated.
You need to use DataItem from the container. For example,
public void InstantiateIn(Control container)
{
//Get the current item
MyObject o = ((IDataItemContainer)container).DataItem as MyObject;
...
}
Only issue with this approach is that if you are relying on the view-state on post-back to maintain the control state then the data item will not be of type MyObject
. In such case, the best bait would be to use DataBinder - for example,
public void InstantiateIn(Control container)
{
// Get SomeValue property value
var val1 = DataBinder.Eval(container, "SomeValue");
// Get value2 property value
var val1 = DataBinder.Eval(container, "Value2");
...
}
精彩评论