Проблема Datarelation : system.data.invalidconstraintexception: "родительские столбцы и дочерние столбцы не имеют столбцов, соответствующих типу".
Привет,
Я новичок в C# и только что попытался сделать отношение формы 1-N с привязкой.
2 таблицы : команды и Спеллеры
Я хочу сделать объекта datarelation между spelerTeamID и TeamID но я получаю сообщение об ошибке
System.Data.InvalidConstraintException: 'Parent Columns and Child Columns don't have type-matching columns.'
Таким образом, мой код, поскольку я не понимаю, почему возникает эта ошибка (оба являются Int32 в качестве типа данных...
Любая помощь более чем приветствуется.
public partial class frmRugby : Form { public DataSet dsRugby = new DataSet("Rugby"); public BindingSource masterBindingSourceRugbyTeam = new BindingSource(); public BindingSource detailBindingSourceSpelers = new BindingSource(); private DataTable CreateDataTableRugbyTeams() { DataTable dtTeams = new DataTable("Teams"); DataColumn dcTID = new DataColumn("TeamID") { DataType= typeof(Int32), AllowDBNull = false, AutoIncrement = true, AutoIncrementSeed = 1, }; DataColumn dcTeamNaam = new DataColumn("Teamnaam", typeof(string)); DataColumn dcTrainer = new DataColumn("Trainer", typeof(string)); DataColumn dcKlasse = new DataColumn("Klasse", typeof(string)); DataColumn dcSoortRugby = new DataColumn("Soortrugby", typeof(string)); DataColumn dcAantalSpelers = new DataColumn("Aantalspelers", typeof(string)); dtTeams.Columns.Add("TeamID"); dtTeams.Columns.Add("Teamnaam"); dtTeams.Columns.Add("Trainer"); dtTeams.Columns.Add("Klasse"); dtTeams.Columns.Add("Soortrugby"); dtTeams.Columns.Add("Aantalspelers"); dtTeams.PrimaryKey = new DataColumn[1]; dtTeams.PrimaryKey.Append(dcTID); return dtTeams; } private DataTable CreateDataTableSpelers() { DataTable dtSpelers = new DataTable("Spelers"); DataColumn dcSID = new DataColumn("SpelerID") { DataType= typeof(Int32), AllowDBNull = false, AutoIncrement = true, AutoIncrementStep = 1, }; DataColumn dcRoepNaam = new DataColumn("Roepnaam", typeof(Int32)); DataColumn dcVoorLetters = new DataColumn("Voorletters", typeof(string)); DataColumn dcTussenVoegsels = new DataColumn("Tussenvoegsels", typeof(string)); DataColumn dcAchterNaam = new DataColumn("Achternaam", typeof(string)); DataColumn dcGeboorteDatum = new DataColumn("Geboortedatum", typeof(DateTime)); DataColumn dcRugnummer = new DataColumn("Rugnummer", typeof(byte)); DataColumn dcSpelerTeamID = new DataColumn("SpelerTeamID") { DataType = typeof(Int32), AllowDBNull = false, }; dtSpelers.Columns.Add(dcSID); dtSpelers.Columns.Add(dcVoorLetters); dtSpelers.Columns.Add(dcRoepNaam); dtSpelers.Columns.Add(dcTussenVoegsels); dtSpelers.Columns.Add(dcAchterNaam); dtSpelers.Columns.Add(dcGeboorteDatum); dtSpelers.Columns.Add(dcRugnummer); dtSpelers.Columns.Add(dcSpelerTeamID); dtSpelers.PrimaryKey.Append(dcSID); return dtSpelers; } public void CreateDataRelation() { DataColumn dcParent, dcChild; dcParent = dsRugby.Tables["Teams"].Columns["TeamID"]; dcChild = dsRugby.Tables["Spelers"].Columns["SpelerTeamID"]; DataRelation drTeamSpeler = new DataRelation("relationTeamSpeler", dcParent, dcChild); dsRugby.Relations.Add(drTeamSpeler); ForeignKeyConstraint fkTeamSpeler = drTeamSpeler.ChildKeyConstraint; fkTeamSpeler.DeleteRule = Rule.None; fkTeamSpeler.UpdateRule = Rule.Cascade; } public frmRugby() { InitializeComponent(); dsRugby.Tables.Add(CreateDataTableRugbyTeams()); dsRugby.Tables.Add(CreateDataTableSpelers()); CreateDataRelation(); masterBindingSourceRugbyTeam.DataSource = dsRugby.Tables["RugbyTeams"]; TxbTeamNaam.DataBindings.Add("Text", masterBindingSourceRugbyTeam, "Teamnaam"); txbTrainer.DataBindings.Add("Text", masterBindingSourceRugbyTeam, "Trainer"); lblTeamID.DataBindings.Add("Text", masterBindingSourceRugbyTeam, "TeamID"); cmbKlasse.DataBindings.Add("Text", masterBindingSourceRugbyTeam, "Klasse"); cmbSoortRugby.DataBindings.Add("Text", masterBindingSourceRugbyTeam, "Soort Rugby"); detailBindingSourceSpelers.DataSource = masterBindingSourceRugbyTeam; detailBindingSourceSpelers.DataMember = "relationTeamSpeler"; dgvGrid.DataSource = detailBindingSourceSpelers; }
Что я уже пробовал:
Попытался сделать datarelation
DataColumn dcParent, dcChild; dcParent = dsRugby.Tables["Teams"].Columns["TeamID"]; dcChild = dsRugby.Tables["Spelers"].Columns["SpelerTeamID"]; DataRelation drTeamSpeler = new DataRelation("relationTeamSpeler", dcParent, dcChild);но я всегда получаю ошибку, что столбцы должны быть одного типа, но они есть..
Bryian Tan
Просто любопытно, неужели это строчка " dtTeams.Свойства primarykey.Добавлять(dcTID);" дайте какую-нибудь ошибку?