fc2ブログ

記事一覧

データが無い状態でもListViewでヘッダーを表示する方法 | asp.net


asp.netのListViewにおいて、データが存在しない場合(ページ表示初期状態)においてヘッダーのみを表示する方法をご説明いたします。
まず、標準のListViewを作成したばかりですと、バインドするデータソースが0件のデータである場合、明細のみならずヘッダーまで全てのListViewの表示が消えてしまいます。それを解消するのが、EmptyDataTemplate であり、その設定方法についてご紹介したいと思います。


aspnet_listview_header_01.png

※図の上部がデータが無い場合。下部がデータが存在する場合。
横幅はcssでmin-widthに設定していますので、データの分だけ横に広がっていますが、気になれば、widthのみ設定してヘッダー部も明細部も固定してしまえば良いでしょう。



前提条件
・Windows 7 Professional 以降 / Windows Server 2008 R2 以降
・Visual Studio 2008 Professional 以降
・VB.NET
・.Net Framework 3.5 以降



1.EmptyDataTemplate の使用方法

EmptyDataTemplateとはデータが0件のデータソースをバインドした場合に表示される領域です。通常、LayoutTemplateやItemTemplateの中にテーブルやtr th td を記述して表を作成しますが、LayoutTemplateやItemTemplateはデータが0件の場合には描画されない部分となります。そこで、EmptyDataTemplateにヘッダー部分だけ記述すれば、データが存在しない場合でもヘッダー部のみ表示が可能となります。よって記述は重複しますが、以下のような構成にすれば、ヘッダー部のみ描画が可能です。

<EmptyDataTemplate>
    <table>
        ヘッダー部
    </table>
</EmptyDataTemplate>
<LayoutTemplate>
    <table>
        ヘッダー部
    </table>
</LayoutTemplate>



2.サンプルソース

aspx
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="ListViewTest.aspx.vb" Inherits="ListViewTextChanged.ListViewTest" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>ListViewSample</title>
    <link rel="stylesheet" type="text/css" href="~/Scripts/Style.css" media="all" />
</head>
<body>
<form id="form1" runat="server">
    <div class="table-area">
        <asp:ListView ID="ListView1" runat="server" GroupPlaceholderID="groupPlaceHolder1" ItemPlaceholderID="itemPlaceHolder1">
            <EmptyDataTemplate>
                <table>
                    <tr>
                        <th runat="server" class="id-field">
                            <label>ID</label>
                        </th>
                        <th runat="server" class="name-field">
                            <label>名前</label>
                        </th>
                        <th runat="server" class="age-field">
                            <label>年齢</label>
                        </th>
                        <th runat="server" class="result-field">
                            <label>判定</label>
                        </th>
                    </tr>
                </table>
                <p class="error-text">
                    データが存在しません。
                </p>
            </EmptyDataTemplate>
            <LayoutTemplate>
                <div class="header-area">
                    <table>
                        <tr>
                            <th runat="server" class="id-field">
                                <label>ID</label>
                            </th>
                            <th runat="server" class="name-field">
                                <label>名前</label>
                            </th>
                            <th runat="server" class="age-field">
                                <label>年齢</label>
                            </th>
                            <th runat="server" class="result-field">
                                <label>判定</label>
                            </th>
                        </tr>
                        <asp:PlaceHolder runat="server" ID="groupPlaceHolder1"></asp:PlaceHolder>
                    </table>
                </div>
            </LayoutTemplate>
            <GroupTemplate>
                <div class="data-area">
                    <tr>
                        <asp:PlaceHolder runat="server" ID="itemPlaceHolder1"></asp:PlaceHolder>
                    </tr>
                </div>
            </GroupTemplate>
            <ItemTemplate>
                <tr runat="server">
                    <td runat="server" class="id-field">
                        <asp:Label ID="lblID" runat="server" Text='<%# (Eval("ID")) %>'></asp:Label>
                    </td>
                    <td runat="server" class="name-field">
                        <asp:Label ID="lblName" runat="server" Text='<%# (Eval("NAME")) %>'></asp:Label>
                    </td>
                    <td runat="server" class="age-field">
                        <asp:TextBox ID="txtAge" runat="server" AutoPostBack="True" OnTextChanged="txtAge_TextChanged"></asp:TextBox>
                    </td>
                    <td runat="server" class="result-field">
                        <asp:Label ID="lblResult" runat="server"></asp:Label>
                    </td>
                </tr>
            </ItemTemplate>
        </asp:ListView>
    </div>
</form>
</body>
</html>


VB
Public Class ListViewTest
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim dbUtil As New DbUtility()
        Dim ds As DataSet = Nothing
        Dim sql As New StringBuilder
        sql.AppendLine(" SELECT  ID ")
        sql.AppendLine("        ,Convert(varchar, DecryptByPassPhrase('password', [NAME])) AS NAME ")
        sql.AppendLine("        ,AGE ")
        sql.AppendLine(" FROM T_Customer ")
        sql.AppendLine(" WHERE ID <= 0 ")   'データが0件になるような条件

        dbUtil.Connect()
        dbUtil.ClearParams()
        ds = dbUtil.ExecuteFill(sql.ToString, "CUSTOMER")
        Me.ListView1.DataSource = ds
        Me.ListView1.DataBind()

    End Sub
End Class





最後までお読みいただきありがとうございます。
いかがでしたでしょうか。他にも asp.net に関連する記事を投稿しておりますのでよろしければご参考くださいませ。


関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。