Hi,
I am a beginner in C# and just tried to make a 1-N form relation with Binding.
2 tables : Teams & Spelers
I want to make a datarelation between spelerTeamID and TeamID but i get an error
System.Data.InvalidConstraintException: 'Parent Columns and Child Columns don't have type-matching columns.'
Hereby my code as i don't understand why this error is coming (both are Int32 as a datatype...
Any help more then welcome.
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;
}
What I have tried:
Tried to make a datarelation
DataColumn dcParent, dcChild;
dcParent = dsRugby.Tables["Teams"].Columns["TeamID"];
dcChild = dsRugby.Tables["Spelers"].Columns["SpelerTeamID"];
DataRelation drTeamSpeler = new DataRelation("relationTeamSpeler", dcParent, dcChild);
but I always get the error that columns should be of the same type but they are..