私DataGridView
の場合、1つのテーブルから多数の列を表示しています。このテーブルには、別のテーブルのアイテムを指す列があります。すでにお察しのとおり、ItemIDの代わりに2番目のテーブルのテキスト値を1列のグリッドに表示したいと思います。これを行う方法をネット上で正しい例を見つけることができませんでした。
データベースに2つのテーブルがあると仮定しましょう。
テーブルユーザー:
UserID UserName UserWorkplaceID
1 Martin 1
2 John 1
3 Susannah 2
4 Jack 3
テーブルワークプレイス:
WorkplaceID WorkplaceName
1 "Factory"
2 "Grocery"
3 "Airport"
型指定されていないデータセットdsUsers
が1つ、バインディングソースが1つ、データセットを埋めるためbsUsers
に2つあります( 、)。DataAdapters
daUsers
daWorkplaces
私が実行しているコード:
daUsers.Fill(dsUsers);
daWorkplaces.Fill(dsUsers);
bsUsers.DataSource = dsUsers.Tables[0];
dgvUsers.DataSource = bsUsers;
この時点でdgvUsers
、UserID、UserName、UserWorkplaceIDの3つの列が表示されます。ただし、UserWorkplaceIDと値1、2、3の代わりに、「Factory」、「Grocery」などを表示したいのですが...
そこで、「WorkplaceName」という別の列を追加dgvUsers
し、コードでそれを新しく作成されたリレーションにバインドしようとしています。
dsUsers.Relations.Add("UsersWorkplaces", dsUsers.Tables[1].Columns["WorkplaceID"], dsUsers.Tables[0].Columns["UserWorkplaceID"]);
WorkplaceName.DataPropertyName = "UsersWorkplaces.WorkplaceName";
残念ながら、それは機能しません。リレーションはエラーなしで作成されますが、プログラムの実行後、この列のフィールドは空になります。
私が間違っていることは何ですか?
また、DataGridViewのLookUpコンボボックスを使用してUserWorkplaceIDを変更できる例についてもお聞きしたいと思いますが、数値の代わりに、WorkplaceNameの下にあるtex値が表示されます。
御時間ありがとうございます。