Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
1
.NET 3.x

Заполнение ListView

09.09.2011, 16:51. Показов 4306. Ответов 7
Метки нет (Все метки)

Создаю в xaml-разметке чистый ListView. Мне его надо заполнить программно. Причем количество столбов разное.
Допусти у меня есть список значений, типа:
C#
1
List<string> DataList = new List<string> {"2000", "500", "500", "850" }
Я создаю колонки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void FillListView()
        {
            List<string> ColumnNames = new List<string> {"Длина", "Ширина", "Высота", "Масса" };
            // Очищаем
            this.LvItemData.Items.Clear();
            // Создаем GridView
            GridView gv = new GridView();
            gv.AllowsColumnReorder = true;
            // Создаем колонки
            int i = 0;
            foreach (string ColName in ColumnNames)
            {
                GridViewColumn gvc = new GridViewColumn();
                gvc.Header = ColName;
                gv.Columns.Add(gvc);
                i++;
            }
            this.LvItemData.View = gv;
        }
Есть ли возможность добавить один ListViewItem, который будет содержать данный из DataList?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2011, 16:51
Ответы с готовыми решениями:

Заполнение listview
Подскажите, как добавить столбцы и заполнить строки, при нажатии кнопки?

Заполнение ListView
Привет всем столкнулся с такой проблемой: есть следующий ListView &lt;ListView Height=&quot;313&quot;...

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

Заполнение ListView из коллекции
Подскажите как осуществить привязку данных в ListView item source из ObservableCollection Есть...

7
Эксперт .NET
4342 / 2004 / 387
Регистрация: 27.03.2010
Сообщений: 5,462
Записей в блоге: 1
09.09.2011, 20:57 2
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
 
namespace Wpf_Debts
{
    /// <summary>
    /// Логика взаимодействия для Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        ObservableCollection<SomeObject> DataList = new ObservableCollection<SomeObject>() 
        {
            new SomeObject(2000, 500, 500, 850), 
            new SomeObject(4555, 674, 45, 3456), 
            new SomeObject(2000, 500, 500, 4373734), 
            new SomeObject(88990, 3467, 3466, 34) 
        };
 
        public Window1()
        {
            InitializeComponent();
        }
 
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            FillListView();
        }
 
        private void FillListView()
        {
            List<string> columnNames = new List<string> { "Длина", "Ширина", "Высота", "Масса" };
            List<string> bindingColumns = new List<string>(columnNames.Count) { "Length", "Width", "Height", "Weight" };
            // Очищаем
            //LvItemData.Items.Clear();
            // Создаем GridView
            GridView gv = new GridView();
            gv.AllowsColumnReorder = true;
            // Создаем колонки
            for (int i = 0; i < columnNames.Count; i++)
            {
                GridViewColumn gvc = new GridViewColumn();
                gvc.Header = columnNames[i];
                Binding bind = new Binding(bindingColumns[i]);
                gvc.DisplayMemberBinding = bind;
                gv.Columns.Add(gvc);
            }
            LvItemData.View = gv;
            LvItemData.ItemsSource = DataList;
        }
    }
 
    public class SomeObject
    {
        public int Length { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public int Weight { get; set; }
 
        public SomeObject(int Length, int Width, int Height, int Weight)
        {
            this.Length = Length;
            this.Width = Width;
            this.Height = Height;
            this.Weight = Weight;
        }
    }
}
0
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
09.09.2011, 22:15  [ТС] 3
Спасибо конечно, НО...
В том-то и беда, что количество этих значений всегда разное! В данном примере было 4 (не в смысле количества ListViewItem, а в смысле количества столбиков) значения, а может быть и 5, и 10 и всегда по разному
0
Эксперт .NET
4342 / 2004 / 387
Регистрация: 27.03.2010
Сообщений: 5,462
Записей в блоге: 1
09.09.2011, 22:53 4
И? В каком месте проблемы то? Ну меняй коллекцию стобиков и биндингов. Или сделай коллекцию классов с названиями столбцов и биндингов. Вообще не совсем ясно в какой задаче применяешь это всё дело.
0
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
09.09.2011, 23:10  [ТС] 5
Наверно я плохо объясняю (как обычно )
Вот в этом классе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SomeObject
    {
        public int Length { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public int Weight { get; set; }
 
        public SomeObject(int Length, int Width, int Height, int Weight)
        {
            this.Length = Length;
            this.Width = Width;
            this.Height = Height;
            this.Weight = Weight;
        }
    }
четыре позиции - длина, ширина, высота, вес. Я имею ввиду, что вот этих значений может быть разное количество. Тут 4, а может быть и 5 и 6, и т.д.
В программе типа так - данные берутся из разных файлов. Они требуются для отрисовки. А в окне просто отображаются для пользователя. Вот для одного объекта допустим достаточно 3 значений (длина, ширина, высота) чтобы нарисовать объект, а для другого нужно допусти уже пять значений. Для разных объектов по-разному. Эти значения нужно в окне отобразить пользователю. С ListView выглядит аккуратно и количеством столбиков легко оперировать, но заполнить не получается (ListViewItem должен быть всего-лишь один, но с разным количеством столбиков).
Все значения я получаю в виде списка.
Конечно можно добавить StackPanel и наполнять его TextBox'ми, но не хотелось бы (
0
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
12.09.2011, 23:06  [ТС] 6
В общем - придумал вариант. Создал специальный XmlDocument, заполнил его данными из списка, а затем привязал к ListView через Bind
0
Эксперт .NET
4342 / 2004 / 387
Регистрация: 27.03.2010
Сообщений: 5,462
Записей в блоге: 1
13.09.2011, 06:53 7
Можешь показать на примере отдельном, как реализовал? Чтобы можно было у себя запустить и посмотреть, интересно как сделал.
0
5 / 5 / 4
Регистрация: 20.01.2011
Сообщений: 350
13.09.2011, 10:22  [ТС] 8
Пожалуйста. Примерчик с конкретными списками, но естественно можно с этими списками творить, что угодно
З.Ы. Конечно это не моя гениальность - пример привязки к xml нашел на просторах тырнета. Собственно говоря - практически то, что вы мне выше в пример писали
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Linq;
using System.Collections.Generic;
 
namespace WpfApplication1
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        XmlDocument TempXmlDoc = null;
 
        public MainWindow()
        {
            InitializeComponent();
            FillTempXmlDoc();
            FillListView();
        }
        private void FillTempXmlDoc()
        {
            List<string> Items = new List<string> {"5000","3000","800","3580" };
            TempXmlDoc = new XmlDocument();
            XmlElement xmlel = TempXmlDoc.CreateElement("Item");
            int i=1;
            foreach (string item in Items)
            {
                XmlAttribute xmlattr = TempXmlDoc.CreateAttribute("Prop" + i.ToString());
                xmlattr.Value = item;
                xmlel.Attributes.Append(xmlattr);
                i++;
            }
            TempXmlDoc.AppendChild(xmlel);
        }
        private void FillListView()
        {
            if (TempXmlDoc == null) return;
            List<string> ColumnNames = new List<string> {"Длина","Ширина","Высота", "Масса" };
            // Очищаем
            this.listview.View = null;
            // Создаем GridView
            GridView gv = new GridView();
            gv.AllowsColumnReorder = true;
            // Создаем колонки
            int i = 1;
            foreach (string ColName in ColumnNames)
            {
                GridViewColumn gvc = new GridViewColumn();
                Binding bind = new Binding();
                bind.XPath = "@Prop" + i.ToString();
                gvc.DisplayMemberBinding = bind;
                gvc.Header = ColName;
                gv.Columns.Add(gvc);
                i++;
            }
            this.listview.View = gv;
            XmlDataProvider xmldp = new XmlDataProvider();
            xmldp.Document = TempXmlDoc;
            // Bind the data to the ListView
            var binding = new System.Windows.Data.Binding()
            {
                Source = xmldp,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                XPath = "//Item"
            };
            this.listview.SetBinding(ItemsControl.ItemsSourceProperty, binding);
        }
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2011, 10:22

Заполнение ListView из XAML
Здравствуйте, есть такая проблемка, у меня есть класс public class Person { public...

Listview заполнение столбцов из БД
Создал в WPF Listview с двумя столбцами ListView Margin=&quot;0,27,0,0&quot; Name=&quot;listview&quot;...

Динамическое заполнение ListView в WPF
Народ, возникла проблемка. Существует: &lt;ListView x:Name=&quot;LV1&quot; Margin=&quot;0,108,0,0&quot;/&gt; Я не знаю...

Заполнение ListView данными класса (новости)
public class News { public string Author { get; set; } public...

Заполнение ListView из списка
Здравствуйте! Имеется список List&lt;Dictionary&lt;string, obj&gt;&gt;. Имеется ListView, с определенным...

Заполнение колонок в ListView
Добрый день! Помогите, пожалуйста. На форме расположен ListView1. В нем есть четыре столбца....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.