Это ограничение нельзя включить, поскольку не все значения имеют соответствующие родительские значения.
Здесь вы создали новую строку для родительской таблицы:
DataRow row = tableObj2.NewRow();
Но вы, похоже, не добавили ее в родительскую таблицу. Я ожидал увидеть где-нибудь подобный код, прежде чем вы попытаетесь добавить строки в дочернюю таблицу, которая ссылается на эту новую строку:
tableObj2.Rows.Add(row);
Поскольку вы никогда не добавляли эту строку, ваш код до сих пор работает успешно вы сообщаете DataSet, что эти таблицы связаны между собой, и в этот момент он сообщает, что «одна или несколько строк в вашей дочерней таблице не имеют соответствующей родительской строки в родительской таблице»
Помните; вызов NewRow дает новую отдельную строку. Его нужно добавить в таблицу, чтобы он функционировал как часть отношений.
Согласно другим новостям, ваша жизнь станет намного лучше, если вы щелкните правой кнопкой мыши свой проект, добавите новый элемент, категорию данных, введите DataSet .. откройте DataSet, щелкните правой кнопкой мыши область конструктора и выберите Добавить .. Datatable. Укажите свои столбцы, щелкнув его правой кнопкой мыши и выбрав add..column. Укажите свое отношение, щелкнув серую часть строки рядом с именем столбца в родительском идентификаторе, чтобы вся строка стала синей, а затем перетащите синюю строку на дочерний идентификатор в другой таблице данных и отпустите ее. Это делает типизированный DataSet. С ними намного приятнее работать в intellisense, потому что они ввели свойства для столбцов et c, поэтому ни один из этих row["ID"] = 1
или var x = (int)row["ID"]
- строка будет иметь свойство ID, которое является целым числом, поэтому это row.ID = 1
или var x = row.ID
- строго типизированный, а не строго типизированный:)
Если вы все же создаете строго типизированный DataSet, помните это простое правило: если вы обращаетесь к коллекциям .Rows или .Columns (или помещаете имя столбца в строка) вы, вероятно, делаете это неправильно. Эти коллекции возвращают базовые объекты DataRow / DataColumn, которые возвращают вас в строго типизированный мир
//no
dt.Rows[0]
//yes
dt[0]
//no
dt.Columns["Colname"]
//yes
dt.ColnameColumn
//no
dt[0].IsNull("Colname")
//yes
dt[0].IsColnameNull()