private DataRelation GenerateRelationship (RelationStructure rs)
{
DataTable ptab = dataset.Tables [rs.ParentTableName];
DataTable ctab = dataset.Tables [rs.ChildTableName];
DataRelation rel ;
string name = rs.ExplicitName != null ? rs.ExplicitName : XmlHelper.Decode (ptab.TableName) + '_' + XmlHelper.Decode (ctab.TableName);
// Annotation Relations belonging to a DataSet can contain multiple colnames
// in parentkey and childkey.
if (datasetElement != null) {
String[] pcolnames = rs.ParentColumnName.Split (null);
String[] ccolnames = rs.ChildColumnName.Split (null);
DataColumn[] pcol = new DataColumn [pcolnames.Length];
for (int i=0; i<pcol.Length; ++i)
pcol [i] = ptab.Columns [XmlHelper.Decode (pcolnames [i])];
DataColumn[] ccol = new DataColumn [ccolnames.Length];
for (int i=0; i < ccol.Length; ++i) {
ccol [i] = ctab.Columns [XmlHelper.Decode (ccolnames [i])];
if (ccol [i] == null)
ccol [i] = CreateChildColumn (pcol [i], ctab);
}
rel = new DataRelation (name, pcol, ccol, rs.CreateConstraint);
} else {
DataColumn pcol = ptab.Columns [XmlHelper.Decode (rs.ParentColumnName)];
DataColumn ccol = ctab.Columns [XmlHelper.Decode (rs.ChildColumnName)];
if (ccol == null)
ccol = CreateChildColumn (pcol, ctab);
rel = new DataRelation (name, pcol, ccol, rs.CreateConstraint);
}
rel.Nested = rs.IsNested;
if (rs.CreateConstraint)
rel.ParentTable.PrimaryKey = rel.ParentColumns;
return rel;
}