Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614

Обновление базы данных с textBox

26.01.2016, 18:05. Показов 3423. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И еще один вопросик:
Также есть база данных на Microsoft Server. В ней есть таблица, содержащая столбцы - id, info, sum
Мне нужно сделать такое - когда гружу программу, в два textBox'а загружаются данные по ключу id(WHERE id = @id), затем я могу изменить эти данные прям в textBox'ах и нажать на кнопку "Сохранить", после чего, должна обновиться строка в базе данных новыми данными.
Итак, вот моя реализация:
1. Вначале я кидаю на форму два textBox'а и выставляю параметр первого DataBindings -> Text -> reportBindingSource - info, и второго DataBindings -> Text -> reportBindingSource - sum
2. Дальше событие form_Load грузит данные с базы в textBox'ы:

C#
1
2
3
4
5
6
private void Form1_Load(object sender, EventArgs e)
{
    // Гружу данные в this.ordersDataSet.Report и соответственно они грузятся в textBox, так как я выставил DataBindings -> Text
    DataRow currentRow = this.ordersDataSet.Orders.Rows[e.RowIndex];
    this.reportTableAdapter.Fill(this.ordersDataSet.Report, Convert.ToInt32(currentRow["id"]));
}
3. Теперь событие по нажатию на кнопку "Сохранить":

C#
1
2
3
4
5
6
7
8
private void button6_Click(object sender, EventArgs e)
{
    int i = this.ordersDataSet.Report.Rows.IndexOf( newRow );
 
    this.ordersDataSet.Report.Rows[i]["info"]   = this.textBox2.Text;
    this.ordersDataSet.Report.Rows[i]["sum"]    = Convert.ToDouble(this.textBox3.Text);
    this.reportTableAdapter.Update(this.ordersDataSet.Report);
}
Должно по идее все работать, но почему-то данные с textBox'ов не грузятся в базу. Методом тыка понял что это из за DataBindings -> Text.
Помогите, как решить эту проблему?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.01.2016, 18:05
Ответы с готовыми решениями:

Обновление данных из базы данных в клиентах в реальном времени
Здравствуйте, уважаемые коллеги! Как сделать то, что описано в теме? Расскажу с самого начала откуда пошла такая задача. Есть в...

Обновление базы данных
Здравствуйте! Есть база данных mssql которая содержит информацию об ВУЗах (название вуза и информация об его...

Обновление базы данных
В базе данных две таблицы (оформление и работа). Создаю table("Выполненные работы"), который я заполняю при помощи соединяющего...

8
Эксперт .NET
 Аватар для Usaga
14310 / 9391 / 1355
Регистрация: 21.01.2016
Сообщений: 35,413
27.01.2016, 07:45
Переде тем как делать Update было бы не плохо заставить DataSet принять произведённые вами изменения:
C#
1
this.ordersDataSet.AcceptChanges();
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
27.01.2016, 12:59
Цитата Сообщение от Usaga Посмотреть сообщение
Переде тем как делать Update было бы не плохо заставить DataSet принять произведённые вами изменения:
this.ordersDataSet.AcceptChanges();
Где вас таких берут? Почему вы все стремитесь выполнить AcceptChanges? В MSDN же черным по белому написано, что, во-первых:
Вызов метода AcceptChanges или метода AcceptChanges приведет к фиксации всех изменений в DataSet или DataTable.Если любой из этих методов вызывается до вызова метода Update, изменения не будут фиксироваться при вызове метода Update, пока не будут внесены дополнительные изменения после вызова метода AcceptChanges или метода AcceptChanges.
То есть, если воспользоваться вашим вредным советом, то на базе точно ни чего не обновится.
Во-вторых:
Обычно для объекта DataTable метод AcceptChanges вызывается после попытки обновления класса DataSet с помощью метода DbDataAdapter.Update.
Что означает, что метод Update вызывает внутри себя метод AccpetChanges, а значит не нужно вызывать метод AccetpChanges после выполнения Update, как это советует dimkadv2 в соседней теме.
Ни до Update, ни после Update вызывать метод AccpetChanges не следует. Update сам его вызовет тогда, когда это нужно!

Bretbas, Как вы узнаете, что данные не грузятся в базу? Убедитесь, что у вас в проекте не стоит флажок "Копировать файл БД всегда". Если особо не придераться к коду, в частности к целесообразности всяких IndexOf в вашем коде, то код должен работать.
1
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
28.01.2016, 22:38  [ТС]
kodv,чтобы проверить обновилась база или нет, можно несколькими способами, к примеру в sql expoler зайти в базу-нужную таблицу и открыть view data или как то так. Или просто перезагрузить программу...ничего не обновляется. Но это "не обновление" происходит только если я пишу в textBox...в остальных местах программы все данные пишутся в базу
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
05.02.2016, 20:01  [ТС]
Ребят, короче ничерта у меня не получается. Вот заснял видео для более подробного объяснения проблемы


Помогите пожалуйста
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
07.02.2016, 03:11  [ТС]
Вы по можете?) жду ваших ответов)
0
Эксперт .NET
 Аватар для Usaga
14310 / 9391 / 1355
Регистрация: 21.01.2016
Сообщений: 35,413
07.02.2016, 07:04
Как насчёт такого (более правильного на мой взгляд) варианта:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void button6_Click(object sender, EventArgs e)
{
    try {
    DataRow row = this.ordersDataSet.Report.NewRow();
 
    row["info"]   = this.textBox2.Text;
    row["sum"]    = Convert.ToDouble(this.textBox3.Text);
 
    this.ordersDataSet.Report.Rows.Add(row);
    this.reportTableAdapter.Update(this.ordersDataSet.Report);
    } catch(Exception ex) {
        MessageBox.Show("Error", ex.Message);
    }
}
При этом я бы хотел дополнительно уточнить: с чем выполняется привязка данных двух контролов (в видео вы указывали, что выполнили привязку)? Просто в пример, который я взял за основу для данного кода выполняется прямое обращение к контролам, которые к чему-то привязаны. Обычно так не делается. Если вы используете привязку данных, то и должны использовать её для получения данных из этих контролов!
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
07.02.2016, 23:22  [ТС]
Вы не поняли. Каждой строке из таблицы report соответствует строка из таблицы orders( как видно на видео ). В dataGridView2 отображается информация из таблицы orders. Также в этом же dataGridView2 имеется столбец с checkedBox'ами. То есть у каждой строки в dataGridView2 есть свой checkedBox соответственно.
Как я сказал выше, для каждой строки таблицы orders соответствует своя строка из таблицы reports. Таблица reports состоит из полей - id_order, info, sum. Поле info и sum привязаны к двум контроллер - textBox1 и textBox2( привязаны через DataBindings у каждого textBox'а. Это видно на видео ). Соответственно отображаться и изменяться info и sum каждой строки из reports будет через textBox'ы.
А теперь логика:
Выбираю строку из dataGridView2, где отображается таблица orders и кликаю по checkedBox этой строки. Всвязи с этим создаётся новая строка в reports, где id_order будет индекс строки из таблицы orders. Поля info и sum пока пустые. Также после выбирания checkedBox становятся доступны контролы textBox, о которых я говорил выше. Там я могу вбить информацию и нажать на кнопку сохранить. после чего, информация записывается в ту строку, которая была создана ранее в reports, в поля info и sum.
Теперь я закрывают и открываю программу заново. Нажимаю на строку в dataGridView2, которая отображает orders, на которую нажимал до закрытия программы. Так вот изменения должны сохраниться - флажок на checkedBox должен быть активным, textBox'ы должны быть доступны, и в них должна быть сохранена( то есть уже брать с базы с таблицы reports ) информация, ту которую я вбивал.

Фуууухх... вроде все...думаю понятно, что мне нужно сделать....
0
 Аватар для kodv
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
10.02.2016, 10:19
Bretbas, учитесь пользоваться дебаггером. С его помощью есть возможность посмотреть, какое значение какая переменная и в какой момент имеет.
По поводу привязки данных. по идее, привязка данных двух-сторонняя. То есть, при изменении свойства Text в TextBox автоматически изменяется info в DataTable, и наоборот. В вашем случае конечный код для сохранения изменений в БД должен выглядеть так:
C#
1
2
3
4
private void button6_Click(object sender, EventArgs e)
{
    reportTableAdapter.Update(this.ordersDataSet.Report);
}
Если он не сработает, то нужно искать ошибки при пошаговом выполнении программы в дебаггере.
В вашем случае, возможно, у .NET рвет башню из-за попытки выполнить ненужные действия. Сейчас проверять нет времени, но, возможно, внутри процедуры IndexOf происходят какие-нибудь действия, которые инициируют несанкционированные срабатывания привязки данных в результате которого в момент дальнейшего присваивания элементы управления реально содержат пустые значения. Но это из разряда предположений по принципу "пальцем в небо".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2016, 10:19
Помогаю со студенческими работами здесь

Обновление базы данных
Имею приложение к которому подключена база, в обозревателе решения в проекте висит файл dataset.xsd. Добавил несколько таблиц через мс...

Обновление существующей базы данных
Пытаюсь обносить базу данных, включил миграции(Enable-Migrations), добавил миграции (Add-migrations), пытаюсь обновить базу...

Базы данных. Сортировка и обновление
Здравствуйте. Пишу дипломную работу с использованием баз данных. У меня такой вопрос: Как программно обновить содержимое DataGridView...

Из базы данных в textBox
Как можно сделать так, что бы при открытии формы из id.Text берется ИД человека и нужно что бы заполнился FIO.Text по этому ИД.

Обновление таблицы базы данных из DataTable
Приветствую всех. Вот какая проблема надо обновлять таблицу база данных данными из datatable делал так SQLiteCommand command =...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru