Список привязок KeyValuePairs в DataGrid, каждый ключ является заголовком coulmn - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть объект с указанными параметрами (строки / значения) и List<KeyValuePair<string, string>>

 public class Product
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public string ReferenceNumber { get; set; }
        public string Category { get; set; }
        public List<KeyValuePair<string, string>> AttributeList { get; set; }
}

Я хочу привязать этот объект к DataGrid, но я хочу, чтобы каждая запись в KVP была заголовком столбца изначение.Например:

AttributeList  = new List<KeyValuePair<string, string>>
{
   new KeyValuePair{"SIZE", "30"}, new KeyValuePair{"WIDTH", "50"}
}

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

1 Ответ

0 голосов
/ 23 ноября 2018

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

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


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Product> products = new List<Product>();

            List<string> keys = products.Select(x => x.AttributeList.Select(y => y.Key)).SelectMany(x => x).Distinct().ToList();

            DataTable pivot = new DataTable();
            pivot.Columns.Add("Id", typeof(long));
            pivot.Columns.Add("Name", typeof(string));
            pivot.Columns.Add("ReferenceNumber", typeof(string));
            pivot.Columns.Add("Category", typeof(string));
            foreach (string key in keys)
            {
                pivot.Columns.Add(key, typeof(string));
            }

            foreach (Product product in products)
            {
                DataRow row = pivot.Rows.Add();
                row["Id"] = product.Id;
                row["Name"] = product.Name;
                row["ReferenceNumber"] = product.ReferenceNumber;
                row["Category"] = product.Category;
                foreach (KeyValuePair<string, string> attr in product.AttributeList)
                {
                    row[attr.Key] = attr.Value;
                }

            }

        }
    }
    public class Product
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public string ReferenceNumber { get; set; }
        public string Category { get; set; }
        public List<KeyValuePair<string, string>> AttributeList { get; set; }
    }
}
...