我被告知在我正在做的事情中使用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)
您可能希望在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的调用以及反射的开销.
| 归档时间: |
|
| 查看次数: |
7194 次 |
| 最近记录: |