突破表关联限制

本节的内容,可以参考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).英语_分数)"


本页地址:http://www.foxtable.com/webhelp/topics/2746.htm