Я работаю над проектом Web Forms , который загружает результаты запросов Sql в DataTable s.
Эти DataTable sдошел до внешнего интерфейса, где мы связали их с веб-элементом управления Repeater .
Это прекрасно работает.Однако теперь мы хотели бы связать наши собственные классы вместо 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];
}
}
...
}
. Здесь DataSource установлен в aspx..cs file
rptTags.DataSource = new[] { new Datum { {"Count", 1} }, new Datum { {"Count", 2 } };
А вот привязка в aspx-файле
<asp:Repeater ID="rptTags" runat="server">
<ItemTemplate>
<%# (int)Eval("Count") >
</ItemTemplate>
</asp:Repeater>
Используя приведенный выше пример, мы получаем ошибку о том, что рассматриваемое свойство не существует, чтоИстина, но она также не существует в DataRow.Как я могу сделать так, чтобы он связывался как System.Data.DataRow?