Friends !
How are u doing today ?
Now coming to the point :)
According to MSDN
Changes to a DataTable are not final until you call the AcceptChanges method. When either AcceptChanges or RejectChanges is called on a row in the parent table, the AcceptRejectRul e value determines whether or not changes are propagated to corresponding rows in the child table.
Here goes my code:
In the above code when the btnconenct's is clicked the two datagridview(s) get their data sources(the two DataTables).
Also I create one parent(in parent table) and create 3 children(in child table) of it.
I click on btnnone to make AcceptRejectRul e = AcceptRejectRul e.None
now i change the parent ID of the parent and subsequently the child rows are affected(as per the ForeignKeyConst raint ).
Now since I had set AcceptRejectRul e = AcceptRejectRul e.None I expected that when i click btnacceptchange s the parent row and the child rows would revert back to their original value.
But sadly it does not happen.
The changes get saved !
Now where am i mistaken ???
Thanks !
How are u doing today ?
Now coming to the point :)
According to MSDN
Changes to a DataTable are not final until you call the AcceptChanges method. When either AcceptChanges or RejectChanges is called on a row in the parent table, the AcceptRejectRul e value determines whether or not changes are propagated to corresponding rows in the child table.
Here goes my code:
Code:
public partial class Form1 : Form
{
DataSet Childhood;
DataTable parentTable;
DataTable childTable;
ForeignKeyConstraint FKC;
public Form1()
{
InitializeComponent();
}
private void btnconnect_Click(object sender, EventArgs e)
{
parentTable = new DataTable("ParentTable");
parentTable.Columns.Add("ParentID", typeof(int));
parentTable.Columns["ParentID"].AutoIncrement = true;
parentTable.Columns["ParentID"].AutoIncrementSeed = 1;
parentTable.Columns.Add("ParentName", typeof(string));
childTable = new DataTable("ChildTable");
childTable.Columns.Add("ChildID", typeof(int));
childTable.Columns["ChildID"].AutoIncrement = true;
childTable.Columns["ChildID"].AutoIncrementSeed = 1;
childTable.Columns.Add("ParentID", typeof(int));
childTable.Columns.Add("ChildName", typeof(string));
Childhood = new DataSet();
Childhood.Tables.Add(parentTable);
Childhood.Tables.Add(childTable);
FKC = new ForeignKeyConstraint("ForeignKey", parentTable.Columns["ParentID"], childTable.Columns["ParentID"]);
FKC.UpdateRule = Rule.Cascade;
FKC.DeleteRule = Rule.Cascade;
childTable.Constraints.Add(FKC);
Childhood.EnforceConstraints = true;
dataGridView1.DataSource = parentTable;
dataGridView2.DataSource = childTable;
}
private void btnacceptchanges_Click(object sender, EventArgs e)
{
parentTable.AcceptChanges();
}
private void btncascade_Click(object sender, EventArgs e)
{
FKC.AcceptRejectRule = AcceptRejectRule.Cascade;
}
private void btnnone_Click(object sender, EventArgs e)
{
FKC.AcceptRejectRule = AcceptRejectRule.None;
}
private void btnrejectchanges_Click(object sender, EventArgs e)
{
parentTable.RejectChanges();
}
}
Also I create one parent(in parent table) and create 3 children(in child table) of it.
I click on btnnone to make AcceptRejectRul e = AcceptRejectRul e.None
now i change the parent ID of the parent and subsequently the child rows are affected(as per the ForeignKeyConst raint ).
Now since I had set AcceptRejectRul e = AcceptRejectRul e.None I expected that when i click btnacceptchange s the parent row and the child rows would revert back to their original value.
But sadly it does not happen.
The changes get saved !
Now where am i mistaken ???
Thanks !
Comment