Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
16 / 16 / 0
Регистрация: 10.04.2011
Сообщений: 271

Как организовать данные в xml файле и связать их с listView

09.10.2012, 02:04. Показов 2830. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В виду нюансов учебного процесса, пришлось делать по wpf программу, не имея фундаментальных знаний в данном вопросе, потому я прошу помощи.
Проблема не столь в самом wpf, сколь в том, что все нужно делать через хорошие, знакомые мне БД, а через чертов xml файл, и как осуществлять привязку и биндинги с ними - я толком примеров годных к моему случаю не нашел.

В общем, задача - сделать программу такого плана.
Программа "поиска поездов по маршрутам и выбора места в вагоне." Что нужно сделать и что я уже сделал, и с чем я испытываю трудности:
Вот собственно грубо набросанный интерфейс:

(Рисунок во вложении, потому как форум ссылку разместить не дает )
С чем у меня собственно проблемы?
1. Нужно, чтобы листвью ( список поездов, слева ), формировался тогда и только тогда, когда я выберу значения лисбокса "откуда" и "куда". На основании того, какие города были выбраны. Как это сделать, я вообще не представляю.
2. При нажатии на один из поездов в левом листвью, в правом листвью, в зависимости от выбранного радиобаттона, должен отображаться список вагонов ( для каждого поезда индивидуален ), в которых есть свободные места.
3. При выборе вагона со свободными местами, можно нажать кнопку "заказать", и Только в этом случае вылезет сообщение о том, что "билет заказан успешно".

Основная проблема в том, что я не совсем понимаю, как именно нужно организовать данные в xml файле и связать их с работой моей программы ( т.е. с listView ). Именно эта часть задания поставила меня в полный тупик.
Буду очень благодарен за любую помощь. В идеале - объяснение, как это все делать с кодом, но обрадуюсь я даже ссылке на пример, или на книгу, где рассматривается пример чего-то подобного с разъяснениями.
С уважением!
Миниатюры
Как организовать данные в xml файле и связать их с listView  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.10.2012, 02:04
Ответы с готовыми решениями:

Как обновить данные в файле xml на основе другого xml?
Добрый день! Мне необходимо разработать XSLT преобразование, которое будет обновлять данные в файле formats.xml (узлы name, shortName,...

Как записать данные из XML файла в ListView
Привет. у меня проблема. не могу записать(прочитать и в нужное место записать) данные из XML файла в нужные столбцы и строки в ListViewю...

Как правильно считать данные в .xml файле?
Приветствую всех. Вопрос такой, есть логи утилиты AVZ, пример таких логов можете найти в разделе лечения. Меня интересует файл .xml...

14
Просто интересуюсь.
 Аватар для Imitator
42 / 42 / 9
Регистрация: 19.10.2011
Сообщений: 247
09.10.2012, 10:25
Вот проект, думаю Вам подойдет.
Combo Box Demo.zip
1
16 / 16 / 0
Регистрация: 10.04.2011
Сообщений: 271
10.10.2012, 14:25  [ТС]
Спасибо огромное!
А как сделать многостолбцовый листвью, который бы зависел от выбранных _Двух_ комбобоксов?
И чтобы при выборе одного из элементов листвью, отображались другие?

Добавлено через 2 часа 5 минут
А еще вот вопрос:
Вот так у меня в xml представлены вагоны поезда:
XML
1
2
3
4
5
<Plac Name="xxx" yyy="yy">
        <Vagon Name="1" places="11"></Vagon>
        <Vagon Name="2" places="33"></Vagon>
        <Vagon Name="3" places="22"></Vagon>
      </Plac>
Вот так у меня написан код в мейне:

XML
1
2
3
4
5
6
7
8
9
10
11
<ListView DataContext="{Binding ElementName=CatalogueTree0, Path=SelectedItem}"  SelectedIndex="0"
       ItemsSource="{Binding XPath=Plac}"
               Grid.Column="1" 
                  ItemTemplate="{StaticResource ResourceKey=GoodsTemplate}" SelectionChanged="ListView_SelectionChanged" >
 
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="N" Width="30">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding XPath=Vagon/@Name}"/>
Вопрос - почему в листвью появляется одна строка с вагоном, а не 3, и как это исправить?
0
Просто интересуюсь.
 Аватар для Imitator
42 / 42 / 9
Регистрация: 19.10.2011
Сообщений: 247
10.10.2012, 14:26
Вот накидал по быстрому, может подойдет...
Cityes.zip
1
Просто интересуюсь.
 Аватар для Imitator
42 / 42 / 9
Регистрация: 19.10.2011
Сообщений: 247
10.10.2012, 14:31
Цитата Сообщение от Arimand Посмотреть сообщение
Вопрос - почему в листвью появляется одна строка с вагоном, а не 3, и как это исправить?
Сейчас гляну...
1
16 / 16 / 0
Регистрация: 10.04.2011
Сообщений: 271
10.10.2012, 14:39  [ТС]
Цитата Сообщение от Imitator Посмотреть сообщение
Вот накидал по быстрому, может подойдет...
Спасибо за помощь, но у меня все-же остались вопросы.
Дело в том, что я не могу сделать как в примере.
У меня список поездов ( с пунктами выезда и назначения ) - уже есть в xml файле, и мне нужно, чтобы при выборе городов в комбобоксах, в листбоксе появлялся список поездов, которые соответствуют этим самым "откуда-куда".
Вот код с интерфейсом и xml-ом..
Вложения
Тип файла: rar Catalogue.rar (57.8 Кб, 22 просмотров)
0
Просто интересуюсь.
 Аватар для Imitator
42 / 42 / 9
Регистрация: 19.10.2011
Сообщений: 247
10.10.2012, 14:53
Ок сейчас гляну.

Добавлено через 11 минут
У Вас неправильно сформирован сам файл Catalogue.xml.

Что именно должно находиться в файле? Просто города или сразу забиты направления с часами отправки?

Ага кажется догоняю... При выборе в одном из комбобоксов города в листвью должны открыться все возможные направления с датами отправки в которых есть данный город?
1
16 / 16 / 0
Регистрация: 10.04.2011
Сообщений: 271
10.10.2012, 15:29  [ТС]
Цитата Сообщение от Imitator Посмотреть сообщение
Что именно должно находиться в файле? Просто города или сразу забиты направления с часами отправки?
У меня он пока вообще не досформирован.
Часы отправки не имеют абсолютно никакого значения.

Должны быть:
1. Города.
2. Список поездов, у каждого из которых есть список вагонов ( с местами ).
3. Как я понимаю, поездам необходимо так-же каждому указать "откуда", "куда" - названия городов, чтобы связать первый листбокс и 2 комбобокса.

Добавлено через 33 минуты
Цитата Сообщение от Imitator Посмотреть сообщение
Ага кажется догоняю... При выборе в одном из комбобоксов города в листвью должны открыться все возможные направления с датами отправки в которых есть данный город?
Нет-нет!
При выборе города в _ОБОИХ_ комбобоксах, в листвью должны открыться те поезда, у которых "откуда" и "куда" совпадает с выбранными в комбобоксах.
0
Просто интересуюсь.
 Аватар для Imitator
42 / 42 / 9
Регистрация: 19.10.2011
Сообщений: 247
10.10.2012, 20:27
Извините за долгое молчание, но я так и не смог в XAML решить Ваш вопрос...
Единственное, что могу посоветовать так это решить программно, т.е. при выборе города в комбобоксе "Откуда" создается список городов для второго комбобокса "Куда", исходя из имеющихся направлений, а уже при выборе города из списка во втором комбобоксе, выводится информация о времени отправления и свободных местах. Кстати, это принципиально, что-бы выводить информацию в листвью?
Я завтра накидаю код и выложу сюда...
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
10.10.2012, 21:12
знаю только половину решения, вот так можно отследить 2 комбобокса на наличие выбранных элементов
в хамле нельзя указать логические операции типа "not null" или ">=0", так что маленькая хитрость стыреная с интернетов - IsNullConverter

код
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        <Grid.Style>
            <Style>
                <Style.Resources>
                    <Catalogue:IsNullConverter x:Key="IsNullConverter" />
                </Style.Resources>
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding ElementName=FROM, Mode=OneWay,
                                Converter={StaticResource IsNullConverter}, Path=SelectedItem}" Value="false" />
                            <Condition Binding="{Binding ElementName=TO,  Mode=OneWay,
                                Converter={StaticResource IsNullConverter}, Path=SelectedItem}" Value="false" />
                        </MultiDataTrigger.Conditions>
                        
                        <Setter Property="Control.Background" Value="Gray"></Setter>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Grid.Style>
сам конвертер прост как валенок
C#
1
2
3
4
5
6
7
8
9
10
11
12
    public class IsNullConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (value == null);
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
        }
    }


а вот как дальше заполнить контрол не знаю, вообще делать выборку из данных и заполнять этим контролы в хамле это уже перебор
0
43 / 43 / 7
Регистрация: 09.10.2012
Сообщений: 147
11.10.2012, 11:54
Цитата Сообщение от Arimand Посмотреть сообщение
При выборе города в _ОБОИХ_ комбобоксах, в листвью должны открыться те поезда, у которых "откуда" и "куда" совпадает с выбранными в комбобоксах.
Для этого можно использовать фильтр. Написал примерчик с поездами. Фильтрует список по двум комбобоксам.
Вложения
Тип файла: rar FilterDemo.rar (53.9 Кб, 15 просмотров)
0
16 / 16 / 0
Регистрация: 10.04.2011
Сообщений: 271
11.10.2012, 17:58  [ТС]
Цитата Сообщение от Imitator Посмотреть сообщение
Извините за долгое молчание, но я так и не смог в XAML решить Ваш вопрос...
Единственное, что могу посоветовать так это решить программно, т.е. при выборе города в комбобоксе "Откуда" создается список городов для второго комбобокса "Куда", исходя из имеющихся направлений, а уже при выборе города из списка во втором комбобоксе, выводится информация о времени отправления и свободных местах. Кстати, это принципиально, что-бы выводить информацию в листвью?
Я завтра накидаю код и выложу сюда...
Буду очень благодарен вам!
Уточнение: мне не обязательно, чтобы комбобоксы зависели друг от друга. Т.е. если я открою в одном комбобоксе "Москва" и во втором смогу открыть "Москва" - ничего страшного!
Главное, чтобы поезда выводились исходя из выбранных элементов комбобоксов.
Т.е. в xml файле есть поезд, с хмл тегами: "номер, название... ... ... ОТКУДА, КУДА".
Как-то нужно соединить элементы комбобокса с этими самыми ОТКУДА, КУДА, принадлежащими поезду.
По поводу листвью - крайне желательно, в том то и проблема. Но если это критично - то не принципиально..
_________
После вывода поездов в левом листьвью, нужно, чтобы при выборе одного из элементов ( т.е. поездов ), в правом листвью появлялся список вагонов поезда.
У меня почему-то появляется список вагонов ПЕРВОГО Поезда, вне зависимости от выбранного.
Вот мой xml:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Train>
      <N Name="1"/>
      <Caption Name="Львов-Киев"/>
      <TimeLeave Name="10.10.2010"/>
      <TimeArrive Name="11.10.2010"/>
      <Train0 Name="0 Львов-Киев 10.10.2010"/>
      <Train1 Name="Львов-Киев 11.10.2010"/>
      <Plac Name="xxx" yyy="yy">
        <Vagon Name="1" places="11"/>
        <Vagon Name="2" places="33"/>
        <Vagon Name="3" places="22"/>
      </Plac>
      <Kype>
        <Vagon Name="4" places="10"></Vagon>
        <Vagon Name="5" places="16"></Vagon>
        <Vagon Name="6" places="12"></Vagon>
      </Kype>
      
    </Train>
А вот этот листвиев в мейн. виндоу:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<ListView DataContext="{Binding ElementName=CatalogueTree0, Path=SelectedItem}" 
                  ItemsSource="{Binding XPath=Plac/Vagon}" Grid.Column="1" 
                  ItemTemplate="{StaticResource ResourceKey=GoodsTemplate}" SelectionChanged="ListView_SelectionChanged" >
 
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="N" Width="30">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding XPath=@Name}"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Свободных мест" Width="150">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding XPath=@places}"/>
                            </DataTemplate>
0
Просто интересуюсь.
 Аватар для Imitator
42 / 42 / 9
Регистрация: 19.10.2011
Сообщений: 247
11.10.2012, 18:55
Вы мне скиньте xml файл, уже готовый.
Т.е. сформирован вид хотя-бы одного поезда.
0
Просто интересуюсь.
 Аватар для Imitator
42 / 42 / 9
Регистрация: 19.10.2011
Сообщений: 247
11.10.2012, 20:32
Вот накидал что смог... Это не совсем то, что требовалось, точнее вообще не то что требовалось))). Но чем смог, как говориться... Времени не особо много свободного...
Demo.rar
0
Просто интересуюсь.
 Аватар для Imitator
42 / 42 / 9
Регистрация: 19.10.2011
Сообщений: 247
11.10.2012, 23:08
Вот этот вариант с ListView больше подойдет. Думаю разберетесь. И уже по этому принципу создадите второй ListView со свободными местами. И еще один момент в комбобоксах городов есть повторяющиеся города(т.к. может быть несколько поездов одного направления, но которые уходят в разное время), нужно написать метод на проверку совпадений в List<string> ГородаОтправления и List<string> ГородаПрибытия, перед выводом их в комбобоксы, хотя проще, на мой взгляд, создать второй xml файл в котором будут просто города и уже этот файл прибиндить к комбобоксам... Если будет часик-другой завтра свободный, то накидаю... но не обещаю...
Demo.rar
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2012, 23:08
Помогаю со студенческими работами здесь

Организовать поиск в XML-файле
Нужно написать такое условие: (если в xml файле присутствует &lt;listbox2&gt; &lt;item&gt; Заказ№2&lt;/item&gt; ...

как связать vScrollBar1 к Listview
Здравствуйте. возникла такая необходимость. 1. В listview как можно использовать место вертикальной прокрутки vScrollBar1? 2. И...

как связать qtftp с listview
Собственно как связать. Я хочу, чтобы в ListView отобразились файлы определённой папки на фтп, как это сделать?

Заменить данные в XML-файле
Всем привет! Есть список в файле TXT Есть файл xml, такой структуры, в нем строки: &lt;listitem&gt; &lt;variable...

В xml файле поменять данные
Добрый день! подскажите можно ли в эксемель файле как то автоматически поменять данные значение &lt;col code=&quot;3&quot;, с привязкой к...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru