merging the Mainsoft branch to the trunk
[mono.git] / mcs / class / System.Data / System.Data / RelatedDataView.cs
1 //\r
2 // System.Data.RelatedDataView\r
3 //\r
4 // Author:\r
5 //   Konstantin Triger (kostat@mainsoft.com)\r
6 //\r
7 \r
8 using System;\r
9 using System.Collections;\r
10 using Mono.Data.SqlExpressions;\r
11 using System.Data.Common;\r
12 \r
13 namespace System.Data\r
14 {\r
15         /// <summary>\r
16         /// Summary description for RelatedDataView.\r
17         /// </summary>\r
18         internal class RelatedDataView : DataView, IExpression\r
19         {\r
20                 #region Fields\r
21                 \r
22                 object[] _keyValues;\r
23                 DataColumn[] _columns;\r
24 \r
25                 #endregion // Fields\r
26 \r
27                 #region Constructors\r
28                 internal RelatedDataView(DataColumn[] relatedColumns,object[] keyValues)\r
29                 {\r
30                         dataTable = relatedColumns[0].Table;\r
31                         _columns = relatedColumns;\r
32                         _keyValues = keyValues;\r
33 \r
34                         UpdateIndex(true);\r
35                 }\r
36 \r
37                 #endregion // Constructors\r
38 \r
39                 #region Methods\r
40 \r
41                 internal override IExpression FilterExpression {\r
42                         get {\r
43                                 return this;\r
44                         }\r
45                 }\r
46 \r
47 \r
48                 #endregion // Methods\r
49 \r
50                 #region IExpression Members\r
51 \r
52                 public object Eval(DataRow row) {\r
53                         return EvalBoolean(row);\r
54                 }\r
55 \r
56                 public bool EvalBoolean(DataRow row) {\r
57                         for (int i = 0; i < _columns.Length; i++)\r
58                                 if (!row[_columns[i]].Equals(_keyValues[i]))\r
59                                         return false;\r
60 \r
61                         IExpression filter = base.FilterExpression;\r
62                         return filter != null ? filter.EvalBoolean(row) : true;\r
63                 }\r
64 \r
65                 public bool DependsOn(DataColumn other) {\r
66                         for (int i = 0; i < _columns.Length; i++)\r
67                                 if (_columns[i] == other)\r
68                                         return true;\r
69 \r
70                         IExpression filter = base.FilterExpression;\r
71                         return filter != null ? filter.DependsOn(other) : false;\r
72                 }\r
73 \r
74                 #endregion\r
75         }\r
76 }\r