asp.net - 如何从嵌套转发器控件访问 linq group-by 查询的组?

标签 asp.net linq repeater anonymous-types

我正在使用 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/

相关文章:

javascript - jQuery:从用户控件捕获点击事件

asp.net - 找不到模块 '@angular/core' Visual Studio 2017

c# - 如何从网络服务返回多个字符串?

javascript - 从 map 中的点坐标查找具有名称的谷歌地图地点

c# - 在 Repeater 中编辑文本框

html - 使用 Repeater 的水平表

c# - 选择对象集合的列/字段并导出为 List<>

c# - 在非 IEnumerable 类型上使用 lambda 表达式过滤 Windows 日志

C# - 从数据库中检索数据并存储在二维字典中?

asp.net - 中继器内 UpdatePanel 内的 RadioButtonList,我可以吗?