0

Пытаюсь сохранить данные из TextBox, ComboBox и DateTimePicker'ов в xml файл.

Наткнулся на статью, всё вроде как сохраняется и потом восстанавливается соответственно, однако при добавлении следующих строк

 else if (childCtrl is DateTimePicker) 
   {
    xmlSerialisedForm.WriteElementString("Value", ((DateTimePicker)childCtrl).Value.ToString("dd/MM/yyyy"));
   }

в AddChildControls никакого счастья в жизни не происходит. В выходном xml-файле есть записи со значениями введёнными в текстовые поля, выбранными вариантами из боксов. Однако с dateTimePicker есть только строка про его видимость.

P.S. Происходит всё так - пользователь заполняет поля формы, нажимает "Просмотр", в этот момент происходит сериализация и основное окно закрывается, открывается окно просмотра, пользователь это окно закрывает и возвращается к предыдущему окну, куда происходит десериализация.

Кусочек xml-файла:

<Control Type="System.Windows.Forms.Panel" Name="OverallPanel">
    <Visible>True</Visible>
    <Control Type="System.Windows.Forms.TableLayoutPanel" Name="OverallLayout">
      <Visible>True</Visible>
      <Control Type="System.Windows.Forms.TextBox" Name="EngSurnameInput">
        <Text>PETROV</Text>
        <Visible>True</Visible>
      </Control>
      <Control Type="System.Windows.Forms.TextBox" Name="EngNameInput">
        <Text>Ivan</Text>
        <Visible>True</Visible>
      </Control>
      <Control Type="System.Windows.Forms.DateTimePicker" Name="DateOfBirthPicker">
        <Visible>True</Visible>
      </Control>
    </Control>
  </Control>

P.P.S. Возможно я неправильно ставлю вопрос. В таком случае - буду благодарен за направление в нужные координаты.

aepot
  • 49,560
Temir
  • 1
  • 4
  • Winforms? XML файл или его фрагмент покажете? Код для воспроизведения проблемы можете написать? Почему XML? Вроде-как не можно уже, все JSON используют, выглядит проще и работает быстрее. Данные в интерфейсе обычно не хранят, для этого используют специальные классы для данных (модели) и сериализуют их. А чтобы интерфейс данные отображал и обновлял в режиме реального времени, используют привязки данных (Data Binding). – aepot Oct 20 '21 at 11:43
  • Насколько я вижу, при наличии модели данных, вам в принципе для указанных в посте потребностей, сериализация не потребуется вообще. Пример надо? Если надо, укажите версию .NET. – aepot Oct 20 '21 at 11:49
  • Не вставляйте пожалуйста код в комментарий, редактируйте вместо этого сам пост. – aepot Oct 20 '21 at 12:08
  • Уважаемый @aepot, Буду отвечать по-порядку:
    1. Windows Forms
    2. Пример xml закинул в основной пост.
    3. Я искал решение своей проблемы, и очень удачно наткнулся именно на ту, старую, статью.

    Буду рад поискать иначе - но не могу правильно сформулировать вопрос для поиска (XML, JSON, или что-то ещё) 4. Версия .Net Framework - 4.7.2.

    – Temir Oct 20 '21 at 12:29
  • Уважаемый @aepot, общая суть задачи, которую я пытаюсь решить такая: Есть две формы. В первой - пользователь вводит данные (Фамилия, Имя, Дата рождения и т.д.), данных этих много. На второй форме отображены все эти данные в едином виде. При переходе из первой формы на вторую, первая закрывается, и нужно введенные пользователем данные сохранить. А при переходе из второй на первую, эти данные должны отобразиться в первоначальных местах. – Temir Oct 20 '21 at 12:45
  • У меня к сожалению прямо сейчас нет времени писать полноценный ответ, но похожий ответ я писал ранее. По сути используя ту же самую методику можно применить к любому контролу. Решение вашего вопроса в выбрасывании сериализации из логики вообще, для работы с формами она не нужна. Вместо этого вновь создаваемой форме надо просто передать экземпляр класса с данными, а она привяжется к компонентам. Так как данные будут меняться в классе, вторая форма, получившая этот же экземпляр так же из него же их прочитает. – aepot Oct 20 '21 at 12:59
  • Как сериализовать класс или коллекцию экземпляров класса с данными в например JSON, например для сохранения в текстовый файл или передачи по сети, примеров в интернетах полно. Для .NET Framework 4.x есть суперпопулярная библиотека Newtonsoft.Json, а для .NET Core 3.x и новее - есть встроенный сериализатор System.Text.Json. Делов вам на пару часов, главное - разобраться с методикой привязки данных. Не храните данные в контролах, а только отображайте и возникшая у вас проблема больше никогда не возникнет. – aepot Oct 20 '21 at 13:02
  • Фокус с привязкой можно развить до такой степени, что в одной форме вы данные меняете, а в другой в режиме реального времени вы эти изменения сможете видеть даже если обе формы открыты одновременно. Это та гибкость, которую дает данная методика. Хоть 10 форм можно открыть и все для редактирования и в любой можно вносить правки, они будут одновременно видны везде. Магия. :) В WPF эта технология привязки данных вообще родная и без нее выжить там невозможно. – aepot Oct 20 '21 at 13:04
  • 1
    @aepot, спасибо за подсказки. Буду дальше копать в указанном направлении! – Temir Oct 21 '21 at 07:05

0 Answers0