powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Считать построчно источник даннных грида
13 сообщений из 13, страница 1 из 1
Считать построчно источник даннных грида
    #39494059
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ, подскажите, как с грида проекта WPF считать источник данных, заданный таким макаром

Код: c#
1.
gcMetrics.ItemsSource = dt.AsEnumerable().Select(x => new { Description = x.Field<string>("Description"), PlanVal = x.Field<decimal>("PlanVal"), FactVal = x.Field<decimal>("FactVal") });



начал как бы с

Код: c#
1.
EnumerableRowCollection en = (EnumerableRowCollection)gcMetrics.ItemsSource;



Но дальше с этим EnumerableRowCollection сделать ничего не получается. А мне бы получить или таблицу или массив DataRow.
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494081
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так используй в первой строке вместо анонимного типа конкретный и сможешь потом к нему приводить.
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494083
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sposad,

деанонимизируйте класс
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494087
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мужики, я только эту WPF начал щупать ради интереса лишь, можно как-нить для тупорылого?
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494090
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не имеет никакого отношения к WPF - читайте учебник по C#

Код: c#
1.
x => new { Description =

создает анонимный класс
Код: c#
1.
x => new MyClass { Description =

создает конкретный класс
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494145
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sposadМужики, я только эту WPF начал щупать ради интереса лишь, можно как-нить для тупорылого?

Вот пример, возможно пригодится.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var dt = new DataTable();
            dt.Columns.Add("Description");
            dt.Columns.Add("PlanVal");
            dt.Columns.Add("FactVal");
            dt.Rows.Add("my desc", "0,15", "1,56");
            dt.Rows.Add("my desc", "1,54", "42,42");
            var tst = dt.ToList<MyClass>();
        }
    }

    public class MyClass
    {
        public string Description { get; set; }
        public decimal PlanVal { get; set; }
        public decimal FactVal { get; set; }
    }

    public static class Extenstion
    {
        public static List<T> ToList<T>(this DataTable dt) where T : new()
        {
            return dt.AsEnumerable().Select(r =>
            {
                var obj = new T();
                foreach (var prop in typeof(T).GetProperties())
                {
                    if (dt.Columns.Contains(prop.Name))
                    {
                        prop.SetValue(new T(), Convert.ChangeType(r[prop.Name], prop.PropertyType));
                    }
                }
                return obj;
            }).ToList();
        }
    }
}

...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494228
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sposadМужики, я только эту WPF начал щупать ради интереса лишь, можно как-нить для тупорылого?

Слегка подправил.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var dt = new DataTable();
            dt.Columns.Add("Description");
            dt.Columns.Add("PlanVal");
            dt.Columns.Add("FactVal");
            dt.Rows.Add("my desc", "0,15", "1,56");
            dt.Rows.Add("my desc2", "1,54", "42,42");
            dt.Rows.Add("my desc3", "24,35", "33,11");
            var tst = dt.ToList<MyClass>();
        }
    }

    public class MyClass
    {
        public string Description { get; set; }
        public decimal PlanVal { get; set; }
        public decimal FactVal { get; set; }
    }

    public static class Extenstion
    {
        public static List<T> ToList<T>(this DataTable dt) where T : new() => dt.AsEnumerable().Select(r =>
        {
            var o = new T();
            typeof(T).GetProperties().Where(x => dt.Columns.Contains(x.Name)).ToList().ForEach(p => p.SetValue(o, Convert.ChangeType(r[p.Name], p.PropertyType)));
            return o;
        }).ToList();
    }
}

...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494415
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы дополнить тему, есть еще вот такое полезное расширение.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public static Dictionary<string, List<object>> ToDictionary(this DataTable dt)
        {
            var dic = new Dictionary<string, List<object>>();
            foreach (DataColumn col in dt.Columns)
            {
                dic.Add(col.ColumnName, dt.AsEnumerable().Select(r => Convert.ChangeType(r[col.ColumnName], col.DataType)).ToList());
            }
            return dic;
        }


#DataTable.ToList #DataTable.ToDictionary
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494424
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем, сделал немного по другому

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 gcMetrics.ItemsSource = dt.AsEnumerable().Select(x => new Grid_ItemSource() { Description = x.Field<string>("Description"), PlanVal = x.Field<decimal>("PlanVal"), FactVal = x.Field<decimal>("FactVal") });

   public class Grid_ItemSource
    {
        public string Description { get; set; }
        public decimal PlanVal { get; set; }
        public decimal FactVal { get; set; }
    }

EnumerableRowCollection en = (EnumerableRowCollection)gcMetrics.ItemsSource;
IEnumerable<Grid_ItemSource> ei = en.Cast<Grid_ItemSource>();
var q = ei.AsEnumerable().Select(s => new { Description = s.Description }).ToList();


мне нужна была только первая колонка от источника
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494444
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ei.AsEnumerable() не нужно, ei и так уже IEnumerable<>
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494445
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, непонятно зачем вообще на выходе анонимный тип new { Description = s.Description }, почему не просто List<string>
Код: c#
1.
var q = ei.Select(s => s.Description).ToList();
...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494446
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sposad,

Так не нравится?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
            gcMetrics.ItemsSource = dt.ToList<Grid_ItemSource>();
            var q = ((List<Grid_ItemSource>)gcMetrics.ItemsSource).Select(x => x.Description).ToList();
        }

        public class Grid_ItemSource
        {
            public string Description { get; set; }
            public decimal PlanVal { get; set; }
            public decimal FactVal { get; set; }
        }
    }

    public static class Extenstions
    {
        public static List<T> ToList<T>(this DataTable dt) where T : new() => dt.AsEnumerable().Select(r =>
        {
            var obj = new T();
            typeof(T).GetProperties().Where(p => dt.Columns.Contains(p.Name)).ToList().ForEach(p => p.SetValue(obj, Convert.ChangeType(r[p.Name], p.PropertyType)));
            return obj;
        }).ToList();
    }

...
Рейтинг: 0 / 0
Считать построчно источник даннных грида
    #39494475
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

Нравится, списывать не люблю:) Тебе спасибо отдельное, я это в избранное суну
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Считать построчно источник даннных грида
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]