我在对下表格式的数据进行分组并尝试按照第二种表格格式对数据进行分组时遇到问题
legacy subid converted licPart count
Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL AC CE E-LTU LIC-CP-EN-100 100
Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OB USR E-LTU LIC-CP-EN-100 100
Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OG EP E-LTU LIC-CP-EN-100 100
Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL AC CE E-LTU LIC-CP-EN-100 100
Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OB USR E-LTU LIC-CP-EN-100 100
Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OG EP E-LTU LIC-CP-EN-100 100
Ent 1K EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL AC CE E-LTU LIC-CP-EN-1K 1000
Ent 1K EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OB USR E-LTU LIC-CP-EN-1K 1000
Ent 1K EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL OG EP E-LTU LIC-CP-EN-1K 1000
我正在尝试获取如下所示的数据,以便进一步分配给中继器以显示信息
Ent 100 EP Lic E-LTU 7ks7gp-qc42sn-g7zk0q-7pzmb7-xdp6yb NL AC CE E-LTU LIC-CP-EN-100 100
NL OB USR E-LTU
NL OG EP E-LTU
Ent 100 EP Lic E-LTU NL AC CE E-LTU LIC-CP-EN-100 100
NL OB USR E-LTU
NL OG EP E-LTU
Ent 1K EP Lic E-LTU NL AC CE E-LTU LIC-CP-EN-1K 1000
NL OB USR E-LTU
NL OG EP E-LTU
我在 rowdatabound 事件期间尝试使用 GridView ,它工作正常,但我无法使用中继器获得相同的结果。我确定我们需要在将数据分配给转发器之前对数据进行分组
但是我不确定如何像上面提到的那样对数据进行分组
这是我的转发器代码
<asp:Repeater ID="RepeaterEnterprise" runat="server" OnItemDataBound="ItemBound">
<HeaderTemplate>
<table>
<tr>
<th>Avaialable Endpoints
</th>
<th>Converted Endpoints
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<table>
<tr>
<td>
<asp:TextBox runat="server" ID="txtAvaialble" Text='<%#Eval("LicenseCount") %>' ReadOnly="true">
</asp:TextBox>
</td>
<td>
<asp:TextBox runat="server" ID="txtConverted" Text='' ReadOnly="true">
</asp:TextBox>
</td>
<td>
<tr>
<td>
<asp:Label ID="lblcount" runat="server" Text='<%# Eval("Converted") %>'></asp:Label>
</td>
<td>25*
</td>
</tr>
</table>
<table>
<tr>
<td>
<asp:TextBox runat="server" ID="txtEndpoints" Text=''>
</asp:TextBox>
</td>
<td>
<asp:TextBox runat="server" ID="txtTotalEndPoints" Text='' ReadOnly="true">
</asp:TextBox>
</td>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
<SeparatorTemplate>
<tr>
<td>
</td>
</tr>
</SeparatorTemplate>
<AlternatingItemTemplate>
<table>
<tr>
<td>
<asp:TextBox runat="server" ID="txtAvaialbleEndPoints" Text='<%#Eval("Count") %>' ReadOnly="true">
</asp:TextBox>
</td>
<td>
<asp:TextBox runat="server" ID="txtConvertedEndPoints" Text='' ReadOnly="true">
</asp:TextBox>
</td>
<td>
<tr>
<td>
<asp:Label ID="lblcountryname" runat="server" Text='<%# Eval("Converted") %>'></asp:Label>
</td>
<td>25*
</td>
</tr>
</table>
<table>
<tr>
<td>
<asp:TextBox runat="server" ID="txtEndpoints" Text=''>
</asp:TextBox>
</td>
<td>
<asp:TextBox runat="server" ID="txtTotalEndPoints" Text='' ReadOnly="true">
</asp:TextBox>
</td>
</tr>
</table>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
谁能知道这个解决方案如何进行分组?
最佳答案
分组规则在您最初的问题中并不明显,但根据您的评论,我认为您需要
- 按标识符对记录进行分组,例如 subid
- 如果 converted 字段出现多次,则多次公开 subid 结果
我想你有一些类似于下面的类
public class InputModel
{
public string legacy { get; set; }
public string subid { get; set; }
public string converted { get; set; }
public string licPart { get; set; }
public string count { get; set; }
}
public class OutputModel
{
public string legacy { get; set; }
public string subid { get; set; }
public IList<string> list { get; set; }
public string licPart { get; set; }
}
在其他解决方案中,您可以依赖 reducer/fold/aggregate方法,为此,C# 可枚举 .Aggregate 派上了用场(一些很好的例子也可以在 here 中找到)
var seed = new List<OutputModel>();
var outcome = records
.Aggregate(seed, (results, current) =>
{
var query = from result in results
where result.legacy == current.legacy
&& (result.list == null
|| !result.list.Contains(current.converted))
select result;
var output = query.FirstOrDefault();
if (output == null)
{
output = new OutputModel
{
legacy = current.legacy,
subid = current.subid,
licPart = current.licPart,
list = new List<string>
{
current.converted
}
};
results.Add(output);
}
else
{
output.list.Add(current.converted);
}
return results;
});
给你这个
编辑
根据要求,请参阅下面将表映射到输入记录集合的一种方法
public static class Extensions
{
public static IEnumerable<InputModel> Map(this DataTable instance)
{
foreach (DataRow row in instance.Rows)
{
yield return new InputModel
{
legacy = (string)row[0],
subid = (string)row[1],
converted = (string)row[2],
licPart = (string)row[3],
count = (string)row[4],
};
}
}
}
关于c# - 使用 ASP.NET 使用数据表对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47725998/