Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
1

Сохранение и загрузка введенных данных

16.05.2017, 09:56. Просмотров 715. Ответов 24
Метки нет (Все метки)

Добрый день!
Как реализовать верхнюю часть программы?
Необходимо введенные данные сохранять под определенным именем и потом загружать.
0
Миниатюры
Сохранение и загрузка введенных данных  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2017, 09:56
Ответы с готовыми решениями:

Загрузка и сохранение данных из(в) dataGridView в текстовый файл
Доброе время суток. Стоит задача сохранить данные из dataGridView в текстовый...

Сохранение и загрузка данных. Настройки второй формы хранятся до первого закрытия приложения
Есть родительская форма и дочерняя В дочерней сохраняю файлы через...

Не происходит сохранение введенных значений
Помогите пожалуйста в создании кнопки для сохранения. Трабл в том, что при...

Сохранение и быстрая загрузка данных dataGrid
По введенным в textbox начальному значению, программа производит расчеты и...

Сохранение и загрузка
Доброго времени суток! Возникла проблема, есть кородяво, но почти...

24
cTpeJIok7
1 / 1 / 1
Регистрация: 25.05.2015
Сообщений: 7
16.05.2017, 18:27 2
Здравствуйте, можно подробнее немного? Сохранять куда?
0
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
16.05.2017, 20:13  [ТС] 3
ОК!
1 - Вводим данные;
2 - пишем имя, например "1";
3 - сохраняем, чтобы потом по-быстрому загрузить введенные данные, а не вбивать вручную;
4 - выбираем из списка сохраненных имен, нужное, например "1" и
5 - жмем "Загрузить", после чего ячейки заполняются сохраненными под этим именем данными.

Если есть, скиньте пример какой-нибудь, или блок-схему, или что-нибудь )
0
Миниатюры
Сохранение и загрузка введенных данных  
cTpeJIok7
1 / 1 / 1
Регистрация: 25.05.2015
Сообщений: 7
17.05.2017, 19:02 4
Как вариант могу предложить Вам следующее: Вы создаёте базу данных, в которой будет таблица с 4мя полями. Ключевое поле (которое у Вас под номером 2) и ещё 3 поля (которые у Вас под номером 1). Допустим при загрузке программы в ListBox (под номером 4) подгружаются все значения ключевого поля таблицы, а в остальные три поля будут подгружаться остальные значения в соответствии с ключевым полем. Если не знакомы с SQL запросами, то тоже самое в теории можно провернуть через обычный текстовый или CSV файл из которого считывать все данные при загрузке в двумерный массив, например.
0
_Студент_
10 / 10 / 1
Регистрация: 13.12.2015
Сообщений: 104
17.05.2017, 19:29 5
cTpeJIok7, это будет возможно если он знает бд
а если нет, то пусть сохраняет в файл 4 столбца, в первом что-бы записывалось(2), столбец 2..++..4 , записывалось(1)
при нажатии на сохранить, оно сохраняло, в поле (3) что-бы постоянно обновлялись данные после любого действия. из первого столбца записывались туда данные. после нажатия кнопки(4) оно искало в файле по индексу(первому столбцу) и запсывались все данные из последующих строк в соответствующие поля

Добавлено через 57 секунд
а ещё лучше счтывать данные из файла в массив, и обновлять данные в файле
0
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
17.05.2017, 20:19  [ТС] 6
Была идея идти через массивы, но как сохранить данные массивов, что бы при закрытии программы, они не пропали?
0
cTpeJIok7
1 / 1 / 1
Регистрация: 25.05.2015
Сообщений: 7
17.05.2017, 20:22 7
Цитата Сообщение от rom_kaxxx Посмотреть сообщение
Была идея идти через массивы, но как сохранить данные массивов, что бы при закрытии программы, они не пропали?
Вам предложено 2 варианта выше
0
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
27.05.2017, 10:16  [ТС] 8
Не могу понять почему не заполняется файл?

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
private void Save_Click(object sender, EventArgs e)
        {
            string TB1, TB2, TB3, CB1, CB2, CB3, TB6, TB7, TB8, TB11;
            int n, i, j;
 
            TB1 = Convert.ToString(textBox1.Text);
            TB2 = Convert.ToString(textBox2.Text);
            TB3 = Convert.ToString(textBox3.Text);
            TB6 = Convert.ToString(textBox6.Text);
            TB7 = Convert.ToString(textBox7.Text);
            TB8 = Convert.ToString(textBox8.Text);
            TB11 = Convert.ToString(textBox11.Text);
            CB1 = Convert.ToString(comboBox1.SelectedIndex);
            CB2 = Convert.ToString(comboBox2.SelectedIndex);
            CB3 = Convert.ToString(comboBox3.SelectedIndex);
 
            StreamWriter path = new StreamWriter("c:\\MyTest.txt");
 
                n = 0;
                string[,] SV = new string[11, 100];
                SV[0, 0] = n.ToString();
                SV[1, 0] = TB1.ToString();
                SV[2, 0] = TB2.ToString();
                SV[3, 0] = TB3.ToString();
                SV[4, 0] = TB6.ToString();
                SV[5, 0] = TB7.ToString();
                SV[6, 0] = TB8.ToString();
                SV[7, 0] = TB11.ToString();
                SV[8, 0] = CB1.ToString();
                SV[9, 0] = CB2.ToString();
                SV[10, 0] = CB3.ToString();
 
                for(i = 0; i < 11; i++)
                {
                    for (j = 0; j <= n; j++)
                    {
                    path.WriteLine(Convert.ToString(SV[i, j]) + ' ');
                    }
                path.WriteLine('\n');
                }
        }
0
sldp
283 / 287 / 112
Регистрация: 29.10.2011
Сообщений: 957
Завершенные тесты: 2
27.05.2017, 12:20 9
А много подразумевается вариантов данных?

Добавлено через 1 минуту
Что это вообще за данные?
0
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
27.05.2017, 12:42  [ТС] 10
Вариантов может быть много. Цель: заполнять форму и сохранять ее, чтоб после перезапуска программы данные можно было загрузить, а не заполнять заново.
0
Storm23
Эксперт .NETАвтор FAQ
6227 / 3734 / 1413
Регистрация: 11.01.2015
Сообщений: 4,894
Записей в блоге: 31
27.05.2017, 13:20 11
Цитата Сообщение от rom_kaxxx Посмотреть сообщение
Сохранение и загрузка введенных данных
1) Создаем модель данных. Куда входит собственно объект Data (который хранит данные) и вспомогательный класс DataLoaderSaver (который занимается сохранением и загрузкой данных в/из файла):
Кликните здесь для просмотра всего текста
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
    [Serializable]
    class Data
    {
        public string Value1 { get; set; }
        public string Value2 { get; set; }
        public string Value3 { get; set; }
    }
 
    class DataLoaderSaver
    {
        string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        string fileExt = ".MySuperApp";
 
        public void Save(Data data, string fileNameNoExt)
        {
            using (var fs = File.Create(Path.Combine(dir, fileNameNoExt + fileExt)))
                new DataContractSerializer(typeof(Data)).WriteObject(fs, data);
        }
 
        public Data Load(string fileNameNoExt)
        {
            using (var fs = File.Open(Path.Combine(dir, fileNameNoExt + fileExt), FileMode.Open))
                return (Data)new DataContractSerializer(typeof(Data)).ReadObject(fs);
        }
 
        public IEnumerable<string> GetAllowedFileNames()
        {
            return Directory.EnumerateFiles(dir, "*" + fileExt).Select(Path.GetFileNameWithoutExtension);
        }
    }


2) Создаем форму, создаем поле Data которое будет хранить текущий объект данных. Создаем метод Build который будет строить контролы по данным Data, создаем еще пару обработчиков и методов:
Кликните здесь для просмотра всего текста
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
    public partial class MainForm : Form
    {
        //our data
        Data data;
 
        public MainForm()
        {
            InitializeComponent();
 
            BuildFileInterface();
            Build(new Data());
        }
 
        #region Handlers
 
        private void btSave_Click(object sender, System.EventArgs e)
        {
            //save data
            new DataLoaderSaver().Save(data, tbSaveFileName.Text);
            //rebuild file interface
            BuildFileInterface();
        }
 
        private void btLoad_Click(object sender, System.EventArgs e)
        {
            //load data
            var data = new DataLoaderSaver().Load(cbLoadFileName.Text);
            //rebuild interface to show new data
            Build(data);
        }
 
        #endregion
 
        //build file interface
        private void BuildFileInterface()
        {
            cbLoadFileName.DataSource = new DataLoaderSaver().GetAllowedFileNames().ToList();
        }
 
        //build interface for the Data
        private void Build(Data data)
        {
            updating ++;
            this.data = data;
            tbValue1.Text = data.Value1;
            tbValue2.Text = data.Value2;
            tbValue3.Text = data.Value3;
            updating --;
        }
 
        int updating = 0;
 
        //update Data object from controls
        void UpdateData()
        {
            if (updating > 0) return;
            data.Value1 = tbValue1.Text;
            data.Value2 = tbValue2.Text;
            data.Value3 = tbValue3.Text;
        }
 
        private void tbValue_TextChanged(object sender, System.EventArgs e)
        {
            //update object after textbox was edited
            UpdateData();
        }
    }

Сохранение и загрузка введенных данных
2
Вложения
Тип файла: zip WindowsFormsApplication372 (6).zip (67.1 Кб, 4 просмотров)
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
29.05.2017, 18:56  [ТС] 12
Storm23, спасибо, то что надо!!!

Попытался реализовать тоже самое в своей программе, начал выдавать ошибку:

Кликните здесь для просмотра всего текста
Ошибка CS0246 Не удалось найти тип или имя пространства имен "DataContractSerializer" (возможно, отсутствует директива using или ссылка на сборку).


Вроде, все тоже самое, что и у вас

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
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
 
namespace Расчеты_НЗМ_v._2._0
{
    class DataLoaderSaver
    {
        string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        string fileExt = ".MySuperApp";
 
        public void Save(Data data, string fileNameNoExt)
        {
            using (var fs = File.Create(Path.Combine(dir, fileNameNoExt + fileExt)))
                new DataContractSerializer(typeof(Data)).WriteObject(fs, data);
        }
 
        public Data Load(string fileNameNoExt)
        {
            using (var fs = File.Open(Path.Combine(dir, fileNameNoExt + fileExt), FileMode.Open))
                return (Data)new DataContractSerializer(typeof(Data)).ReadObject(fs);
        }
 
        public IEnumerable<string> GetAllowedFileNames()
        {
            return Directory.EnumerateFiles(dir, "*" + fileExt).Select(Path.GetFileNameWithoutExtension);
        }
    }
}
Класс DataLoaderSaver скопировал из вашего кода, ничего не менял, где ошибка?

Добавлено через 15 минут
Разобрался!!!!! Ссылку забыл подключить!!!
0
Storm23
Эксперт .NETАвтор FAQ
6227 / 3734 / 1413
Регистрация: 11.01.2015
Сообщений: 4,894
Записей в блоге: 31
29.05.2017, 19:03 13
Цитата Сообщение от rom_kaxxx Посмотреть сообщение
Ошибка CS0246 Не удалось найти тип или имя пространства имен "DataContractSerializer" (возможно, отсутствует директива using или ссылка на сборку).
1) Выделяем имя класса, жмем F1:
Сохранение и загрузка введенных данных


2) На сайте MSDN смотрим dll в которой находится класс:
Сохранение и загрузка введенных данных


3) Добавляем dll в References:
Сохранение и загрузка введенных данных
Сохранение и загрузка введенных данных


4) Добавляем (если нужно) неймспейс:
Сохранение и загрузка введенных данных
2
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
30.05.2017, 10:17  [ТС] 14
Storm23,
Спасибо, программа запускается, ошибок нет.
Возникла следующая проблема, при вводе данных в любую графу, появляется следующая ошибка:
0
Миниатюры
Сохранение и загрузка введенных данных  
sldp
283 / 287 / 112
Регистрация: 29.10.2011
Сообщений: 957
Завершенные тесты: 2
30.05.2017, 10:24 15
rom_kaxxx, Ну вам же в ошибке все написано. Смело могли и самостоятельно разобраться.
Объект data или textbox1 null. Наведите курсор и посмотрите. Уверен, что первое. Вы нажали на ту кнопку, которая выполняет загрузку данных в data ?
0
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
30.05.2017, 11:59  [ТС] 16
sldp, в том то и дело что нет, я начинаю вводить данные, т.е. ввожу первую цифру в любую ячейку и VS выдает эту ошибку. Кнопку загрузить не нажимал.

Добавлено через 3 минуты
textbox1 не равен null, а data.Value1 выдает исключение типа "System.NullReferenceException".
0
sldp
283 / 287 / 112
Регистрация: 29.10.2011
Сообщений: 957
Завершенные тесты: 2
30.05.2017, 12:09 17
Цитата Сообщение от rom_kaxxx Посмотреть сообщение
data.Value1 выдает исключение типа "System.NullReferenceException".
Значит либо data = null, либо data.Value1. Как я уже писав выше, нужно просто навести курсор на них и посмотреть значение. Либо в таблице локальных переменных.
Цитата Сообщение от rom_kaxxx Посмотреть сообщение
Кнопку загрузить не нажимал.
Ну так нажмите. Там как раз и создается объект для переменной data, а пока она null
0
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
30.05.2017, 22:05  [ТС] 18
Посмотрите, пожалуйста, почему ругается на data?
0
Вложения
Тип файла: 7z WindowsFormsApplication4.7z (24.1 Кб, 2 просмотров)
Storm23
Эксперт .NETАвтор FAQ
6227 / 3734 / 1413
Регистрация: 11.01.2015
Сообщений: 4,894
Записей в блоге: 31
30.05.2017, 23:58 19
Цитата Сообщение от rom_kaxxx Посмотреть сообщение
Посмотрите, пожалуйста, почему ругается на data?
Ругается потому что Data объявлен в одном неймспейсе (WindowsFormsApplication372), а код вашей формы - в другом неймспейсе(WindowsFormsApplication4):

Сохранение и загрузка введенных данных
Сохранение и загрузка введенных данных


Visual Studio сама предлагает вам подсоединить нужный неймспейс:
Сохранение и загрузка введенных данных


Или вы можете самостоятельно подключить неймспейс директивой using:
Сохранение и загрузка введенных данных


Либо же вы можете переименовать неймспейс WindowsFormsApplication372 в WindowsFormsApplication4, так что бы все классы оказались в одном неймспейсе:
Сохранение и загрузка введенных данных
1
rom_kaxxx
0 / 0 / 0
Регистрация: 14.05.2017
Сообщений: 13
31.05.2017, 12:14  [ТС] 20
Storm23, Спасибо!
Вроде разобрался, все заработало. Попытался тоже самое сделать в своей проге, начал выдавать другую ошибку, хотя прописал все также:
0
Миниатюры
Сохранение и загрузка введенных данных  
31.05.2017, 12:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2017, 12:14

Сохранение и загрузка listView
люди подскажите как сохранить и загрузить listView, если заранее не известно...

Сохранение и загрузка настроек
Всем привет :) Поскольку программа планирует использовать &quot;ежедневник с...

Сохранение и загрузка list
Имеется list: lst = new List&lt;Man&gt;(); lst.Add(new Man {Name =&quot;Vadim&quot;,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru