带对象的中继器控制?

Sam*_*ile 0 asp.net

我被告知在我正在做的事情中使用Repeater控件,这是一个带有ASP.NET控件的"数据输入"屏幕 - 一个标准的"地址"形式.在这种情况下,表单上的字段将重复两次,一次用于原始值,一次用于更改的值.我之前没有使用过这个控件,但似乎我必须绑定到数据库.相反,我有一个通过存储库获得的Entity对象.我可以绑定到这样的对象吗?

[DataContract()]
    public class RON
    {
        [DataMember]
        public string Id { get; set; }
        [DataMember]
        public string Comments { get; set; }
Run Code Online (Sandbox Code Playgroud)

然后,我有我的ASP.NET字段,我在CSS中使用以下字段来排列字段.我可以把它放在ItemTemplate中吗?

 <div class="row1">
    <div class="label">  
       ID: 
    </div>  
    <div class="value">
       <asp:Label ID="lblId" runat="server" />
    </div>
Run Code Online (Sandbox Code Playgroud)

cwe*_*ton 6

您可能希望在PageLoad中执行某些操作,例如:

List<SomeBusinessObj> MyEntityCollection = Repository.Load();
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用转发器控件的DataSource属性将实体对象集合绑定到转发器控件.

rptrMyRepeater.DataSource = MyEntityCollection;
Run Code Online (Sandbox Code Playgroud)

然后通过在该控件上调用DataBind,您的集合将绑定到该控件.

rptrMyRepeater.DataBind();
Run Code Online (Sandbox Code Playgroud)

然后,您需要做的就是使用Repeater的数据绑定事件将自定义属性应用于转发器的控件.

protected void rptrExample_OnItemDataBound(object Sender, RepeaterItemEventArgs Args)
{
 if (Args.Item.ItemType == ListItemType.Item || Args.Item.ItemType == ListItemType.AlternatingItem)
 {
  SomeBusinessObj Obj = (SomeBusinessObj)Args.Item.DataItem;

  Label LabelControl = (Label)Args.Item.FindControl("lblSomeLabel");
  LabelControl.Text = Obj.CustomProperty;
 }
}
Run Code Online (Sandbox Code Playgroud)

的ItemDataBound事件将被调用为每一行项目,所以你将工作在该行项目的控制和数据绑定对象每次调用时间.


另一种方法是直接在标记内数据绑定,而不是使用OnItemDataBound事件.

<asp:Label Text='<%# ((MyObjects.SomeBusinessObj)Container.DataItem).CustomProperty %>' runat="server" />
Run Code Online (Sandbox Code Playgroud)

直接转换避免了对DataBinder.Eval的调用以及反射的开销.

  • 您需要在类型中包含完整的命名空间声明.(即MyNamespace.SomeBusinessObj) (2认同)