2016-02-26 2 views
2

Я хотел бы реализовать триггер ввода sql в таблице набора данных.Datatable insert trigger

Мое приложение имеет два набора данных таблицы:

-- Table: Artikli -- IDB - int,autoincrement Sifra - int, primary key Naziv - string Cena - double PS - string

-- Table: PodArtikli -- IDB - int,autoincrement,primary key Sifra - int Naziv - string Cena - double Kolicina - int Ukupno - computed column (Cena*Kolicina) Pakovanje - double Jed.Mere - string PLU - string, unique Cena_Po_Meri - computed column (1000/Pakovanje * Cena)

Эти таблицы связаны через ограничение внешнего ключа, где родительская таблица Artikli и ребенок таблица PodArtikli на колонке Sifra. Я бы хотел, чтобы новая строка была добавлена ​​в Artikli, чтобы автоматически добавить новую строку в таблицу PodArtikli с Sifra,Naziv и Cena значения из добавленной строки в таблице Artikli.

Данные из таблиц набора данных отображаются в DataGridView. На событии нажатия кнопки btnizmene У меня есть следующий код:

Dim novirow As DataRow = dspetrovac.Artikli.NewRow 
novirow("Sifra") = grdpodaci.Item(1, grdpodaci.CurrentRow.Index).Value 
novirow("Naziv") = grdpodaci.Item(2, grdpodaci.CurrentRow.Index).Value 
novirow("Cena") = grdpodaci.Item(3, grdpodaci.CurrentRow.Index).Value 
novirow("PS") = grdpodaci.Item(4, grdpodaci.CurrentRow.Index).Value 
+0

Триггера обычно реализуют в базе данных, хотя DataTable делает есть некоторые события. Если DGV привязан к источнику данных, вам не нужно вручную переносить данные в новый элемент Row – Plutonix

+0

Я также пробовал событие TableNewRow, но ничего. – Gruja82

ответ

0

Вы не можете написать триггер в .NET DataTable, но вы можете реализовать что-то подобное с помощью DataTable событий. Например, вы можете принять RowChanging события и принять изменения строки см, если добавляется строка, а затем использовать данные из этой строки, чтобы вставить новую строку в дочернюю таблицу

Private Sub Row_Changing(ByVal sender As Object, ByVal e As DataRowChangeEventArgs) 
    If e.Action = DataRowAction.Add Then 
     Dim newChild as DataRow = childTable.NewRow() 
     ' Get new row fr here and insert values 
     newChild("field") = e.Row("field") 
     . . . . . . . 
     childTable.Rows.Add(newChild) 
    End If 
End Sub 
+0

Thnx за идею. Вместо Row_Changing я использовал Row_Changed, потому что в строке события Row_Changing еще не добавлено значение, и возникает исключение InvalidConstraintException, говорящее, что строка со значением столбца «Sifra» в дочерней таблице не существует в родительской таблице. Большое спасибо. – Gruja82

+0

@ Gruja82 Это прекрасно. Это именно то, что моя попытка - направлять вас в правильном направлении. 'rowchanged' или' rowChanging' - это просто техничность, которая вам нужна для тренировки, основанной на вашей разработке и исполнении программного обеспечения. Наслаждаться. –