在我的网格中,一个DataField是从代码而不是从db加载的。我认为我可以做这样的事情来实现这一目标。
是否有可能真的像这样做
网格类
protected void rgGrid_DataBound(object sender, EventArgs e)
{
for(int item = 0; item<=this.rgGrid.Items.Count-1; item++)
{
GridDataItem dataItem = this.rgGrid.Items[item];
double NumberOfDays = ((IEnumerable<MonthReportRowItem>)this.rgGrid.DataSource).ElementAt(item).NumberOfDays;
}
}
MonthRep(数据字段为“已生成”)
public double NumberOfDays
{
get
{
return (this.VacationDays - this.BookedVacationDays) + this.UsedVacationDays;
}
}
因为我收到错误消息
无法将类型为System.Data.Objects.ObjectQuery的对象强制转换为类型 “System.Collections.Generic.IEnumerable
我应该尝试不同的方法还是我只是一个小错误?
感谢您的帮助和快速回答
答案 0 :(得分:0)
试试这个:
double NumberOfDays =
this.rgGrid.DataSource
.Cast<MonthReportRowItem>()
.ElementAt(item)
.NumberOfDays;
也许您的DataSource
类型ObjectQuery
不属于ObjectQuery<T>
类型,因此您可以使用IEnumerable<MonthReportRowItem>
将其投放到Cast<T>()
,获取所需的元素位置,然后获得财产。
答案 1 :(得分:0)
如果我没记错,DataSource
属性是一个对象,所以在调用ObjectQuery
之前需要将其强制转换为AsEnumerable
。所以这应该做的工作:
((ObjectQuery)this.rgGrid.DataSource).AsEnumerable()
.Cast<MonthReportRowItem>()
.ElementAt(item)
.NumberOfDays
AsEunumerable
命名空间中的System.Linq
。