突破表关联限制
本节的内容,可以参考CaseStudy目录下的文件:同表同列关联.Table
我们知道,Foxtable的表关联有两大限制:
1、表达式列不能用于建立关联。
2、建立同表关联的时候,父表和子表的关联列必须不同。
不过我们可以用代码突破这两个限制。
假定有下图所示的表:
要实现这样的统计很简单:
1、新建一个表达式列,列名为“班级A”,表达式为:[班级]
2、将"班级A"这一列隐藏起来,因为这一列仅仅用于建立关联。
3、新建好各科目的最低、最高、平均分列,这些列都是表达式列,但是新建的时候,不需要设置表达式:
4、最后在项目事件AfterOpenProject中加上代码,用于创建关联并设置表达式:
Dim
dt As
DataTable =
DataTables("成绩表")
If
Relations.Contains("cj")
= False Then
'如果还没有创建关联
Relations.Add("cj",dt.DataCols("班级"),dt.DataCols("班级A"),RelationPathEnum.None)
End
If
dt.DataCols("语文_最低").Expression
= "Min(Child(cj).语文_分数)"
dt.DataCols("语文_最高").Expression
= "Max(Child(cj).语文_分数)"
dt.DataCols("语文_平均").Expression
= "Avg(Child(cj).语文_分数)"
dt.DataCols("数学_最低").Expression
= "Min(Child(cj).数学_分数)"
dt.DataCols("数学_最高").Expression
= "Max(Child(cj).数学_分数)"
dt.DataCols("数学_平均").Expression
= "Avg(Child(cj).数学_分数)"
dt.DataCols("英语_最低").Expression
= "Min(Child(cj).英语_分数)"
dt.DataCols("英语_最高").Expression
= "Max(Child(cj).英语_分数)"
dt.DataCols("英语_平均").Expression
= "Avg(Child(cj).英语_分数)"