Business Logic Toolkit for .NET
www.bltoolkit.net
|  Home   |  Download   |  Documentation   |  Discussions   |  License   |

  Source.Mapping.DataTableMapper.cs

 
using System.Data;

using BLToolkit.Reflection;

namespace BLToolkit.Mapping
{
    public class DataTableMapper : IMapDataSourceList, IMapDataDestinationList
    {
        public DataTableMapper(DataTable dataTable, DataRowMapper mapper)
        {
            _table  = dataTable;
            _mapper = mapper;
        }

        private readonly DataTable     _table;
        private readonly DataRowMapper _mapper;
        private int                    _currentRow;

        #region IMapDataSourceList Members

        void IMapDataSourceList.InitMapping(InitContext initContext)
        {
            initContext.DataSource = _mapper;
        }

        bool IMapDataSourceList.SetNextDataSource(InitContext initContext)
        {
            if (_currentRow >= _table.Rows.Count)
                return false;

            DataRow row = _table.Rows[_currentRow++];

            if (row.RowState == DataRowState.Deleted)
                return ((IMapDataSourceList)this).SetNextDataSource(initContext);

            _mapper.DataRow          = row;
            initContext.SourceObject = row;

            return true;
        }

        void IMapDataSourceList.EndMapping(InitContext initContext)
        {
        }

        #endregion

        #region IMapDataDestinationList Members

        void IMapDataDestinationList.InitMapping(InitContext initContext)
        {
        }

        IMapDataDestination IMapDataDestinationList.GetDataDestination(InitContext initContext)
        {
            return _mapper;
        }

        object IMapDataDestinationList.GetNextObject(InitContext initContext)
        {
            DataRow row = _table.NewRow();

            _mapper.DataRow = row;
            _table.Rows.Add(row);

            return row;
        }

        void IMapDataDestinationList.EndMapping(InitContext initContext)
        {
        }

        #endregion
    }
}
 
© 2010 www.bltoolkit.net
support@bltoolkit.net