Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 中继器-比较项目和组_C#_Asp.net_Visual Studio 2012 - Fatal编程技术网

C# 中继器-比较项目和组

C# 中继器-比较项目和组,c#,asp.net,visual-studio-2012,C#,Asp.net,Visual Studio 2012,我有一个中继器,目前在我的第一列中,它显示的是控制台类型列: 在我的专栏标题下:PS4、PS4、PS4、XBOX ONE、XBOX ONE、任天堂wii 所以它正在对它进行排序,但我希望对它进行分组,以便它只显示一个控制台一次 我认为应该有一种方法将dataItemRow与以前的dataItemRow进行比较 但我不确定怎么做。有什么建议吗 void rptItems_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (

我有一个中继器,目前在我的第一列中,它显示的是
控制台类型
列:

在我的专栏标题下:PS4、PS4、PS4、XBOX ONE、XBOX ONE、任天堂wii

所以它正在对它进行排序,但我希望对它进行分组,以便它只显示一个控制台一次 我认为应该有一种方法将dataItemRow与以前的dataItemRow进行比较 但我不确定怎么做。有什么建议吗

void rptItems_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //code here that goes through all items and compares items

    }
}
人口:

       SqlDataAdapter da = new SqlDataAdapter("Stored Procedure", conn);
        da.SelectCommand.CommandType = CommandType.StoredProcedure;
        da.SelectCommand.Parameters.Add(new SqlParameter("@Admin", "ALL"));
        DataSet dataset = new DataSet();
        da.Fill(dataset);
        rptItems.DataSource = dataset.Tables[0];
        rptItems.DataBind();

其主要思想是使用两个转发器控件(任何基于模板的渲染控件)。外部中继器控件的ItemTemplate将承载报头信息和内部中继器控件。内部中继器控件将承载与标题对应的记录(按列分组)

项数据绑定中的主要逻辑是

  • 获取要绑定的记录,获取group by column对应的所有记录,并将其添加到临时列表中
  • 使用绑定的记录中的值生成标题信息
  • 将临时列表(从1)中的记录绑定到内部转发器中
  • 忽略正在绑定的记录和同一组的其他记录

  • 如果您需要代码帮助,请告诉我。

    您的数据来自哪里?如果它来自SQL,那么您可以使用DISTINCT只获取每个唯一的值。提供正在填充repeaterI的代码我已经包括,现在它来自一个存储过程,我无法在实际的存储过程中执行distinct操作。好的,这可能会起作用,但如果您查看我提供的代码,我肯定要做的就是如果previousDataItemRow!=DataItemRow然后写入DataItemRow(ConsoleType),但我不确定语法(e.Item.ItemType==ListItemType.Item | | | e.Item.ItemType==ListItemType.AlternatingItem),是的,这也可能有效。但我是用不同的方式做的。一点相反的逻辑。这是我首先要做的“如果(e.Item.ItemType!=ListItemType.Item&&e.Item.ItemType!=ListItemType.AlternatingItem)返回”,然后我要绑定内部转发器。正如我在注释中所建议的,除非在代码中有这样做的业务原因,在数据源级别执行操作总是会更高效,并且代码更少maintain@matt_lethargic,我同意您的看法,但OP的要求似乎并没有要求从数据源级别处理它。我在帮助他理解自己的逻辑。