AcceptChanges() woes :(

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • akshaycjoshi
    New Member
    • Jan 2007
    • 153

    AcceptChanges() woes :(

    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:
    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();
            }
    
        }
    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 !
  • akshaycjoshi
    New Member
    • Jan 2007
    • 153

    #2
    just wrote this to bring the question on the top of the queue ;)

    Comment

    • Plater
      Recognized Expert Expert
      • Apr 2007
      • 7872

      #3
      I would think that AcceptRejectRul e.None would mean that EVERYTHING would be accepted?

      Comment

      Working...