Top > Programming > .NetFramework > WPF > DataGrid > ErrorFromAutoGenerate
Last-modified: Wed, 13 Mar 2013 06:38:47 JST
Counter:4053 Today:1 Yesterday:10 Online:2
このエントリーをはてなブックマークに追加

AutoGenerateColumnsと、その設定ミスによる不具合

About

DataGridのプロパティ"AutoGenerateColumns"は、DataGrid.ItemSourceに与えられた値から、自動的にGridの列(Column)を生成する機能の設定を行うプロパティです。デフォルトの値はTrueとなっています。これは大変便利な機能で、特に難しいことを考えなくても実用的なDataGridコンポーネントが提供できます。

設定ミスによる不具合

一方で次のような場合には困ります。例えばVisualStudioのUIデザイナー、すなわちXAMLの側からColumn(s)を設定している場合、AutoGenerationColumnsが有効のままだと、2重に表示される項目が発生します。一方はXAMLの設定から、もう一方はAutoGenerationColumnsによって生成されたColumnです。よってXAMLから設定する場合にはAutoGenerationColumnsの値をfalseに設定します。

AutoGenerationColumnsが利用できないパターン

AutoGenerationColumnsは大変便利な機能ですが、表示するオブジェクト(インスタンス)のpublicなプロパティを検出して列(Column)を生成するため、非表示にしたいプロパティ値がある場合には利用することができません。自動生成されたのちに、プログラマがソースコードから任意の列を非表示にすることも考えられますが、表示するデータの数や順序の変更があった場合に、任意の列を非表示にするコードを変更する必要が出てきたり、パフォーマンスの観点からも良くありません。

もしもXAMLから設定することが嫌(困難)な場合に、ソースコードからColumnを生成するのであれば、AutoGenerationColumnsはfalseに設定して、任意のDataGridColumnsを生成し、追加するようなコードを書いたほうが、変更に強く柔軟な管理ができるはずです。