Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.07.2018
Сообщений: 46

Редактирование xml

05.12.2018, 14:05. Показов 4686. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет

есть три таблицы
допустим stores, ballast, dc
stores и ballast это одинаковые таблицы но разных категорий
в них есть столбцы name, weight, sg, volume
таблица dc изначально пустая но заполняется при изменении значения weight в таблицах stores и ballast
её колонки: name, weight, x, y, z
x, y, z в свою очередь координаты для каждого weight которые уже есть
xml у меня три, для каждого datagrid

код MainWindow
XML
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
Window x:Class="wpfdcxml2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:wpfdcxml2"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TabControl Name="storesballast" Grid.Row="0" Margin="-1,-1,1,1">
            <TabControl.Resources>
                <XmlDataProvider x:Key="storesdata" Source="stores.xml" XPath="stores"/>
                <XmlDataProvider x:Key="ballastdata" Source="ballast.xml" XPath="ballast"/>
            </TabControl.Resources>
            <TabItem Name="stores" Width="100" Height="50" Header="stores">
                <DataGrid x:Name=[B]"storesgrid"[/B] DataContext="{StaticResource storesdata}" ItemsSource="{Binding XPath=tank}"
                          AutoGenerateColumns="False">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Name" Binding="{Binding XPath=@name}"/>
                        <DataGridTextColumn Header="Weight" Binding="{Binding XPath=@weight}"/>
                        <DataGridTextColumn Header="sg" Binding="{Binding XPath=@sg}"/>
                        <DataGridTextColumn Header="volume" Binding="{Binding XPath=@volume}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </TabItem>
            <TabItem Name="ballast" Width="100" Height="50" Header="ballast">
                <DataGrid x:Name=[B]"ballastgrid"[/B] DataContext="{StaticResource ballastdata}" ItemsSource="{Binding XPath=tank}"
                          AutoGenerateColumns="False">
                    <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Binding="{Binding XPath=@name}"/>
                    <DataGridTextColumn Header="Weight" Binding="{Binding XPath=@weight}"/>
                    <DataGridTextColumn Header="sg" Binding="{Binding XPath=@sg}"/>
                    <DataGridTextColumn Header="volume" Binding="{Binding XPath=@volume}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </TabItem>
        </TabControl>
        <DataGrid Name=[B]"dc"[/B] Grid.Row="1" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTemplateColumn Header="Name">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="keyCellTextbox" Text="{Binding Path=Element[name].Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="weight">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="keyCellTextbox" Text="{Binding Path=Element[p].Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="sg">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="keyCellTextbox" Text="{Binding Path=Element[sg].Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="Volume">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox x:Name="keyCellTextbox" Text="{Binding Path=Element[volume].Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>
тут таблицы stores и ballast представлены только в xaml
а таблица dc:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class MainWindow : Window
    {
        private string _xmlPath = @"dcdata.xml";
        private XDocument _xDocument;
 
 
        public MainWindow()
        {
            InitializeComponent();
            BindXmlToDataGrid();
 
        }
        private void BindXmlToDataGrid()
        {
            _xDocument = XDocument.Load(_xmlPath);
            var items = from tank in _xDocument.Root.Elements("tank") select tank;
 
            this.dcgrid.ItemsSource = items;
 
        }
       
    }
вопросы
какой из способов лучше для моей задачи?
если есть, то какой способ ещё лучше из тех, что я не предложил, кроме тех, где xml надо вызывать через путь в компьютере.
как собственно реализовать:
при изменении значения weight в stores/ballast добавление строки в dc с заполнением weight и name, а так же заполнением x,y,z для значения weight
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2018, 14:05
Ответы с готовыми решениями:

Редактирование XML-datagrid в WPF и паттерн MVVM
Добрый день, извините сразу, перелазил 720 страниц различной инфы не нашел, суть вопроса как работать с XML файлами, редактирование,...

Редактирование XML
Здравствуйте! Допустим имеется xml файл: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt; &lt;rssChannels&gt; &lt;channel id=&quot;0&quot;&gt; ...

XML редактирование.
В общем имеется код: using System; using System.Runtime.InteropServices; using System.Text.RegularExpressions; class...

43
0 / 0 / 0
Регистрация: 22.07.2018
Сообщений: 46
07.12.2018, 17:54  [ТС]
Студворк — интернет-сервис помощи студентам
Элд Хасп, вы могли бы тогда посоветовать источники по моей теме с использованием mvvm
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
07.12.2018, 19:21
Shane_, вроде получилось конвертер сделать. Поэкспериментируйте, проверьте.
Конвертер
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
    [ValueConversion(typeof(string), typeof(string))]
    public class XmlToDGMultiConverter : IMultiValueConverter
    {
        /// <summary>
        /// Прямое преобразование
        /// </summary>
        /// <param name="values">Привязки в порядке: редактируемое значение, опорное значение, корректируемое значение </param>
        /// <param name="targetType">Выводимый тип</param>
        /// <param name="parameter">Не используется</param>
        /// <param name="culture">Используемая культура</param>
        /// <returns>Возвращаемое значение</returns>
        public object Convert(object[] values, System.Type targetType, object parameter, CultureInfo culture)
        {
            if (values == null || values.Length == 0 || values[0].GetType() != typeof(string) || !double.TryParse((string)values[0], NumberStyles.Any, culture, out double val))
                return values;
            if (values.Length > 2)
            {
                footing = values[1] as string;
                correct = values[2] as string;
            }
            else
            {
                footing = null;
                correct = null;
            }
            return val.ToString();
        }
 
        string edit;
        string footing;
        string correct;
 
        /// <summary>
        /// Обратное преобразование
        /// </summary>
        /// <param name="value"></param>
        /// <param name="targetTypes"></param>
        /// <param name="parameter"></param>
        /// <param name="culture"></param>
        /// <returns></returns>
        public object[] ConvertBack(object value, System.Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
        {
            if (!string.IsNullOrEmpty(value as string)
                && double.TryParse((string)value, NumberStyles.Any, culture, out double val)
                && double.TryParse(footing, NumberStyles.Any, culture, out double foot))
                return new string[] {val.ToString(), foot.ToString(), (foot/val).ToString() };
            return new string[] { (string)value };
        }
    }
Окно
XML
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
<Window x:Class="Cs_WPF.EditXMLinDataGrid"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Cs_WPF"
        mc:Ignorable="d" 
        Title="EditXMLinDataGrid" Height="450" Width="800" 
        DataContext="{DynamicResource ViewModel}" Closing="Window_Closing">
    <Window.Resources>
        <local:XmlToDGMultiConverter x:Key="XmlToDGMultiConverter"/>
        <local:ViewModelXML x:Key="ViewModel">
            <local:ViewModelXML.storesdata>
                <XmlDataProvider  Source="stores.xml" XPath="tanks"/>
            </local:ViewModelXML.storesdata>
        </local:ViewModelXML>
        <Style TargetType="DataGrid">
            <Setter Property="Margin" Value="10"/>
        </Style>
        <local:WinCommands x:Key="WinCommands"/>
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <DataGrid  AutoGenerateColumns="False" ItemsSource="{Binding XPath=tank}" DataContext="{Binding storesdata}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding XPath=Name}" Width="3*"/>
                <DataGridTextColumn Header="Weight" Width="*">
                    <DataGridTextColumn.Binding>
                        <MultiBinding Converter="{StaticResource XmlToDGMultiConverter}">
                            <Binding XPath="Weight"/>
                            <Binding XPath="SG"/>
                            <Binding XPath="Volume"/>
                        </MultiBinding>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>
                <DataGridTextColumn Header="SG" Width="*">
                    <DataGridTextColumn.Binding>
                        <MultiBinding Converter="{StaticResource XmlToDGMultiConverter}">
                            <Binding XPath="SG"/>
                            <Binding XPath="Weight"/>
                            <Binding XPath="Volume"/>
                        </MultiBinding>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>
                <DataGridTextColumn Header="Volume" Width="*">
                    <DataGridTextColumn.Binding>
                        <MultiBinding Converter="{StaticResource XmlToDGMultiConverter}">
                            <Binding XPath="Volume"/>
                            <Binding XPath="SG"/>
                            <Binding XPath="Weight"/>
                        </MultiBinding>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
        <DataGrid Grid.Column="1"  ItemsSource="{Binding XPath=tank[Weight\>\0]}"
            AutoGenerateColumns="False" DataContext="{Binding storesdata}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name" Binding="{Binding XPath=Name}" Width="3*"/>
                <DataGridTextColumn Header="Weight" Binding="{Binding XPath=Weight}" Width="*"/>
                <DataGridTextColumn Header="SG" Binding="{Binding XPath=SG}" Width="*"/>
                <DataGridTextColumn Header="Volume" Binding="{Binding XPath=Volume}" Width="*"/>
            </DataGrid.Columns>
        </DataGrid>
        <Button Grid.Column="1" Content="Сохранить" VerticalAlignment="Bottom" HorizontalAlignment="Center" 
                Command="{Binding SaveCommand}" DataContext="{StaticResource WinCommands}" 
                CommandParameter="{Binding storesdata, Source={StaticResource ViewModel}}"/>
    </Grid>
</Window>
Добавлено через 22 минуты
Цитата Сообщение от Shane_ Посмотреть сообщение
вы могли бы тогда посоветовать источники по моей теме с использованием mvvm
Я сам по разным видеокурсам на youtube смотрел. Сейчас и не помню уже по каким.
0
0 / 0 / 0
Регистрация: 22.07.2018
Сообщений: 46
08.01.2019, 17:46  [ТС]
Элд Хасп, А можно перевести данные в дабл?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
08.01.2019, 18:16
Цитата Сообщение от Shane_ Посмотреть сообщение
А можно перевести данные в дабл?
Можно, но возни будет чуть больше. Конвертер же предназначен для биндинга к свойствам элементов WPF и XML значениям, а они имеют тип string.
Поэтому, для избежания исключений, надо будет проверять входные значения на тип. И предварительно их конвертировать double. Потом уже использовать полученные double значения.
Примерно, как сделано в методе обратного конвертирования. Но более разветвлёно.

Но судя по теме Сложный MVVM, Вы решили делать полноценную MVVM реализацию. Тогда конвертеры, скорее всего, не понадобятся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.01.2019, 18:16

Редактирование XML файла
Помогите пожалуйста разобраться. Eсть xml документ: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;IPNetDescList&gt; ...

XML добавление и редактирование
Доброго времени. У меня возникла проблема. Сегодня впервые решил познакомиться с XML и начать с ним работать. По учебнику и интернету я...

Чтение XML файла, без использования встроенных средств работы с XML
Разработать программу на любом из перечисленных языков программирования c#. Программа должна читать XML-файл. Разбирать элементы не...

LINQ to XML или XPath to XML (выбор одного элемента)
Прошу помощи в LINQ или XPath запросе к XML Вот XML: &lt;manifest...

Пропарсить и стандартизировать XML, XSL или Linq to XML?
Такой вопрос. необходимо считывать XML-файлы и приводить их к единому стандарту руководствуясь положением элементов в иерархии и...


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

Или воспользуйтесь поиском по форуму:
44
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru