我正在使用 linq group by 查询(带有两个分组参数),并且希望在嵌套转发器中使用结果数据。
var dateGroups = from row in data.AsEnumerable()
group row by new { StartDate = row["StartDate"], EndDate = row["EndDate"] };
“data”是来自 SqlDataAdapter 填充的数据集的数据表。 “dateGroups”在父中继器中使用,我可以使用 Eval(“key.StartDate”) 和 Eval(“key.EndDate”) 访问组 key 。
由于 dateGroups 实际上包含按开始/结束日期整齐分组的所有数据行,因此我想访问这些行以在子中继器中显示数据。
我将子中继器的数据源设置为什么?我尝试了所有我能想到的标记表达方式;我认为问题是我正在尝试访问匿名成员(而且我不知道如何访问。)如果结果不是很明显,那么访问每次迭代中的元素的表达式是什么 child 复读机?
是否有一个表达式可以让我在标记中设置数据源,或者它必须位于父中继器中某个事件的代码隐藏中?
最佳答案
我最终又搜索了一下,发现 this 。使用它,我创建了一个字典,其键是 StartDate/EndDate 组合,值是 DataRows 列表:
var dateGroups = (from row in data.AsEnumerable()
group row by new
{
StartDate = row["StartDate"],
EndDate = row["EndDate"]
} into g select g)
.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
父Repeater以编程方式绑定(bind),现在我有一个内部GridView绑定(bind)到DataRows列表:
<asp:Repeater ID="CourseScheduleRepeater" runat="server">
<ItemTemplate>
<h4><%# Eval("key.StartDate", "{0:MMM. dd, yyyy}") %> - <%# Eval("key.EndDate", "{0:MMM. dd, yyyy}") %></h4>
<asp:GridView ID="GridView1" runat="server"
DataSource='<%# Eval("value") %>'>
<Columns>
<asp:TemplateField HeaderText="Section">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "[SectionCode]") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Location">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "[LocationName]") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Schedule">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "[Schedule]") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:Repeater>
我唯一的提示是我必须使用模板字段,并且 GridView 中显示了两个额外的列 - “RowError”和“HasErrors”。有人知道为什么会出现这些专栏吗?
关于asp.net - 如何从嵌套转发器控件访问 linq group-by 查询的组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2526768/