С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
.NET 3.x

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

02.08.2015, 02:54. Показов 4325. Ответов 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)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.08.2015, 02:54
Ответы с готовыми решениями:

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

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

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

10
burning1ife
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
02.08.2015, 19:12
Красивое решение 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  [ТС]
мне авто генерация столбцов не нужна.
Мне добавление данных уже в генерированные столбцы вставить нужно.
если в 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
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
03.08.2015, 13:05
Я же все показал...
"При автогенерации" вставлять, а не "автогенерация"
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  [ТС]
Цитата Сообщение от 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
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
04.08.2015, 12:20
Можно попробовать с 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
Жуткая тВарЬ
394 / 329 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
04.08.2015, 15:16
Лучший ответ Сообщение было отмечено wmclik как решение

Решение

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


ListViewColunms.zip
1
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
04.08.2015, 16:54  [ТС]
Цитата Сообщение от 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
 Аватар для kenny69
1466 / 1287 / 294
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
04.08.2015, 17:11
Цитата Сообщение от wmclik Посмотреть сообщение
Сообщение от amarf
А свойство ItemsSource у ListView уже не модно?
Вот человек спасибо :
Lol, я уже давно говорил так сделать.
Цитата Сообщение от kenny69 Посмотреть сообщение
Строчки добавляются через

dataGrid1.ItemsSource = collection;
collection - коллекция объектов, которые вы хотите отобразить
0
Жуткая тВарЬ
394 / 329 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
04.08.2015, 17:49
Цитата Сообщение от kenny69 Посмотреть сообщение
Lol, я уже давно говорил так сделать.
И правда +)... ну не внимательный я иногда +)
0
30 / 30 / 18
Регистрация: 20.06.2012
Сообщений: 165
04.08.2015, 18:36  [ТС]
Цитата Сообщение от kenny69 Посмотреть сообщение
Lol, я уже давно говорил так сделать.
Сообщение от kenny69
Строчки добавляются через
dataGrid1.ItemsSource = collection;
collection - коллекция объектов, которые вы хотите отобразить
Понимаешь коллекция коллекции рознь, я создавал кучу коллекций но не одна коллекция без {get; set;} не работала. Да ты написал dataGrid1.ItemsSource = collection; ну не написал как она создается. amarf не поленился и поделился проектом где я увидел, как и что создается. Потом поставил и тебе плюс, ты тоже был прав но не сумел толково объяснить, что бы я смог понять. и давал мне ссылки где через три колена доходили к итогу но так запутанно, что я как незнающий в этом человек толк не как не мог догнать. Ну теперь во всем разобрались, всем кто принимал участие поставил плюсы, а главное, что я остался довольный)) amarf твоя невнимательность спасло положение. Буть и дальше невнимательным))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.08.2015, 18:36
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru