У меня есть GridView
, где мой DataSource
:
items.Select(i => new { ID = i.ID, Foo = i }).ToList();
В RowDataBound
я хочу получить доступ к объекту, но не знаю, как его привести ...
grid.RowDataBound += (s, e) =>
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
dynamic item = e.Row.DataItem as 'what?';
}
};
Как получить доступ к свойствам этого объекта?
Шаги для воспроизведения
- Создать сайт
- Создать страницу(default.aspx) и поместите
<asp:GridView ID="grid" runat="server" />
- в коде:
add
protected void Page_Load(object sender, EventArgs ev)
{
var provider = new FooProvider();
grid.DataSource = provider.Elements;
grid.RowDataBound += (s, e) =>
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
dynamic item = e.Row.DataItem;
var test = item.ID;
}
};
grid.DataBind();
}
- Создание проекта библиотеки классов
- Добавить файл
FooProvider.cs
Код:
public class FooProvider
{
public IEnumerable<dynamic> Elements
{
get
{
return new int[] { 1, 2, 3 }
.Select(i => new { ID = i, Foo = i * 3 }).ToList();
}
}
}
Затем добавить ссылку на сайт.
Ожидаемый результат: Получить идентификатор анонимного объекта.
Текущий результат:
RuntimeBinderException не обработан кодом пользователя
'object' не содержит определения для 'ID'
Является ли отражение единственным способом?