locked
Table の Column の一部だけを DataGrid に表示するには? RRS feed

  • 質問

  • http://msdn.microsoft.com/ja-jp/library/ff713719(v=vs.91).aspx

    に示されているようにしますと、SQL Server の Database の Table を Silverlight の Page に表示するだけなら、ものの数分でできてしまうのですが、仮に、Table の一部の Column に限って表示をしたいという場合、どのような修正が必要になるでしょうか。SQL 文で書くとすれば

    select * from Employee order by EmployeeID

    と書いているところを

    select BirthDate,Employee1,Employee2,EmployeeID from Employee order by EmployeeID

    のように書いて、これを DataGrid に反映させたいのです。Windows Application とも違い、ASP.NET WebForm とも違う、ということで DataGrid の一部の Column を非表示にするのは、どうやれば、、、 あるいは、DataSource の方で、不要な Column を除くことができるのでしょうか。

    2010年8月11日 21:45

回答

  • DataGrid の AutoGenerateColumns プロパティを False にして列の自動生成を無効にし、手動で列を追加すれば、一部の列だけ表示できます。なお、手動で列を追加する場合は、どの列にどのプロパティの内容を表示するのか指定してやる必要があります。次のブログ記事を参考にするといいです。

    http://csfun.blog49.fc2.com/blog-entry-48.html

    データベースから列を絞り込んで取得するわけではなく、ただ DataGrid に表示しないだけの方法ですけれど。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答の候補に設定 山本春海 2010年8月25日 5:26
    • 回答としてマーク 山本春海 2010年9月3日 2:24
    2010年8月11日 22:22
  • DataGrid の AutoGenerateColumn プロパティが true のとき、列が自動で追加される直前に AutoGeneratingColumn イベントが発生します。

    例えば、列の数が100個くらいあって、そのうち1~2個除外したい場合、このイベントハンドラ内で除外すればよさそうです。

    http://msdn.microsoft.com/ja-jp/library/system.windows.controls.datagrid.autogeneratecolumns(v=VS.95).aspx

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク 山本春海 2010年9月3日 2:24
    2010年8月12日 1:27

すべての返信

  • DataGrid の AutoGenerateColumns プロパティを False にして列の自動生成を無効にし、手動で列を追加すれば、一部の列だけ表示できます。なお、手動で列を追加する場合は、どの列にどのプロパティの内容を表示するのか指定してやる必要があります。次のブログ記事を参考にするといいです。

    http://csfun.blog49.fc2.com/blog-entry-48.html

    データベースから列を絞り込んで取得するわけではなく、ただ DataGrid に表示しないだけの方法ですけれど。

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答の候補に設定 山本春海 2010年8月25日 5:26
    • 回答としてマーク 山本春海 2010年9月3日 2:24
    2010年8月11日 22:22
  • > どの列にどのプロパティの内容を表示するのか指定してやる必要があります。

    毎度、毎度、ありがとうございます。やっぱりそういう1個、1個の指定作業がですか。Column の数が多く、かつ 表示させたくない Column が1個だけとかいう場合は、嫌な手間になります。しかし、Database の Table の全ての Column を列名も含めてそのまま表示してしまうのは、非現実的です。どちらにしても、1個1個を指定してやる作業が必要ですね。

    2010年8月11日 22:49
  • > 1個1個を指定してやる作業が必要

    でもここまでやるんなら、Entity から1個1個のデ-タを取り出し、自分で画面配置をするのと、手間としては差がなくなってきます。なんとかならないもんですかね、VS2010 は、、、

     

    2010年8月12日 0:45
  • おっと、訂正させていただきます。作業は簡単でした。

    <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn Header="誕生日" Binding="{Binding BirthDate}" />
            <sdk:DataGridTextColumn Header="職歴1" Binding="{Binding Employee1}" />
            <sdk:DataGridTextColumn Header="職歴2" Binding="{Binding Employ2}" />
            <sdk:DataGridTextColumn Header="通し番号" Binding="{Binding EmployeeID}" />
    </sdk:DataGrid.Columns>

    xaml ファイルの中の DataGrid のスコープの中に、この程度の記述でできるというのは、ありがたいことです。列名の付け替えも同時にできますので、ありがたいことこのうえありません。

    2010年8月12日 1:08
  • DataGrid の AutoGenerateColumn プロパティが true のとき、列が自動で追加される直前に AutoGeneratingColumn イベントが発生します。

    例えば、列の数が100個くらいあって、そのうち1~2個除外したい場合、このイベントハンドラ内で除外すればよさそうです。

    http://msdn.microsoft.com/ja-jp/library/system.windows.controls.datagrid.autogeneratecolumns(v=VS.95).aspx

     


    なかむら(http://d.hatena.ne.jp/griefworker)
    • 回答としてマーク 山本春海 2010年9月3日 2:24
    2010年8月12日 1:27