DataGridView のカラムを非表示にする方法
「DataGridView へのデータの読込み」では、データベースからデータを DataTable に読み込み、 それを DataGridView の DataSource に設定することで、グリッドにデータを表示しました。
グリッドにデータを読み込んだ様子は次のようになりました。
しかし、これはデータベースの内容をそのまま表示しているだけです。必ずしも全ての情報を表示したいとは限りません。
グリッドに表示したくないなら、そもそもデータを取得しなければ良いです。 つまり、データベースへ問い合わせる時に、SELECT で必要なデータのみを取得すれば良いです。
無駄なデータのやりとりを行わない、というのはパフォーマンスチューニングの基本でもあります。
ところが中には、見たくないけど取得しておきたいデータもあります。
例えば、上記の画面で EmployeeID などは、システム内で使われているキーであって、 ユーザーはみたくないかもしれません。しかし、キーとなるデータは、 レコードを更新するとか、さらなる情報を取得する等する場合に必要となる情報なので、グリッド内に保持しておきたいところです。
こういう場合は、カラムを指定して明示的に非表示にすることもできます。
次のようにデータソースを DataGridView にバインドした後に、カラムを指定してカラムのVisible プロパティを false にすることで、表には表示されないようになります。
... dataGridView1.DataSource = dt; dataGridView1.Columns["EmployeeID"].Visible = false; ...
この結果、次のように最初のカラムが非表示になっていますね。
ちゃんと裏側でデータが保持されているか確認してみましょう。
セルをダブルクリックした時に発生する、CellDoubleClick イベントのイベントハンドラを設定します。
この状況で Visual Studio 内でデバッグを開始して、セルをクリックします。
すると、このように確かに DataGridView に EmployeeID という名前のカラムが存在していて、その値が取得できることがわかります。
ちなみに、CellDoubleClick イベントのイベントハンドラには、 DataGridVIewCellEventArgs オブジェクトが渡され、そこからイベントが発生した行のインデックスが取得できます。
グリッド上でソートするなどすると、バインドしたデータテーブル内の行インデックスとグリッド上の行インデックスがズレますので、 DataGridView のセルからデータを取得すると安全です。