Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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# 使用ASP.NET将数据与datatable分组_C#_Asp.net_.net_Linq_Datatable - Fatal编程技术网

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],
            };
        }
    }
}