2016-11-22 3 views
1

У меня есть небольшая проблема, которую я не могу понять. У меня есть форма в моем приложении FORM1. На кнопке нажмите SEARCH - я покажу данные пользователя в DATAGRIDVIEW. Итак, теперь, когда у меня есть данные, у пользователя есть возможность добавить нового клиента, поэтому они нажимают кнопку, и у меня появляется новая форма. Я не закрыть форму Form1 - я оставить его, как это и создать новый ребенок, как это ....дочерние формы - выполнение действия по активированному событию

Dim NewMDIChild As New frmNewClient() 
NewMDIChild.MdiParent = MDIContainer 
NewMDIChild.Show() 
MDIContainer.Show() 

Теперь пользователь сможет ввести данные и сохранить его на frmNEWCLIENT. Как только они будут сделаны, они нажмут кнопку DONE, которая вернет их в FORM1. И здесь я хочу, чтобы сетка была обновлена, так что она включает и нового клиента. Но я не знаю, как!

Я попытался сделать это в Активировать Событие формы - Но в этом случае - сетка загружается, когда я изначально открываю FORM1 - чего я не хочу. Я хочу, чтобы сетка была пустой, когда пользователи открывают ФОРМУ. Я только хочу перезагрузить его, когда пользователи закрывают FRMNEWCLIENT.

Надеюсь, я понятен. Благодаря!

+0

Если вы добавляете в базовый источник данных, обновления не требуется - он будет автоматически установлен. – Plutonix

+0

@plutonix Я сохраняю его на сервере sql - я использую набор данных для загрузки моей сетки - но я не знаю, привязан ли он до сих пор, поскольку он не показывает новую запись. Как только я снова ищу все записи, он показывает мне новый, который был добавлен. Он работает в других случаях, когда у меня есть вкладки, но в каждом случае я должен вызвать свою функцию, которая НАГРУЖАЕТ сетку, чтобы увидеть новые данные. С вкладками это другой сценарий - здесь я понятия не имею. Если я должен установить флаг при первоначальном активации формы и только перезагрузить его, когда вернусь из другой формы? – BobSki

+0

Хорошо, DataSet содержит таблицу, которая является источником данных. Если вы добавите новые записи в этот DataTable, они будут автоматически видны во всем, используя этот DataTable, если они соответствуют текущему фильтру. Вкладки, элементы управления формами - ничего из этого не имеет. – Plutonix

ответ

2

Это звучит как Вы ищете способ для одной формы знать, что другой сделал изменения в db. Учитывая форму, чтобы добавить или изменить строку, вы можете вызвать метод, когда другая форма добавляет/изменяет или удаляет строку:

Public Sub SampleDSChanged() 
    daSample.Fill(dtSample)  ' refresh 
    dgv1.FirstDisplayedScrollingRowIndex = dgv1.RowCount - 1 
End Sub 

В форме добавления/редактирования записи:

dbcon.Open() 
Dim rows = cmd.ExecuteNonQuery() 
If rows > 0 Then 
    frmMain.SampleDSChanged() 
End If 

Форма Edit/New, INSERTS или UPDATES записывает по мере необходимости свои собственные SQL-операторы, действуя непосредственно на db. Впоследствии метод просто действует как уведомитель. Результат:

enter image description here

«ребенок формы» могут добавлять или редактировать записи, в любом случае это говорит "основная форма, что она сделала это. DataGridView просто показывает, что оно получает уведомление, оно может и не существовать.


Даже если вы пишете старые школьные приложения, ориентированные на форму, вы можете использовать возможности NET-провайдера. А именно, различные участники (формы) могут вносить изменения в один источник данных, поэтому любые изменения сразу видны всем заинтересованным сторонам. Вам просто нужно сделать некоторые из доступных объектов данных.

Даже с использованием той же формы для ADD и EDIT и метода UPSERT существует около пяти раз больше кода, связанного с тем, что форма Edit/Add действует независимо от работы с общим источником данных.

+0

Благодарим вас за этот подробный пример. – BobSki

+0

Я полностью согласен - так, как это было сделано здесь, это довольно старая школа. но я хочу, чтобы я мог видеть полный пример, например, ADD/EDIT, работающий с одним и тем же источником данных (из того, что вы говорили мне за последний месяц или около того, похоже, что это было бы почти что-то, что можно было бы использовать в этом приложении). Также иногда мы не просто добавляем обновление редактирования, потому что записываем наши изменения в специальной таблице в Edit, мы записываем DELETES, а что нет. Я только что начал программирование с помощью vb.net. По большей части я делал все vb6 – BobSki

+1

. Я дал вам [эту ссылку] (http://stackoverflow.com/a/33702351) раньше. Если у вас настроенный DA, вам не нужен какой-либо другой код SQL или db для чего-то вроде обслуживания таблиц; и вы можете делать * реальные * обновления - DA выбирает строку, которая сама меняет. Поиск просто становится вопросом применения фильтра строк. Это не исключает согласования аудита/протоколирования. Старая школа BTW относилась к процессуальному программированию и более OO. Вместо форм с 100-ю строками кода, дублирующими, что в других формах отвечает класс Customer (или Widget или что-то еще) – Plutonix

Смежные вопросы