gpt4 book ai didi

c# - asp.net 单个对象的 CompositeDataBoundControl

转载 作者:太空狗 更新时间:2023-10-29 21:35:35 25 4
gpt4 key购买 nike

我已经创建了一个 CompositeDataBoundControl,我可以很好地进行数据绑定(bind)。现在我想做同样的事情,但不是针对对象列表,而是针对单个对象。原因是我希望我的同事能够在他们的前端代码中简单地使用 <%# Eval("X") %>。

问题是 CompositeDataBoundControl 有一个我必须覆盖的方法,它只接受一个集合作为数据源

CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)

有没有办法对单个对象做同样的事情?

最佳答案

您需要覆盖DataSource 属性

public class SingleObjectView : CompositeDataBoundControl
{
private object dataSource;
public override object DataSource
{
get { return new List<object> { dataSource }; }
set { dataSource = value; }
}


protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
{
SingleItem singleItem = null;
if (dataBinding)
{
var it = dataSource.GetEnumerator();
it.MoveNext();

singleItem = new SingleItem(it.Current);
}
else
{
singleItem = new SingleItem(null);
}

ItemTemplate.InstantiateIn(singleItem);
Controls.Add(singleItem);
if (dataBinding)
singleItem.DataBind();
return 1;
}


[PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(SingleItem))]
public ITemplate ItemTemplate { get; set; }
}

public class SingleItem : Control, IDataItemContainer
{
public SingleItem(object dataItem)
{
DataItem = dataItem;
}
public object DataItem { get; set; }

public int DataItemIndex
{
get { return 0; }
}

public int DisplayIndex
{
get { return 0; }
}
}

编辑以显示用法

<ctrl:SingleObjectView ID="productView" runat="server">
<ItemTemplate>
<%# Eval("ProductName") %>
<br />
<%# Eval("Price","{0:c}") %>
</ItemTemplate>
</ctrl:SingleObjectView>

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
productView.DataSource = new { ProductName="My Product", Price="10"};
productView.DataBind();
}
}

因此 DataSource 接收到一个未实现 IEnumerable 的对象,但覆盖 SingleObjectView 控件的 DataSource 属性,确保 CreateChildControls被称为。

关于c# - asp.net 单个对象的 CompositeDataBoundControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9535119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com