none
LINQ to SQL で取得したデータを DataGridView に表示したい RRS feed

  • 質問

  • お世話になります。

    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
    2013年1月23日 13:28

回答

  • 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
    2013年1月24日 0:51
    モデレータ
  • trapemiya様

    ご回答ありがとうございます。

    教えて頂いた通り、各列のDataPropertyNameプロパティにデータソース名の列名を指定することで、

     ・対応する列名(同一の列名)がある場合は、そこに値が代入される

     ・対応する列名がない場合は列が追加される

       (AutoGenerateColumnsプロパティがfalseの場合)

    ことが確認できました。

     

    佐祐理様にご回答を頂いたときには、

    各列のデザインにある(Name)が対応すれば良いと考えていたため出来なかったようです。

    DataPropertyNameの意味合いが分かっておりませんでした。

      

    疑問点が解決しましたので、回答としてマークさせて頂きます。

    trapemiya様、佐祐理様 ありがとうございました。

    • 回答としてマーク kentahoga 2013年1月24日 1:18
    • 編集済み kentahoga 2013年1月24日 1:31
    2013年1月24日 1:17

すべての返信

  • hNoを定義したからhNoの列が追加された。であれば作成済みのNoにデータを入れるにはどうすればいいのか、想像がつきそうに思いますが…?
    2013年1月23日 22:51
  • 佐祐理様

    ご回答ありがとうございます。

    上記質問で No, Name 列が予め作成されており、hNo, hNameを新たに追加した為

    ということでしょうか?


    列名を同じにして(作成済みの列を hNo, hName として、上記質問と同様にLINQにて取得)

    試してみましたが、hNo, hName, hNo, hName の列と予め作成した列に今回の列が追加されました。

    DataGridView.DataSourceにLINQ結果を代入するのは自動的に追加となってしまうようです。

    何か他の方法はございますでしょうか?

    ご教授のほど、よろしくお願いいたします。

    2013年1月23日 23:54
  • 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
    2013年1月24日 0:51
    モデレータ
  • trapemiya様

    ご回答ありがとうございます。

    教えて頂いた通り、各列のDataPropertyNameプロパティにデータソース名の列名を指定することで、

     ・対応する列名(同一の列名)がある場合は、そこに値が代入される

     ・対応する列名がない場合は列が追加される

       (AutoGenerateColumnsプロパティがfalseの場合)

    ことが確認できました。

     

    佐祐理様にご回答を頂いたときには、

    各列のデザインにある(Name)が対応すれば良いと考えていたため出来なかったようです。

    DataPropertyNameの意味合いが分かっておりませんでした。

      

    疑問点が解決しましたので、回答としてマークさせて頂きます。

    trapemiya様、佐祐理様 ありがとうございました。

    • 回答としてマーク kentahoga 2013年1月24日 1:18
    • 編集済み kentahoga 2013年1月24日 1:31
    2013年1月24日 1:17