- PR -

DataColumn の Expression

1
投稿者投稿内容
peanuts
会議室デビュー日: 2003/12/11
投稿数: 3
投稿日時: 2003-12-11 17:56
はじめまして。

2つのDataTableを含むDataSetがあります。
リレーションを設定し、親となるDataTableに子のColumnを追加したいのですが、
Expressionプロパティを設定する箇所で
"位置 1 のトークン'Child'を変換できません。"と怒られてしまいます。
Expressionの指定が間違っているのでしょうか。

dt1 = ds.Tables("Data1")
dt2 = ds.Tables("Data2")
dt1.ChildRelations.Add("rel", dt1.Columns("Key"), dt2.Columns("Key"))

col1 = New DataColumn
col1.ColumnName = "hoge"
col1.DataType = GetType(String)
col1.Expression = "Child.hoge" ←ここでエラー

dt1.Columns.Add(col1)

どなたかご存知の方、ご教示願います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-11 18:31
 DataTableは、「1つのテーブル」です。また、DataTable単体では「他のテーブルがあるということはわからない」のです。
###
データベースやデータセットで「他のテーブル」とリレーションを張れるのは、データベースやデータセットの中に「複数のテーブル」があるからです。「テーブル」の所在を知っているのはテーブルではなく、データベースやデータセットです
###
peanuts
会議室デビュー日: 2003/12/11
投稿数: 3
投稿日時: 2003-12-11 19:48
早速のご回答有難うございます。

データテーブルにはリレーションを設定できないということでしょうか…
あれからイロイロと試してみたのですが、

(dsは複数テーブルを含むデータセットです)
コード:
Dim dt1 As New DataTable
Dim dt2 As New DataTable
Dim col1 As New DataColumn 

dt1 = ds.Tables("Data1") 
dt2 = ds.Tables("Data2") 
dt2.ChildRelations.Add("rel", dt2.Columns("Key"), dt1.Columns("Key")) 

col1.ColumnName = "hoge" 
col1.DataType = GetType(String) 
col1.Expression = "Parent(rel).hoge"

dt1.Columns.Add(col1)



リレーションの向きを逆にすると通るんです。
これでいいような気もするのですが、何かスッキリしないので…
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-11 20:06
見落としてました。。。こんなことできるんだ。。。
引用:

MSDN の DataColumn.Expression より:

列名の前に Child を付けて、式の中で子テーブル内の列を参照できます。ただし、子のリレーションシップから複数の行が返される可能性があるため、集約関数には子への参照を含める必要があります。たとえば、 Sum(Child.Price) は、子テーブルの Price という名前の列の合計を返します。


日本語変。手直し。

列名の前に Child を付けて、式の中で子テーブル内の列を参照できます。ただし、子のリレーションシップから複数の行が返される可能性があるため、子への参照には集約関数を含める必要があります。
peanuts
会議室デビュー日: 2003/12/11
投稿数: 3
投稿日時: 2003-12-11 22:32
Jitta様
度々有難うございます。

私も同じところを見ていたのですが、集約関数に関しては見落としていました。
明日早速試してみます。
1

スキルアップ/キャリアアップ(JOB@IT)