Заполнить данные в определенную ячейку в DataTable -C#

У меня есть данные вроде

 ConcurrentDictionary<string, ConcurrentDictionary<string,string> OneTwoThree =
                new ConcurrentDictionary<string, ConcurrentDictionary<string, string>();

Я хочу такой результат Окончательное изображение Что я пробовал:

 DataTable dt = new DataTable();
 dt.Columns.Add("TwoDetails");
 ISet<string> two = new HashSet<string>();
 Parallel.ForEach(OneTwoThree , One=>
             {
                 dt.Columns.Add(One.Key);
                 foreach(var Two in One.Value)
                 { 
                  two.Add(Two.Key); // To get Distinct Values
                 }
             });
 foreach(var item in two)
 { 
   var row = dt.NewRow();
   row["TwoDetails"] = row;
 }

Теперь у меня нет идеи добавлять «три значения» к конкретной ячейке, как показано на изображении.

Какие-либо предложения.

@TimSchmelter .. если есть имя строки и имя столбца, как можно вставить данные в ячейку (которая является пересечением имени строки и имени столбца).

Mahen 22.03.2018 14:29

Возможно дублирование stackoverflow.com/questions/12292287/…

sachin 22.03.2018 14:39

@sachin .. здесь я имею дело с rownames, которые сортируются при создании новой строки в datatable.

Mahen 22.03.2018 14:49

какие-либо предложения?

Mahen 22.03.2018 14:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
775
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

 public class DataTableDetails
{
    public string RowName { get; set; }
    public int RowNumber { get; set; }
}

И это не эффективное решение, но может вам помочь.

    ISet<string> two = new HashSet<string>();
    List<DataTableDetails> dtdetaills=new List<DataTableDetails>();
     Parallel.ForEach(OneTwoThree , One=>
                 {
                     dt.Columns.Add(One.Key);
                     foreach(var Two in One.Value)
                     { 
                      two.Add(Two.Key); // To get Distinct Values
                     }
                 });
int count=0;
foreach(var item in two)
 { 
   var row = dt.NewRow();
   row["TwoDetails"] = row;
   DataTableDetails details = new DataTableDetails();
   details.RowName = item;
   details.RowNumber = count++; // we can easily get row number 
   dtdetails.Add(details);
 }

И наконец

foreach(var One in OnrTwoThree)
            {
                foreach(var Two in One.Value)
                {
                   foreach(var rowdetails in dtdetails)
                    {
                        if (Two.Key==rowdetails.RowName)
                        {
                            dt.Rows[rowdetails.RowNumber][One.Key] = Two.Value;
                        }

                    }
                }
            }
Ответ принят как подходящий

Еще один вопрос о сводной таблице. Сделано 1000. См. Код ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;


namespace ConsoleApplication31
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, Dictionary<string, string>> OneTwoThree = new Dictionary<string, Dictionary<string, string>>() {
                {"A", new Dictionary<string,string>(){{"U","s"}, {"Z","a"}}},
                {"B", new Dictionary<string,string>(){{"W","e"},{"X","d"},{"Y","d"}}},
                {"C", new Dictionary<string,string>(){{"V","f"}, {"W","a"},{"Z","w"}}},
            };

            string[] columns = OneTwoThree.Select(x => x.Key).OrderBy(x => x).ToArray();

            DataTable dt = new DataTable();
            dt.Columns.Add("TwoDetails", typeof(string));
            foreach(string column in columns)
            {
                dt.Columns.Add(column, typeof(string));
            }

            string[] rows = OneTwoThree.Select(x => x.Value.Select(y => y.Key)).SelectMany(x => x).Distinct().OrderBy(x => x).ToArray();
            var flip = rows.Select(x => new { row = x, columns = OneTwoThree.Where(y => y.Value.ContainsKey(x)).Select(y => new { col = y.Key, value = y.Value[x] }).ToList() }).ToList();
            //create pivot table
            foreach (var row in flip)
            {
                DataRow newRow = dt.Rows.Add();
                newRow["TwoDetails"] = row.row;
                foreach (var column in row.columns)
                {
                    newRow[column.col] = column.value;
                }
            }
        }

    }
}

хороший .ty. но в вашем словаре OneTwoThree должно быть только 3 ключа (то есть A, B, C), а внутренний словарь должен содержать U, V, W, X, Y, Z (согласно формулировке проблемы, см. изображение) .Plz редактировать. однако у меня возникла идея решить с помощью ур-подхода. Ty

Mahen 22.03.2018 17:10

Другие вопросы по теме