Есть вот такая база данных. Добавляю несколько полей в DGV, а потом мне нужно в обработчике событие(Import in XML) все те данные что были в DGV импортировать в XML файл.Код сериализации вставлял в кнопку Add, но тогда в XML сохранить мог только одну запись,ту которую добавлял первую. А мне надо сначал добавить несколько в грид, а тогда все в XML.
////кнопка add
private void button1_Click(object sender, EventArgs e)
{
Form2 friendForm = new Form2();
DialogResult result = friendForm.ShowDialog(this);
if (result == DialogResult.Cancel)
return;
friends friends = new friends();
friends.FirstName = friendForm.textBox1.Text;
friends.LastName = friendForm.textBox2.Text;
friends.Age = (int)friendForm.numericUpDown1.Value;
friends.Number = friendForm.textBox3.Text;
friends.House = (int)friendForm.numericUpDown2.Value;
friends.Adress = friendForm.textBox4.Text;
db.friendsSet.Add(friends);
db.SaveChanges();
XmlSerializer serial = new XmlSerializer(typeof(friends));
using (FileStream fs = new FileStream(Environment.CurrentDirectory +
"\\book.xml", FileMode.Create, FileAccess.Write))
{
serial.Serialize(fs, friends);
MessageBox.Show("XML was created");
}
}
Для начала, следует подумать: а нужно ли дублировать данные в xml-файл, если они уже сохранены в БД? База данных для того и предназначена, чтобы данные можно было легко добавлять, удалять, изменять, искать. Если для каких-то целей всё же понадобятся данные в формате xml, то их всегда можно получить прямо из БД. Одна из возможностей - команда FOR XML.
Ответ непосредстенно на ваш вопрос. Заведите список объектов Friend (переименуйте класс, Visual Studio автоматически сделает изменения во всём проекте).
List<Friend> _friends = new List<Friend>();
Это должно быть поле той формы, где выполняется сериализация.
Получив очередной экземпляр этого класса, добавляйте его в эту коллекцию:
Friend friend = new Friend();
friend.FirstName = friendForm.textBox1.Text;
...
db.friendsSet.Add(friend);
db.SaveChanges();
_friends.Add(friend); // добавляем в список
Когда ввод всех данных будет закончен, сериализуем весь список:
XmlSerializer serial = new XmlSerializer(typeof(List<Friend>)); // <--
using (FileStream fs = new FileStream(Environment.CurrentDirectory +
"\\book.xml", FileMode.Create, FileAccess.Write))
{
serial.Serialize(fs, _friends); // <--
MessageBox.Show("XML was created");
}
Судя по скриншоту, этот код следует поместить в обработчик кнопки "Export". Кстати, вызов db.SaveChanges(); я бы перенёс туда же.
Обратите внимание: сериализатор должен быть создан соответствующего типа; на вход ему подаём не один экземпляр, а коллекцию.
Десериализовать, соответственно, нужно коллекцию, выполняя приведение к List<Friend>.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники