Выделите повторяющиеся ячейки в таблице HTML - PullRequest
0 голосов
/ 17 июня 2020

Это немного сложная задача для меня на данный момент, поэтому я подумал, что лучше спросить совета, прежде чем приступить к возможному решению.

У меня есть метод для HTML создания таблицы из list:

    public static string CreateHTMLTable<T>(IEnumerable<T> list, params Func<T, (object, string)>[] fxns)
    {
        var sb = new StringBuilder();
        sb.Append("<table>\n");
        sb.Append("<thead>\n");
        sb.Append("<tr>\n");

        foreach (var fxn in fxns)
            sb.Append("<th>").Append(fxn(default).Item2).AppendLine("</th>");

        sb.Append("</tr>\n");
        sb.Append("</thead>\n");

        foreach (var item in list)
        {
            sb.Append("<tr>\n");
            foreach (var fxn in fxns)
            {
                sb.Append("<td>");
                sb.Append(fxn(item).Item1);
                sb.Append("</td>");
            }
            sb.Append("\n</tr>\n");
        }
        sb.Append("</table>");

        return sb.ToString();
    }

В качестве вывода я получаю таблицу формата string = HTML. В этой таблице некоторые слова дублируются.

        var Table = CreateHTMLTable(duplicate,
            x => (x?.ContactPerson, "Title"),
            x => (x?.Company, "Company")            
            );

Например:

<tr>
<td>John Smith</td><td></td>
</tr>
<tr>
<td>John Smith</td><td></td>
</tr>
<tr>
<td>Donald Duck</td><td>Microsoft</td>
</tr>
<tr>
<td>Donald Duck</td><td>Microsoft</td>
</tr>

Я хочу выделить пары = дубликаты. Таким образом, вывод будет примерно таким:

<tr>
<td bgcolor="green">John Smith</td><td></td>
</tr>
<tr>
<td bgcolor="green">John Smith</td><td></td>
</tr>
<tr>
<td bgcolor="red">Donald Duck</td><td>Microsoft</td>
</tr>
<tr>
<td bgcolor="red">Donald Duck</td><td>Microsoft</td>
</tr>

Думаю, мне следует создать другой метод для этой цели с генератором цвета:

    public static string HighLightDuplicates(string HTMLTable)
    {

        var random = new Random();
        var color = string.Format("#{0:X6}", random.Next(0x1000000));

        string myStrings = HTMLTable;

        if (myStrings.Distinct().Count() != myStrings.Count())
        {
            var string2 = myStrings.Replace("<td>", string.Format("%<td bgcolor=\"{0}\">%", color));
        }

        return myStrings;
    }

Однако приведенный выше код не добавляет цвет в таблицу .

string EmailTable = HighLightDuplicates(Table);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...