我已将项目列表设置为转发器的数据源,并且我已创建自定义模板。有没有办法直接访问模板中的当前绑定项? 下面的示例代码
class MyObject
{
public string Somevalue{get;set;}
}
我的Page_Load中的代码
List<MyObject> selections = new List<MyObject>();
selections.Add(new MyObject());
Repeater1.ItemTemplate = new MyObjectTemplate();
Repeater1.DataSource = selections;
Repeater1.DataBind();
模板
public class MyObjectTemplate : ITemplate
{
public void InstantiateIn(Control container)
{
//Get the current item
MyObject o = ????? as MyObject;
string txt = "<h1>"+ o.Somevalue + "</h1>";
LiteralControl h1 = new
LiteralControl(txt);
container.Controls.Add(h1);
}
}
我知道如果我只是想在转发器中显示“Somevalue”的值,那么实现这一目标会更容易,但是显示哪些值的实际逻辑以及如何更复杂。
答案 0 :(得分:0)
您需要使用容器中的DataItem。例如,
public void InstantiateIn(Control container)
{
//Get the current item
MyObject o = ((IDataItemContainer)container).DataItem as MyObject;
...
}
这种方法的唯一问题是,如果您依靠post-back上的视图状态来维护控件状态,那么数据项将不是MyObject
类型。在这种情况下,最好的诱饵是使用DataBinder - 例如,
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");
...
}