我有一个GridView,带有过滤和分页(一次10个),绑定到Linqdatasource。这一切都有效。
但是如何在完成对所有行的检索后获取LinqDataSource中检索到的所有数据的ID?
我有这个方法,e.Result是一个包含此网格列表的对象数据类型
protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e) // event fires after data retrieval complete.
{
List<int> ids = new List<int>();
if (e.TotalRowCount > 0)
{
for (int idx = 0; idx < e.TotalRowCount; idx++)
{
Foo foo = (Foo)(e.Result[idx]); // error cannot apply indexing to expression of type object
ids.Add(foo.Id);
}
}
}
我的错误是迭代一个对象,怎么办呢?
答案 0 :(得分:1)
您可以这样做:
protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e) // event fires after data retrieval complete.
{
List<int> ids = new List<int>();
if (e.TotalRowCount > 0)
{
List<Foo> fooList = ((IEnumerable)e.Result).ToList();
for (int idx = 0; idx < fooList.Count; idx++)
{
Foo foo = fooList[idx];
ids.Add(foo.Id);
}
}
}
或者
protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e) // event fires after data retrieval complete.
{
List<int> ids = new List<int>();
if (e.TotalRowCount > 0)
{
foreach(Foo foo in (IEnumerable)e.Result)
{
ids.Add(foo.Id);
}
}
}
如果您的Selected是筛选视图的结果,e.Result将是匿名类型的IEnumerable,因此获取信息很可能需要使用IQueryable和viewmodel对象。
答案 1 :(得分:1)
e.Result
是object
,因此您需要将其转换为List类型才能应用索引:
Foo foo = ((List<Foo>)(e.Result))[idx];