comparison Source/Mapping/DataTableMapper.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:f990fcb411a9
1 using System.Data;
2
3 using BLToolkit.Reflection;
4
5 namespace BLToolkit.Mapping
6 {
7 public class DataTableMapper : IMapDataSourceList, IMapDataDestinationList
8 {
9 public DataTableMapper(DataTable dataTable, DataRowMapper mapper)
10 {
11 _table = dataTable;
12 _mapper = mapper;
13 }
14
15 private readonly DataTable _table;
16 private readonly DataRowMapper _mapper;
17 private int _currentRow;
18
19 #region IMapDataSourceList Members
20
21 void IMapDataSourceList.InitMapping(InitContext initContext)
22 {
23 initContext.DataSource = _mapper;
24 }
25
26 bool IMapDataSourceList.SetNextDataSource(InitContext initContext)
27 {
28 if (_currentRow >= _table.Rows.Count)
29 return false;
30
31 DataRow row = _table.Rows[_currentRow++];
32
33 if (row.RowState == DataRowState.Deleted)
34 return ((IMapDataSourceList)this).SetNextDataSource(initContext);
35
36 _mapper.DataRow = row;
37 initContext.SourceObject = row;
38
39 return true;
40 }
41
42 void IMapDataSourceList.EndMapping(InitContext initContext)
43 {
44 }
45
46 #endregion
47
48 #region IMapDataDestinationList Members
49
50 void IMapDataDestinationList.InitMapping(InitContext initContext)
51 {
52 }
53
54 IMapDataDestination IMapDataDestinationList.GetDataDestination(InitContext initContext)
55 {
56 return _mapper;
57 }
58
59 object IMapDataDestinationList.GetNextObject(InitContext initContext)
60 {
61 DataRow row = _table.NewRow();
62
63 _mapper.DataRow = row;
64 _table.Rows.Add(row);
65
66 return row;
67 }
68
69 void IMapDataDestinationList.EndMapping(InitContext initContext)
70 {
71 }
72
73 #endregion
74 }
75 }