1

Тема: Оновити Listbox після додавання нових данних в БД Access

Доброго вечора.
В процесі написання коду виникли проблеми з використання оновлення ListBox.
На формі розміщенні TextBox та  LisBox. В поле textBox вводиться слово і в Listbox проводиться пошук. Якщо немає данного товару , то можливо додати через форму. Після додавання дані в бд оновлюються ,а в Listbox не хоче (потрібно виходити з форми  і дані тоді відображаються. Як прописати код ,щоб після додавання нового товару оновлення проводилось автоматично і БД і listBox.
Проект виконаний на Visual Basic 2010 Express

Post's attachments

update Listbox.7z 86.74 kb, 151 downloads since 2016-03-09 

Подякували: Fox1

2 Востаннє редагувалося leofun01 (11.03.2016 13:09:37)

Re: Оновити Listbox після додавання нових данних в БД Access

Проблеми, з якими я зіткнувся:

1. Коли я відкрив проект і спробував його запустити, в мене був ексепшн:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll
Additional information: The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
Його вдалося виправити встановленням програми, яку можна завантажити звідси.

2. У файлі App.config був прописаний шлях до бази "C:\Users\Юра\Documents\База данных9.accdb", я замінив його на "..\..\..\..\База данных9.accdb". Після цього проект успішно запустився.

Далі записано зміни, які я провів для оновлення списку (Form1.ListBox1):
Select Form1.ListBox1 -> Modifiers = Public
Open Form1.vb -> in TextBox1_TextChanged changed code:

    If f.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then

Open Form2.vb -> in Button1_Click added code:

    Dim form1 As Form1 = Me.Owner
    form1.Таблица_товараTableAdapter.Fill(form1.База_данных9DataSet.таблица_товара)

Пояснюю:
ListBox1 має бути видимим за межами класу Form1, тоді Form2 зможе побачити form1.ListBox1. Для цього робимо модифікатор ListBox1 - Public.
Коли перша форма викликає другу, треба передавати Me в якості Owner, тобто власником другої форми має бути перша.
В другій формі (під час додавання елемента списку) дістаємо власника форми (форму 1) і оновлюємо список так само як він був завантажений при старті програми.
PS: В моєму прикріпленому архіві оновлення списку вже працює.

Post's attachments

update Listbox.zip 138.24 kb, 144 downloads since 2016-03-11 

Подякували: Fox, Engineer2

3

Re: Оновити Listbox після додавання нових данних в БД Access

leofun01,дякую за Вашу відповідь .
У мене є ще одне питання :  можливо  поставити фокус на TextBox (якщо вводити слово його в базі немає і в TextBox2, де вводиться новий товар відображалися початкові літери).

4

Re: Оновити Listbox після додавання нових данних в БД Access

Юрій_ написав:

leofun01,дякую за Вашу відповідь .
У мене є ще одне питання :  можливо  поставити фокус на TextBox (якщо вводити слово його в базі немає і в TextBox2, де вводиться новий товар відображалися початкові літери).

Можна, звичайно. Достатньо в першій формі після створення екземпляру другої форми додати код:

f.TextBoxName.Text = TextBoxSearchWord.Text
f.TextBoxName.SelectionStart = f.TextBoxName.Text.Length

І ще є зауваження до автора початкового коду:
Коли даєте імена класам і екземплярам (формам, контролам на формі), робіть їх змістовними, щоб вони хоча б приблизно відображали призначення даного об'єкта. (Це я про TextBox1, TextBox2, ...).

Рекомендації:
[файли, класи, змінні] краще називати використовуючи латинські літери і _.
Незабувайте про Anchor, AcceptButton і TabIndex у властивостях форм. Так користувачам (і Вам) буде легше працювати з програмою.
Якщо результати роботи програми не зберігаються автоматично, тоді, за допомогою події FormClosing, варто просити користувача підтверджувати вихід без збереження, або пропонувати зберегти результати (приклад можна глянути в новому прикріпненому файлі).

Post's attachments

update Listbox.zip 111.35 kb, 149 downloads since 2016-03-15 

5

Re: Оновити Listbox після додавання нових данних в БД Access

Дякую за відповідь.