void columnEvent(ColumnChangeEventType pEvent, object sender, DataColumnChangeEventArgs e)
 {
     if (e.Row.RowState != DataRowState.Detached)
     {
         if (!blockPointMain.isBlocked())
         {
             string  col = e.Column.ColumnName;
             DataRow row = getRow(pEvent, e.Column.ColumnName);
             if (row != null)
             {
                 List <ITableColumnChange> listA = (List <ITableColumnChange>)row[colACTIVITY];
                 List <IRowValidator>      listV = (List <IRowValidator>)row[colVALIDATOR];
                 List <IBlockPoint>        listB = (List <IBlockPoint>)row[colBLOCK];
                 for (int i = 0; i < listA.Count; ++i)
                 {
                     if (listB[i].block())
                     {
                         try
                         {
                             if (listV[i].check(e.Row))
                             {
                                 listA[i].columnChange(e);
                             }
                         }
                         finally
                         {
                             listB[i].unblock();
                         }
                     }
                 }
             }
         }
     }
 }
 DataRow getRow(ColumnChangeEventType pEvent, string col)
 {
     return(tableRel.Rows.Find(new object[] { pEvent, col }));
 }
        public void addRelation(string[] pCols, ITableColumnChange pActivity, IBlockPoint pBlock, IRowValidator pValidator, ColumnChangeEventType pEvent)
        {
            pValidator = (pValidator == null) ? new RowValidatorTrue() : pValidator;

            try
            {
                blockPointMain.block();
                for (int i = 0; i < tableTarget.Rows.Count; ++i)
                {
                    DataRow row = tableTarget.Rows[i];
                    if (pValidator.check(row))
                    {
                        pActivity.initForColumnChanged(row);
                    }
                }
            }
            finally
            {
                blockPointMain.unblock();
            }

            foreach (string col in pCols)
            {
                add(col, pActivity, pBlock, pValidator, pEvent);
            }
        }
        void add(string col, ITableColumnChange pActivity, IBlockPoint pBlock, IRowValidator pValidator, ColumnChangeEventType pEvent)
        {
            {
                DataRow row = getRow(pEvent, col);
                if (row == null)
                {
                    row = tableRel.Rows.Add(
                        new object[] {
                        pEvent,
                        col,
                        new List <ITableColumnChange>(),
                        new List <IRowValidator>(),
                        new List <IBlockPoint>(),
                    });
                }

                ((List <ITableColumnChange>)row[colACTIVITY]).Add(pActivity);
                ((List <IRowValidator>)row[colVALIDATOR]).Add((pValidator == null) ? new RowValidatorTrue() : pValidator);
                ((List <IBlockPoint>)row[colBLOCK]).Add(pBlock);
            }
            {
                tableRelDistinct.Rows.Add(
                    new object[] {
                    pActivity,
                    pValidator
                });
            }
        }
 public void addRelation(string[] pCols, ITableColumnChange pActivity, IRowValidator pValidator, ColumnChangeEventType pEvent)
 {
     addRelation(pCols, pActivity, new BlockPoint(), pValidator, pEvent);
 }