トップ回答者
LINQ to SQL で取得したデータを DataGridView に表示したい

質問
-
お世話になります。
DataGridViewには、No と Name の列をGUIにて作成していおり、行はないです。
列の幅やその他設定をGUIにて設定したいため、予め列を作成しております。
この No と Name にLINQ to SQL で取得したデータを代入したいのですが、方法が分かりません。
var context = new dcDataContext();
var q = context.Table
.Where(x => x.HNO < 10)
.Select(x => new {hNo = x.HNO, hName = x.HNAME});
DataGridView.DataSource = q;
上記のようにすると、作成済みの No と Name に、追加で hNo と hName が作成され、
No と Name は空のまま、hNo と hName にデータが入ってきます。
各セルに一つ一つ代入していくことは出来そうですが、一気に代入することは可能でしょうか。
ご教授のほど、よろしくお願いいたします。
- 編集済み kentahoga 2013年1月23日 13:34
回答
-
DataGridViewに列が自動的に追加されないようにするには、DataGridViewのAutoGenerateColumnsプロパティをFalseにします。
また、DataGridViewに予め作ってある列に値を流し込むには、各列のDataPropertyNameプロパティにデータソースの列名を指定します。デザイナで列を追加されたと思いますが、そこで表示されるプロパティで指定できます。(参考)
DataGridViewに列を手動で追加する
http://dobon.net/vb/dotnet/datagridview/addcolumn.html★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク kentahoga 2013年1月24日 1:18
-
trapemiya様
ご回答ありがとうございます。
教えて頂いた通り、各列のDataPropertyNameプロパティにデータソース名の列名を指定することで、
・対応する列名(同一の列名)がある場合は、そこに値が代入される
・対応する列名がない場合は列が追加される
(AutoGenerateColumnsプロパティがfalseの場合)
ことが確認できました。
佐祐理様にご回答を頂いたときには、
各列のデザインにある(Name)が対応すれば良いと考えていたため出来なかったようです。
DataPropertyNameの意味合いが分かっておりませんでした。
疑問点が解決しましたので、回答としてマークさせて頂きます。
trapemiya様、佐祐理様 ありがとうございました。
すべての返信
-
佐祐理様
ご回答ありがとうございます。
上記質問で No, Name 列が予め作成されており、hNo, hNameを新たに追加した為
ということでしょうか?
列名を同じにして(作成済みの列を hNo, hName として、上記質問と同様にLINQにて取得)
試してみましたが、hNo, hName, hNo, hName の列と予め作成した列に今回の列が追加されました。
DataGridView.DataSourceにLINQ結果を代入するのは自動的に追加となってしまうようです。
何か他の方法はございますでしょうか?
ご教授のほど、よろしくお願いいたします。
-
DataGridViewに列が自動的に追加されないようにするには、DataGridViewのAutoGenerateColumnsプロパティをFalseにします。
また、DataGridViewに予め作ってある列に値を流し込むには、各列のDataPropertyNameプロパティにデータソースの列名を指定します。デザイナで列を追加されたと思いますが、そこで表示されるプロパティで指定できます。(参考)
DataGridViewに列を手動で追加する
http://dobon.net/vb/dotnet/datagridview/addcolumn.html★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク kentahoga 2013年1月24日 1:18
-
trapemiya様
ご回答ありがとうございます。
教えて頂いた通り、各列のDataPropertyNameプロパティにデータソース名の列名を指定することで、
・対応する列名(同一の列名)がある場合は、そこに値が代入される
・対応する列名がない場合は列が追加される
(AutoGenerateColumnsプロパティがfalseの場合)
ことが確認できました。
佐祐理様にご回答を頂いたときには、
各列のデザインにある(Name)が対応すれば良いと考えていたため出来なかったようです。
DataPropertyNameの意味合いが分かっておりませんでした。
疑問点が解決しましたので、回答としてマークさせて頂きます。
trapemiya様、佐祐理様 ありがとうございました。