C# 使用ASP.NET将数据与datatable分组
我无法按照下表格式对数据进行分组,并且无法按照第二表格式对数据进行分组C# 使用ASP.NET将数据与datatable分组,c#,asp.net,.net,linq,datatable,C#,Asp.net,.net,Linq,Datatable,我无法按照下表格式对数据进行分组,并且无法按照第二表格式对数据进行分组 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
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事件期间,我尝试了网格视图,它工作正常,但在中继器上无法获得相同的结果。我确信,在将数据分配给中继器之前,我们需要对数据进行分组
但我不确定如何像上面提到的那样对数据进行分组
这是我的转发器代码
<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>
可用端点
转换端点
25*
25*
有人知道这个解决方案如何分组吗?分组规则在您最初的问题中并不明显,但根据您的评论,我认为您需要
- 按标识符(如subid)对记录进行分组
- 如果转换字段多次显示,则多次公开子ID结果
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; }
}
公共类输入模型
{
公共字符串遗留{get;set;}
公共字符串子ID{get;set;}
已转换的公共字符串{get;set;}
公共字符串licPart{get;set;}
公共字符串计数{get;set;}
}
公共类输出模型
{
公共字符串遗留{get;set;}
公共字符串子ID{get;set;}
公共IList列表{get;set;}
公共字符串licPart{get;set;}
}
在其他可以依赖的解决方案中,C#与enumerable.Aggregate(也有一些很好的例子)一起使用非常方便
var seed=newlist();
var结果=记录
.聚合(种子,(结果,当前)=>
{
var query=从结果中的结果
其中result.legacy==current.legacy
&&(result.list==null
||!result.list.Contains(current.converted))
选择结果;
var output=query.FirstOrDefault();
if(输出==null)
{
输出=新的输出模型
{
legacy=current.legacy,
subid=current.subid,
licPart=curren
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],
};
}
}
}