ASP.NET WebフォームでGridViewの特定列をカラム名で非表示にする

概要

ASP.NETのWebフォームの表(GridView)でデータを持っているけれど表示はしたくない列(Column)が存在する場合、RowCreatedイベントでCellsに列番号を指定しますが、カラム名では指定できません。そのため、ひと手間加えてカラム名で非表示にする方法を解説します。

前提環境
  • Windows 10
  • Visual Studio Professional 2019
  • .NET Framework 4.2
  • C#

コードのポイント

  • DataTable.Columns.IndexOfメソッドを用いて該当カラム名の列番号を事前に取得しておきます。
  • GridViewの「AutoGenerateEditButton」プロパティで生成される「編集」や「選択」「削除」などのボタン(リンク)のためのCellがRowデータの最初にあります。そのため、IndexOfで調べた値+1が実際の列番号になります。

サンプルコード

C#

// GridViewで非表示にするセルのindexの配列
を持つprivate変数を用意しておく。
private List<int> hiddenCellList = new List<int>(); 

// GridViewにDataBindするDataTableから列番号を取得するための処理をPage_Loadなどから呼び出す。
private void SetHiddenCellList(DataTable table)
{
    hiddenCellList.Add(table.Columns.IndexOf("隠したい列の列名その1"));
    hiddenCellList.Add(table.Columns.IndexOf("隠したい列の列名その2"));
}

// GridViewの行作成時のRowCreatedイベント。事前に調べておいた列番号を非表示にする。
protected void gridView_RowCreated(object sender, GridViewRowEventArgs e)
{
    If(e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Header)
    {
        foreach(int i in hiddenCellList)
        {
            e.Row.Cells[i].Visible = false;
        }
    }
}