none
Сохранение значений RRS feed

  • Вопрос

  • Как проще всего на C# сохранить значения переменных после закрытия программы и восстановить их при следующем запуске?
    • Перемещено SachinW 1 октября 2010 г. 20:56 MSDN Forums Consolidation (От:Начинающие разработчики)
    19 сентября 2010 г. 23:07

Ответы

Все ответы

  • В конфиге.
    • Помечено в качестве ответа I.VorontsovModerator 21 сентября 2010 г. 6:27
    20 сентября 2010 г. 9:23
    Модератор
  • Был бы благодарен за пример реализации...
    20 сентября 2010 г. 11:48
  • Как задать параметры приложения которые хранить в конфиге:

    1. Смотришь свойства любого элемента приложения;

    2. Находишь в Properties ApplicationSettings (если упорядочить свойства по алфвиту - то пункт будет самым верхним);

    3. Раскрываешь ApplicationSetting;

    4. Выбираешь пункт PropertyBindings;

    5. Нажимаешь на кнопочку с тремя точками ...;

    6. Выбираем свойство элемента управления, которое хотим хранить в конфиге;

    7. Даем ему имя.

    8. Для всех остальных свойств элементов, которые нужно хранить в конфиге делаем все тоже самое;

    9. Если нужно хранить какие-то свои данные лезем в app.config и по аналогии добавляем ключи и значения;

    Как присвоить значение параметра:

    Можно присвоить свойству, которое выбрал в п. 6 или прямо в конфиге:

     

    WindowsFormsApplication1.Properties.Settings.Default["btext"] = "Новый текст кнопки";
    

     

    Как сохранить изменения:

    Перед выходом из приложения (перед закрытием основной формы)

     

    WindowsFormsApplication1.Properties.Settings.Default.Save();
    

     

     

    Это только для VB ?

    Просто у меня нет в свойствах элемента вкладки ApplicationSettings(пишу на C#)

     

     

     

     

    20 сентября 2010 г. 12:49
  • Тоже пишу на C#.

    В 2005 и 2010 студиях есть.

    Попробуй упорядочить свойства оп алфавиту, а не по категориям, тогда будет верхней строчкой.

    20 сентября 2010 г. 13:01
    Модератор
  • В VS2008 там всего две вкладки: Дополнительно и Разное.. может я не там смотрю? 
    20 сентября 2010 г. 13:32
  • Например если зайти в свойства Program.cs там будет только Дополнительно(Действие при построении, Копировать в выходной каталог, Пространство имён специального инструмента, Специальный инструмент) и Разное(Имя файла, Полный путь)... 
    20 сентября 2010 г. 13:46
  • Видимо "трудности перевода".

    Правой кнопкой щелкаешь на любой элемент управления, самым нижним пунктом в меню будет "Properties". Как в русской VS это будет называться - я не знаю.

    Нажатие на этот элемент меню вызовет показ пропертигрида со свойствами элемента(обычно по правому краю экрана). Называется обычно он тоже "Properties".

    В этом пропертигриде можно менять свойства элемента управления(текст для кнопки, например).

    Ну вообщем там оно и будет первым пунктом.

    20 сентября 2010 г. 18:55
    Модератор
  • Нашёл.. нужны были свойства элемента управления... 

    А для SmartDeviceProject какой способ лучше.. как я понял там с конфигом не получится.. только в БД.. или есть другой способ?

    20 сентября 2010 г. 20:01
  • Не обязательно использовать *.exe.config. Можно свой класс написать, который в XML'ину будет настройки сбрасывать и читать их оттуда при запуске программы.
    21 сентября 2010 г. 4:15
    Модератор
  • Спасибо за ответ!

    А если мне нужно сохранить данные из dataGridView, чтобы после выхода из программы они сохранились? Дело в том, что в ApplicationSettings нет такого свойства, чтобы сохранить сразу всю таблицу из dataGridView.

    Заранее спасибо!


    6 сентября 2018 г. 6:09
  • Привяжите DataGridView к DataTable, и используйте метод DataTable.WriteXml / ReadXml 
    6 сентября 2018 г. 10:03
  • Можно краткий пример реализации? На форме есть dataGridView1 (2 столбца и 3 строки) и кнопка save_button. При нажатии на save_button необходимо сохранить данные в xml файл, а при загрузке формы - считать эти данные в dataGridView1.

    Вот что у меня получилось

    private void save_button_Click(object sender, EventArgs e) { DataTable table = new DataTable("my_Table"); DataColumn time_column = new DataColumn(); DataColumn event_column = new DataColumn(); time_column.DataType = System.Type.GetType("System.String"); time_column.ColumnName = "time_col"; table.Columns.Add(time_column); event_column.DataType = System.Type.GetType("System.String"); event_column.ColumnName = "event_col"; table.Columns.Add(event_column); DataRow my_row; for (int i = 0; i < dataGridView1.RowCount; i++) { my_row = table.NewRow(); my_row["time_col"] = dataGridView1.Rows[i].Cells[0].Value; my_row["event_col"] = dataGridView1.Rows[i].Cells[1].Value; table.Rows.Add(my_row); } table.WriteXml("my_file.xml"); }

    но при попытке считать данные из файла my_file.xml

    private void Form1_Load(object sender, EventArgs e)
    {
    DataTable table = new DataTable();
    table.ReadXml("my_file.xml");
    }
    возникает ошибка

    DataTable не поддерживает выведение схемы из xml

     
    7 сентября 2018 г. 6:25
  • Думаю, нужно просто добавить колонки в таблицу вручную перед ReadXML, если у вас колонки не динамические.

    Или при записи включить в XML схему: 

    table.WriteXml("...", XmlWriteMode.WriteSchema);


    7 сентября 2018 г. 7:55
  • Эта штука заработала, спасибо! =)

    table.WriteXml("...", XmlWriteMode.WriteSchema);

    Но ведь экзешник создает в своем каталоге xml-файл с данными. А я хотел, чтобы он сохранял значения без дополнительных файлов, ну типа как выше в конфиге, держал их внутри себя.

    7 сентября 2018 г. 8:17
  • Конфиг держит не "внутри себя", а в папке данных текущего пользователя. Создайте новую тему, если хотите развернутого обсуждения об этом. Тему 2010 года лучше бы оставить в покое.
    7 сентября 2018 г. 8:38