Mar*_*ker 6 c# asp.net data-binding webforms
我正在开发一个Web窗体项目,它将Sql查询的结果加载到DataTable中.
这些DataTable被传递到前端,我们将它们绑定到Repeater Web控件.
这非常有效.但是,现在我们想绑定到我们自己的自定义类而不是DataTable.不幸的是,我认为明显的答案是行不通的(IDictionary<string, object>在我们班上实施).
我们需要将Eval绑定到Datum而不为每个绑定创建具体属性?显然,DataRow不必具体实现我们绑定的每个属性.所以,不知何故,似乎Eval能够在DataRow上按名称查找属性值.
这是自定义类
public class Datum: IDictionary<string, object>
{
private Dictionary<string, object> _entries;
public Datum()
{
_entries = new Dictionary<string, object>();
}
public object this[string s]
{
get
{
return this._entries[s];
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
这是在aspx.cs文件中设置DataSource的位置
rptTags.DataSource = new[] { new Datum { {"Count", 1} }, new Datum { {"Count", 2 } };
Run Code Online (Sandbox Code Playgroud)
这是aspx文件中的绑定
<asp:Repeater ID="rptTags" runat="server">
<ItemTemplate>
<%# (int)Eval("Count") >
</ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)
使用上面的示例,我们得到一个错误,指出有问题的属性不存在,这是真的,但它也不存在于DataRow上.如何使它像System.Data.DataRow一样绑定?
今天早上我以全新的眼光来到这里,花了几个小时使用 ILSpy 浏览 .Net Framework。我终于能够解决这个难题并实施一个可行的解决方案。我将列出我学到的与解决方案相关的内容,然后详细说明我的实现。
ICustomTypeDescriptor我们需要在类上实现的接口。考虑到这一点,我必须采取以下步骤来创建我自己的自定义类型,我可以像 DataTable 一样动态绑定到该类型。
| 归档时间: |
|
| 查看次数: |
910 次 |
| 最近记录: |