Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2014, 23:53   #1
aliqulu
 
Регистрация: 08.11.2011
Сообщений: 9
По умолчанию Записать DataGrid в XML

Есть три XML файла.Привожу фрагменты:

русский XML:
Код HTML:
<captions> 
<configuration.inputCounter value="Счётчик входящих документов"/> 
<configuration.inputNumberTemplate value="Шаблон счётчика входящих документов"/> 
<configuration.outputNumberTemplate value="Шаблон счётчика исходящих документов"/> 
<shortPerson.fullName value="Полное имя"/> <shortPerson.active value="Активен"/> 
<shortPerson.discharge value="Уволен"/> </captions>
Английский XML:
Код HTML:
<captions> 
<configuration.inputCounter value="Incoming counter"/>
 <configuration.inputNumberTemplate value="Incoming number template"/>
 <configuration.internalCounter value="Internal counter"/> 
<configuration.internalNumberTemplate value="Internal number counter
<configuration.outputCounter value="Output counter"/> 
captions>
Надо выводить в DataGrid два столбца.первый по умолчанию XML файл с русскими значениями value, а второй столбец по выбору один из других XML.
Создал класс с тремя полями.ключевое поле и два значения(например value на русском и на английском).
Отдельно - из xml прочитал по очереди каждый файл и собрал Dictionary значений ключ - значение.
Далее, в цикле заполнил класс - читая первый массив для ключа и первого значения, и потом из второго выбирая по ключу значение из второго массива.
а потом уже из класса в цикле заполнил dataGrid.
Привожу код:
Код:
public static Dictionary<string, string> XmlToDict(string loadFile) 
{ 
Dictionary<string, string> dic = new Dictionary<string, string>(); 
XmlDocument document = new XmlDocument(); 
document.Load(loadFile); 
try 
{
 foreach (XmlNode node in document.DocumentElement.ChildNodes) 
{

                string value = node.Attributes["value"].Value;
                string key = node.Name;
                if (!string.IsNullOrEmpty(value) && (!dic.ContainsKey(key)))
                {
                    dic.Add(key, value);
                }

            }
        }
       catch(ArgumentException ex)
        {
            MessageBox.Show(ex.Message);
        } 
        return dic;
    }

    public static ClassVivod[] DataToGrid(string FirstXml, string SecondXml)
    {
        Dictionary<string, string> FirstDic = XmlToDict(FirstXml);
        Dictionary<string, string> SecondDic = XmlToDict(SecondXml);

        var vivod = FirstDic.Select(
   kvp => new ClassVivod()
   {
       Key = kvp.Key,
       ValueXML_1 = kvp.Value,
       ValueXML_2 = SecondDic.ContainsKey(kvp.Key) ? SecondDic[kvp.Key] : ""

   })

.ToArray();

        return vivod;

    }

    public Form1()
    {
        InitializeComponent();
        comboBox1.Items.Add("Azeri");
        comboBox1.Items.Add("English");
        comboBox1.SelectedItem = "Azeri";

    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void Load_button_Click(object sender, EventArgs e)
    {
        dataGridView1.Rows.Clear();
        dataGridView1.Columns.Clear();
        string FirstXml = "D:\\My Documents\\Visual Studio 2010\\Projects\\XmlReader\\XmlReader\\languages\\Russian.xml";
        string SecondXml;

        if (comboBox1.Text == "English")
        {
            SecondXml = "D:\\My Documents\\Visual Studio 2010\\Projects\\XmlReader\\XmlReader\\languages\\English.xml";
        }
        else
        {
            SecondXml = "D:\\My Documents\\Visual Studio 2010\\Projects\\XmlReader\\XmlReader\\languages\\Azeri.xml";
        }
        ClassVivod[] dataToGrid = DataToGrid(FirstXml, SecondXml);

        dataGridView1.Columns.Add("Russian", "Русский");
        dataGridView1.Columns.Add(comboBox1.Text, comboBox1.Text);

        for (int i = 0; i < dataToGrid.Count(); i++)
        {
            dataGridView1.Rows.Add();
            dataGridView1.Rows[i].Cells["Russian"].Value = dataToGrid[i].ValueXML_1;
            dataGridView1.Rows[i].Cells[comboBox1.Text].Value = dataToGrid[i].ValueXML_2;
        }
    }

    private void Save_button_Click(object sender, EventArgs e)
    {

    }
Теперь мне надо сохранить данные из DataGrid в соответствующие XML. Сохраняю так как в DataGrid могли быть изменены какие то значения. Жду ваших советов, подсказок..

Последний раз редактировалось aliqulu; 14.03.2014 в 23:57.
aliqulu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#. Парсинг XML-файла с использованием библиотеки System.xml.linq Gift020 Помощь студентам 5 04.04.2013 13:44
программа, которая должна находить в данной директории *.xml файлы и переименовывать в *.xml.dt. (Delphi) nice.name Помощь студентам 2 09.01.2013 15:40
сформировать xml-файл на основе другого xml-файла NieL Общие вопросы Delphi 2 21.12.2010 15:49
DataGrid C# Dizell Общие вопросы .NET 2 22.07.2010 16:59
помогите как записать правильно в xml edik БД в Delphi 0 17.12.2009 15:39