30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
1
.NET 3.x

Динамическое заполнение ListView в WPF

02.08.2015, 02:54. Показов 3579. Ответов 10
Метки нет (Все метки)

Народ, возникла проблемка.
Существует:
XML
1
<ListView x:Name="LV1" Margin="0,108,0,0"/>
Я не знаю количество столбцов и их имена они будут создаваться в настройках.

программно выглядит так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
GridView GV = new GridView();
            GridViewColumn[] GVC = new GridViewColumn[set_col];
            double[] inte = new double[3] { 30, 150, 100 };
            try
            {
                for (int i = 0; i < set_col; i++)
                {
                    GVC[i] = new GridViewColumn();
                    GVC[i].Header = new Run(set_names[i]);
                    //GVC[i].DisplayMemberBinding = new Binding("name_" + i);
                    if(i <=2)
                    GVC[i].Width = inte[i];
                    GV.Columns.Add(GVC[i]);
                }
                LV1.View = GV;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка: " + ex.Message);
            }
Проблема заключается в добавления строк:
У меня есть массив данных на строку "data[0, i]"
C#
1
LV1.Items.Add(????);
Помогите пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.08.2015, 02:54
Ответы с готовыми решениями:

Динамическое заполнение ListView
Недавно начал разбираться с WPF? Сразу извиняюсь за вопрос. В главное окно вложено другое, в...

[WPF] Динамическое содержимое
Есть выпадающее меню. Нужно, чтобы, когда пользователь нажимал определенный пункт меню, ниже...

[WPF]ListView
Добрый день, у.в. форумчане и программисты. Возник вопрос, с которым я справится не могу, нужна...

Динамическое обновление ListView
Здравствуйте! Передо мной стоит такая задача: Имеются данные, которые меняются динамически....

10
burning1ife
1460 / 1282 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
02.08.2015, 19:12 2
Красивое решение http://stackoverflow.com/a/14172511
Только изменить здесь:
C#
1
2
3
4
5
6
7
8
9
 private void dataGrid1_AutoGeneratedColumns(object sender, EventArgs e)
    {  
        var dg = sender as DataGrid;
       //Вот здесь читать названия колонок и вставлять 
        foreach(var name in names)
        {
            dg.Columns.Add(new DataGridTextColumn { Header = name, Binding = new Binding(name) });            
        }            
    }
0
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
03.08.2015, 03:01  [ТС] 3
мне авто генерация столбцов не нужна.
Мне добавление данных уже в генерированные столбцы вставить нужно.
если в WF там просто:
C#
1
2
3
4
5
6
7
8
System.Windows.Forms.ListViewItem item = new System.Windows.Forms.ListViewItem();
            item.Text = strmas[0];
 
            for (int i = 1; i < set_col; i++)
            {
                item.SubItems.Add(strmas[i]);
            }
            LV1.Items.Add(item);
И вот как сделать тоже самое только на WPF?
0
burning1ife
1460 / 1282 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
03.08.2015, 13:05 4
Я же все показал...
"При автогенерации" вставлять, а не "автогенерация"
C#
1
2
3
4
5
6
7
8
 
var dg = sender as DataGrid;
       //Вот здесь читать названия колонок в коллекцию  names 
       //Вот здесь мы их добавляем в DataGrid
        foreach(var name in names)
        {
            dg.Columns.Add(new DataGridTextColumn { Header = name, Binding = new Binding(name) });            
        }
Добавлено через 6 минут
Строчки добавляются через
C#
1
dataGrid1.ItemsSource = collection;
collection - коллекция объектов, которые вы хотите отобразить
1
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
03.08.2015, 21:50  [ТС] 5
Цитата Сообщение от kenny69 Посмотреть сообщение
Я же все показал...
Я все понимаю, ток одно не могу понять а причем тут DataGrid. Если я использую ListView. проблема в том что я баран в DataGrid. А мне не просто отобразить данные нужно будет потом, а добавит. отредактировать и удалить. С ListView я уже такое делал в WF и хотел повторить в WPF, а получается фигня. Походу надо почитать про DataGrid возможно в WPF ток с ним возможны операции. Чет разочаровывает меня WPF(( Хотел красивую табличку сморганить.

Добавлено через 4 часа 11 минут
Прочитал про DataGrid не чем не отличается от ListView, ток тем, что можно настраивать толщину сетки)) Ну так и не догнал как заполнить строки не зная количество столбцов. вот мы создали например столбцы:
XML
1
<DataGrid x:Name="DG1" Margin="0,108,0,0" AreRowDetailsFrozen="True" AutoGenerateColumns="False" RowHeight="100" FrozenColumnCount="1"/>
Создаем столбцы:
C#
1
2
3
4
5
6
7
8
9
10
11
DataGridTextColumn[] DGTC = new DataGridTextColumn[set_col];
            Dictionary<string, string> coll = new Dictionary<string, string>();
            for (int i = 0; i < set_col; i++)
            {
                DGTC[i] = new DataGridTextColumn();
                if (i <= 2)
                    DGTC[i].Width = inte[i];
                DGTC[i].Header = new Run(setnamesmas[i]);
                DGTC[i].Binding = new Binding("n_"+i);
                DG1.Columns.Add(DGTC[i]);
            }
А вот как теперь заполнить строки, Во всех пример мы обязаны знать количество столбцов, чтоб построить класс с гетами и сетами)) а если мы их не знаем за ранние и они создаются в процессе. тогда как быть?
0
burning1ife
1460 / 1282 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
04.08.2015, 12:20 6
Можно попробовать с dynamic и ExpandoObject:

C#
1
2
3
4
dynamic person = new ExpandoObject(); 
var dictionary = (IDictionary<string, object>)person; 
dictionary.Add("Name", "Filip"); 
dictionary.Add("Age", 24);
А вот здесь есть в конце пример со Students, как раз то что нужно.
http://www.shujaat.net/2012/09... nding.html
1
Жуткая тВарЬ
389 / 325 / 134
Регистрация: 06.02.2015
Сообщений: 960
Записей в блоге: 1
04.08.2015, 15:16 7
Лучший ответ Сообщение было отмечено wmclik как решение

Решение

А свойство ItemsSource у ListView уже не модно?


ListViewColunms.zip
1
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
04.08.2015, 16:54  [ТС] 8
Цитата Сообщение от amarf Посмотреть сообщение
А свойство ItemsSource у ListView уже не модно?
Вот человек спасибо :
C#
1
public List<string[]> ArrayCollection { get; set; }
Мне как раз это и нужно было чтоб обойти создание конструктора.
добавил :
XML
1
<DataGrid x:Name="DG1" Margin="0,108,0,0" AreRowDetailsFrozen="True" AutoGenerateColumns="False" ItemsSource="{Binding ArrayCollection}"/>
и моя конструкция заработала:
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
 public partial class main : Window
    {
        public List<string[]> ArrayCollection { get; set; }
private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {
           //пример массивов
            string[] setnamesmas = new string[15] { "Name_1", "Name_2","Name_3","Name_4","Name_5","Name_6","Name_7","Name_8","Name_9","Name_10","Name_11","Name_12","Name_13","Name_14","Name_15"};
            int[] inte = new int[3] { 30, 150, 100 };
            strmas = new string[15] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15" };
             //инициализация DataGrid
            DataGridTextColumn[] DGTC = new DataGridTextColumn[set_col];
            System.Data.DataTable dt = new DataTable();
            for (int i = 0; i < set_col; i++)
            {
                dt.Columns.Add(setnamesmas[i]);
                DGTC[i] = new DataGridTextColumn();
                if (i <= 2)
                    DGTC[i].Width = inte[i];
                DGTC[i].Header = new Run(setnamesmas[i]);
                DGTC[i].Binding = new Binding(".[" + i + "]");
                DG1.Columns.Add(DGTC[i]);
            }
            ArrayCollection = new List<string[]>();
            ArrayCollection.Add(strmas);
            DG1.ItemsSource = ArrayCollection;
            
        }
}
0
burning1ife
1460 / 1282 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
04.08.2015, 17:11 9
Цитата Сообщение от wmclik Посмотреть сообщение
Сообщение от amarf
А свойство ItemsSource у ListView уже не модно?
Вот человек спасибо :
Lol, я уже давно говорил так сделать.
Цитата Сообщение от kenny69 Посмотреть сообщение
Строчки добавляются через

dataGrid1.ItemsSource = collection;
collection - коллекция объектов, которые вы хотите отобразить
0
Жуткая тВарЬ
389 / 325 / 134
Регистрация: 06.02.2015
Сообщений: 960
Записей в блоге: 1
04.08.2015, 17:49 10
Цитата Сообщение от kenny69 Посмотреть сообщение
Lol, я уже давно говорил так сделать.
И правда +)... ну не внимательный я иногда +)
0
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
04.08.2015, 18:36  [ТС] 11
Цитата Сообщение от kenny69 Посмотреть сообщение
Lol, я уже давно говорил так сделать.
Сообщение от kenny69
Строчки добавляются через
dataGrid1.ItemsSource = collection;
collection - коллекция объектов, которые вы хотите отобразить
Понимаешь коллекция коллекции рознь, я создавал кучу коллекций но не одна коллекция без {get; set;} не работала. Да ты написал dataGrid1.ItemsSource = collection; ну не написал как она создается. amarf не поленился и поделился проектом где я увидел, как и что создается. Потом поставил и тебе плюс, ты тоже был прав но не сумел толково объяснить, что бы я смог понять. и давал мне ссылки где через три колена доходили к итогу но так запутанно, что я как незнающий в этом человек толк не как не мог догнать. Ну теперь во всем разобрались, всем кто принимал участие поставил плюсы, а главное, что я остался довольный)) amarf твоя невнимательность спасло положение. Буть и дальше невнимательным))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2015, 18:36
Помогаю со студенческими работами здесь

WPF Динамическое изменение изображений
Доброго времени суток:) Подскажите пожалуйста с решением следующей задачи: в программе по нажатию...

Динамическое построение интерфейса WPF
Здравствуйте, форумчане. Решил начать переход от WinForms к WPF и сразу наткнулся на большое...

Динамическое создание формы WPF
Интересует как динамически создать форму и отобразить ее поверх существующей в WPF? Можно так:...

Wpf listview binding
Доброго времени суток. Создаю проект используя mvvmLight. Пытаюсь сделать простой вывод списка в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru