LoginSignup
1
1

More than 3 years have passed since last update.

GridViewの表示を自分で制御したい

Last updated at Posted at 2020-09-25

GUIを利用せずに自分で制御する方法を記載。

GridViewタグのプロパティは以下を設定

AutoGenerateColumns ⇒ DataBindしたときに、指定したColumn以外は表示しないようにする。
ViewStateMode ⇒表示だけの利用ならdisabledにすると余計な情報を送らなくて済む。

<asp:GridView ID="grd01" runat="server"  AutoGenerateColumns="False">
    (中身は後述)
</asp:GridView> 

asp:GridViewタグ配下の設定

  • 構成は、 asp:GridView > columns > asp:TemplateField の順にする。
  • asp:TemplateFieldタグ配下にHeaderTemplateタグ(ヘッダー行に利用)とItemTemplateタグ(表示モードの表内容)を用意する。

これで1つの列

                <asp:TemplateField>
                    <HeaderTemplate><!-- この中をHTMLで自由に装飾できる --></HeaderTemplate>
                    <ItemTemplate><!-- この中をHTMLで自由に装飾できる --></ItemTemplate>
                </asp:TemplateField>
                :
                必要な列分だけ繰り返す。

asp:TemplateFieldタグ配下の設定

  • HeaderTemplateタグの中には、一般のhtmlタグを利用できる。
  • ItemTemplateタグの中には、一般のhtmlタグとaspのコントロールを設定できる。
  • .cs側で設定したDataBindの値は<%# DataBinder.Eval(Container.DataItem, {列名} ) %>で注入できる。

こんな感じ

                <asp:TemplateField>
                    <HeaderTemplate><div>列01</div></HeaderTemplate>
                    <ItemTemplate>
                        <div>
                            <asp:Label ID="iptCol01" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "col01") %>' />
                        </div>
                    </ItemTemplate>
                </asp:TemplateField>

まとめ(サンプル)

aspx側

    <asp:GridView ID="grd01" runat="server"  AutoGenerateColumns="False" ViewStateMode="Disabled" >

        <Columns>
                <asp:TemplateField>
                    <HeaderTemplate><div>列01</div></HeaderTemplate>
                    <ItemTemplate>
                        <div>
                            <asp:Label ID="iptCol01" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "col01") %>' />
                        </div>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField>
                    <HeaderTemplate><div>列02</div></HeaderTemplate>
                    <ItemTemplate>
                        <div>
                            <asp:Label ID="iptCol02" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "col02") %>' />
                        </div>
                    </ItemTemplate>
                </asp:TemplateField>
         </Columns>
    </asp:GridView>

aspx.cs(C#)側

        //(ここから)実務ではDBから取得したデータをBindするが、サンプルなので、データを自作
        DataTable table = new DataTable();
        table.Columns.Add("col01",typeof(String));
        table.Columns.Add("col02",typeof(String));
        table.Columns.Add("col03",typeof(String));

        DataRow row = table.NewRow();
        row["col01"] = "ID 001";
        row["col02"] = "サンプル太郎";
        row["col03"] = "あいうえお";
        table.Rows.Add(row);

        row = table.NewRow();
        row["col01"] = "ID 002";
        row["col02"] = "サンプル 次郎";
        row["col03"] = "かきくけこ";
        table.Rows.Add(row);
        //(ここまで)実務ではDBから取得したデータをBindするが、サンプルなので、データを自作

        //C#側は、DataGridオブジェクトにデータを設定して、Bindするだけ。
        grd01.DataSource = table;
        grd01.DataBind();
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1