Как развернуть ячейку со значениями CSV в столбец - PullRequest
1 голос
/ 03 февраля 2020

все,

Не могли бы вы предложить лучший способ решения следующей задачи: у меня есть таблица, где каждая ячейка строки заполнена значениями, разделенными запятыми. Такое же количество значений для данной строки. Для каждой строки мне нужно создать отдельную таблицу (по требованию, по щелчку на строке или отдельной кнопке с заголовком строки), которая будет состоять из одинакового количества столбцов с одинаковыми заголовками, только каждая ячейка в строке развернута в столбце .

   AAA    BBB    CCC 
a  1,2,3  1,2,3  1,2,3
b  2,3,4  2,3,4  2,3,4

если я щелкну где-нибудь с надписью "a", то получится новая таблица:

   AAA   BBB  CCC 
1. 1     1    1
2. 2     2    2
3. 3     3    3

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

1 Ответ

1 голос
/ 04 февраля 2020

Вы можете использовать этот метод расширения, тестируя для переменных размеров столбцов:

public static class DataTableExt {
    public static DataTable UnfoldRow(this DataRow src) {
        var ans = src.Table.Clone();
        var work = src.Table.Columns.Cast<DataColumn>().Select(c => src.Field<string>(c.ColumnName).Split(',')).ToList();
        for (int j1 = 0; j1 < work[0].Length; ++j1)
            ans.Rows.Add(work.Select(w => j1 < w.Length ? w[j1] : "").ToArray());

        return ans;
    }
}

Затем вы извлекаете DataRow, как вы хотите, и передаете его:

var unfoldedRow = dt.Rows[0].UnfoldRow();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...