多くの中からユーザー アカウントを 1 つ選択するインターフェイスを構築する (C#)

作成者: Scott Mitchell

このチュートリアルでは、ページングされたフィルター処理可能なグリッドを使ってユーザー インターフェイスを構築します。 具体的には、そのユーザー インターフェイスを構成するのは一連の LinkButton (ユーザー名の先頭文字に基づいて結果をフィルタリングするため) と 1 つの GridView コントロール (一致するユーザーを表示するため) です。 まず、GridView ですべてのユーザー アカウントを一覧表示します。 その後、手順 3 で、フィルター用 LinkButton を追加します。 手順 4 では、フィルター処理された結果のページングについて説明します。 手順 2 から 4 で作成したインターフェイスは、後続のチュートリアルで、特定のユーザー アカウントについて管理タスクを実行するために使います。

はじめに

ユーザーにロールを割り当てる」チュートリアルでは、管理者がユーザーを選択してそのロールを管理するための、基本的なインターフェイスを作成しました。 具体的には、そのインターフェイスでは、管理者に、すべてのユーザーを示すドロップダウン リストが表示されました。 このようなインターフェイスは、ユーザー アカウント数が十数個である場合は適していますが、アカウント数が数百や数千になるサイトの場合は適していません。 ページングされたフィルタリング可能なグリッドは、ユーザー基盤が大きい Web サイトの場合に適したユーザー インターフェイスです。

このチュートリアルでは、このようなユーザー インターフェイスを構築します。 具体的には、そのユーザー インターフェイスを構成するのは一連の LinkButton (ユーザー名の先頭文字に基づいて結果をフィルタリングするため) と 1 つの GridView コントロール (一致するユーザーを表示するため) です。 まず、GridView ですべてのユーザー アカウントを一覧表示します。 その後、手順 3 で、フィルター用 LinkButton を追加します。 手順 4 では、フィルター処理された結果のページングについて説明します。 手順 2 から 4 で作成したインターフェイスは、後続のチュートリアルで、特定のユーザー アカウントについて管理タスクを実行するために使います。

それでは始めましょう。

手順 1: 新しい ASP.NET ページを追加する

このチュートリアルと以降の 2 つでは、管理関連のさまざまな機能について説明します。 これらのチュートリアル全体で説明したトピックを実装するには、一連の ASP.NET ページが必要です。 これらのページを作成し、サイト マップを更新してみましょう。

まず、プロジェクトに Administration という名前の新しいフォルダーを作成します。 次に、そのフォルダーに 2 つの新しい ASP.NET ページを追加し、各ページを Site.master マスター ページにリンクします。 それらのページには次の名前を付けます:

  • ManageUsers.aspx
  • UserInformation.aspx

また、Web サイトのルート ディレクトリに、ChangePassword.aspxRecoverPassword.aspx という 2 つのページを追加します。

この時点では、これら 4 つのページには、マスター ページの ContentPlaceHolder ごとに 1 つずつで、MainContentLoginContent という 2 つの Content コントロールがあります。

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="LoginContent" Runat="Server">
</asp:Content>

これらのページでは、LoginContent ContentPlaceHolder についてはマスター ページの既定のマークアップを表示したいと考えています。 そのため、Content2 Content コントロールの宣言型マークアップを削除します。 その実行後は、これらのページのマークアップに、Content コントロールが 1 つのみ含まれています。

Administration フォルダー内の ASP.NET ページは、管理ユーザーのみを対象としています。 「ロールを作成し、管理する」チュートリアルでシステムに Administrators ロールを追加しました。これら 2 つのページへのアクセスを、このロールのみに限定します。 これを実現するには、Administration フォルダーに Web.config ファイルを追加し、その <authorization> 要素を、Administrators ロールがあるユーザーを許可し他のすべてのユーザーを拒否するように構成します。

<?xml version="1.0"?>
<configuration>
 <system.web>
 <authorization>
 <allow roles="Administrators" />
 <deny users="*"/>
 </authorization>
 </system.web>
</configuration>

この時点では、プロジェクトのソリューション エクスプローラーは、図 1 に示すスクリーンショットのようになります。

Four New Pages and a Web.config File Have Been Added to the Website

図 1: 4 つの新しいページと Web.config ファイルが Web サイトに追加された (選択するとフルサイズの画像が表示されます)

最後に、サイト マップ (Web.sitemap) を更新して ManageUsers.aspx ページへのエントリを含めます。 ロールに関するチュートリアル用に追加した <siteMapNode> の後に、次の XML を追加します。

<siteMapNode title="User Administration" url="~/Administration/ManageUsers.aspx"/>

サイト マップを更新したら、ブラウザーでサイトにアクセスします。 図 2 に示すように、左側のナビゲーションに、管理に関するチュートリアル用の項目が含まれるようになりました。

The Site Map Includes a Node Titled User Administration

図 2: サイト マップに [User Administration] というタイトルのノードが含まれている (選択するとフルサイズの画像が表示されます)

手順 2: GridView ですべてのユーザー アカウントを一覧表示する

このチュートリアルの最終目標は、管理するユーザー アカウントを管理者が選択できる、ページングされたフィルタリング可能なグリッドを作成することです。 まず、GridView ですべてのユーザーを一覧表示しましょう。 これが完了したら、フィルタリングとページングのインターフェイスおよび機能を追加します。

Administration フォルダーの ManageUsers.aspx ページを開き、GridView を追加し、その IDUserAccounts に設定します。 ここでは、Membership クラスの GetAllUsers メソッドを使用して、ユーザー アカウントのセットを GridView にバインドするコードを記述します。 前のチュートリアルで説明したように、GetAllUsers メソッドでは、MembershipUser オブジェクトのコレクションである MembershipUserCollection オブジェクトが返されます。 このコレクション内の各 MembershipUser には、UserNameEmailIsApproved などのプロパティが含まれています。

GridView で望ましいユーザー アカウント情報を表示するために、GridView の AutoGenerateColumns プロパティを False に設定し、UserNameEmailComment プロパティの BoundField と、IsApprovedIsLockedOutIsOnline の CheckBoxField を追加します。 この構成は、コントロールの宣言型マークアップで、または [フィールド] ダイアログ ボックスを使って適用できます。 図 3 に、[自動生成フィールド] チェック ボックスの選択が解除され、BoundField と CheckBoxField が追加され構成された後の [フィールド] ダイアログ ボックスのスクリーン ショットを示します。

Add Three BoundFields and Three CheckBoxFields to the GridView

図 3: GridView に 3 つの BoundField と 3 つの CheckBoxField を追加する (選択するとフルサイズの画像が表示されます)

GridView を構成した後は、その宣言型マークアップが次のようになっていることを確認します:

<asp:GridView ID="UserAccounts" runat="server" AutoGenerateColumns="False">
 <Columns>
 <asp:BoundField DataField="UserName" HeaderText="UserName"/>
 <asp:BoundField DataField="Email" HeaderText="Email" />
 <asp:CheckBoxField DataField="IsApproved" HeaderText="Approved?"/>
 <asp:CheckBoxField DataField="IsLockedOut" HeaderText="Locked Out?" />
 <asp:CheckBoxField DataField="IsOnline" HeaderText="Online?"/>
 <asp:BoundField DataField="Comment" HeaderText="Comment"/>
 </Columns>
</asp:GridView>

次は、ユーザー アカウントを GridView にバインドするコードを記述する必要があります。 このタスクを実行する、BindUserAccounts という名前のメソッドを作成します。その後、このページに最初にアクセスしたときに Page_Load イベント ハンドラーからそれを呼び出します。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    BindUserAccounts();
}

private void BindUserAccounts()
{
    UserAccounts.DataSource = Membership.GetAllUsers();
    UserAccounts.DataBind();
}

ブラウザーでこのページをテストします。 図 4 に示すように、UserAccounts GridView では、システム内のすべてのユーザーについて、ユーザー名、メール アドレス、関連のあるその他のアカウント情報が一覧表示されます。

The User Accounts are Listed in the GridView

図 4: GridView にユーザー アカウントが一覧表示される (選択するとフルサイズの画像が表示されます)

手順 3: ユーザー名の先頭文字で結果をフィルタリングする

現在、UserAccounts GridView では、すべてのユーザー アカウントが表示されています。 ユーザー アカウント数が数百や数千になる Web サイトの場合は、表示されるアカウントをユーザーがすばやく減らせることが不可欠です。 ページにフィルタリング用 LinkButton を追加すると、これを実現できます。 ページに 27 個の LinkButton を追加しましょう ([All] (すべて) というタイトルで 1 つ、アルファベットの文字ごとに 1 つの LinkButton)。 訪問者が [All] LinkButton を選択すると、GridView ですべてのユーザーが表示されます。 特定の文字を選択すると、選択した文字がユーザー名の先頭にあるユーザーのみが表示されます。

最初のタスクは、27 個の LinkButton コントロールの追加です。 選択肢の 1 つは、27 個の LinkButton を宣言によって一度に 1 つずつ作成する方法です。 より適応性があるのは、Repeater コントロールと ItemTemplate を使う方法であり、LinkButton をレンダリングしてからそのフィルタリング オプションを string 配列として Repeater にバインドします。

まず、このページの UserAccounts GridView の上に Repeater コントロールを追加します。 Repeater の ID プロパティを FilteringUI に設定します。 Repeater のテンプレートを構成して、その ItemTemplateText および CommandName プロパティが現在の配列要素にバインドされている LinkButton をレンダリングするようにします。 「ユーザーにロールを割り当てる」チュートリアルで説明したように、これは、Container.DataItem データ バインド構文を使うと実現できます。 Repeater の SeparatorTemplate を使って各リンクの間に縦線を表示します。

<asp:Repeater ID="FilteringUI" runat="server">
 <ItemTemplate>
 <asp:LinkButton runat="server" ID="lnkFilter"
 Text='<%# Container.DataItem %>'
 CommandName='<%# Container.DataItem %>'></asp:LinkButton>
 </ItemTemplate>
 <SeparatorTemplate>|</SeparatorTemplate>
</asp:Repeater>

希望するフィルタリング オプションをこの Repeater に事前設定するために、BindFilteringUI という名前のメソッドを作成します。 必ず、このページが最初に読み込まれたときに Page_Load イベント ハンドラーからこのメソッドを呼び出してください。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        BindUserAccounts();
        BindFilteringUI();
    }
}

private void BindFilteringUI()
{
    string[] filterOptions = { "All", "A", "B", "C","D", "E", "F", "G", "H", "I","J", "K", "L", "M", "N", "O","P", "Q", "R", "S", "T", "U","V", "W", "X", "Y", "Z" };
    FilteringUI.DataSource = filterOptions;
    FilteringUI.DataBind();
}

このメソッドは、フィルター オプションを string 配列 filterOptions の要素として指定します。 配列内の各要素について、Repeater は、配列要素の値に割り当てられた Text および CommandName プロパティを持つ LinkButton をレンダリングします。

図 5 に、ブラウザーで表示したときの ManageUsers.aspx ページを示します。

The Repeater Lists 27 Filtering LinkButtons

図 5: Repeater で 27 個のフィルタリング用 LinkButton が一覧表示される (選択するとフルサイズの画像が表示されます)

Note

ユーザー名はどの文字で始まる可能性もあり、数字や句読点などである場合があります。 これらのアカウントを表示するには、管理者が [All] (すべて) LinkButton オプションを使う必要があります。 または、先頭が数字のユーザー アカウントをすべて返す LinkButton を追加することもできます。 これは、読者のための演習として残しておきます。

フィルタリング用 LinkButton のどれかを選択するとポストバックが発生し、Repeater の ItemCommand イベントが発生します。しかし、結果をフィルター処理するコードをまだ記述していないため、グリッドに変化はありません。 Membership クラスには、指定された検索パターンにユーザー名が一致するユーザー アカウントを返す FindUsersByName メソッドが含まれています。 このメソッドを使って選択されたフィルター処理 LinkButton の CommandName で指定された文字がユーザー名の先頭にあるユーザー アカウントのみを取得できます。

まず、ManageUser.aspx ページの分離コード クラスを更新して、UsernameToMatch という名前のプロパティが含まれるようにします。 このプロパティは、ポストバック間でユーザー名フィルター文字列を保持します。

private string UsernameToMatch
{
 get
 {
 object o = ViewState["UsernameToMatch"];
 if (o == null)
 return string.Empty;
 else
 return (string)o;
 }
 set
 {
 ViewState["UsernameToMatch"] = value;
 }
}

UsernameToMatch プロパティは、キー UsernameToMatch を使って ViewState コレクションに割り当てられたその値を格納します。 このプロパティの値を読み取るときは、ViewState コレクション内に値が存在するかどうかが確認されます。存在しない場合は、既定値である空の文字列が返されます。 UsernameToMatch プロパティには共通のパターンがあります。つまり、このプロパティに対する変更がポストバックをまたいで保持されるように、値をビュー状態に保持します。 このパターンについて詳しくは、ASP.NET のビュー状態の理解に関するページをご覧ください。

次に、BindUserAccounts メソッドを更新して、Membership.GetAllUsers を呼び出す代わりに Membership.FindUsersByName を呼び出して UsernameToMatch プロパティの値を SQL ワイルドカード文字 % を付加して渡すようにします。

private void BindUserAccounts()
{
    UserAccounts.DataSource = Membership.FindUsersByName(this.UsernameToMatch + "%");
    UserAccounts.DataBind();
}

ユーザー名が文字 A で始まるユーザーのみを表示するには、UsernameToMatch プロパティを A に設定して BindUserAccounts を呼び出します。 これにより、Membership.FindUsersByName("A%") が呼び出され、ユーザー名が A で始まるすべてのユーザーが返されます。同様に、すべてのユーザーが返されるようにするには、UsernameToMatch プロパティに空の文字列を割り当てて、BindUserAccounts メソッドが Membership.FindUsersByName("%") を呼び出すようにすると、すべてのユーザー アカウントが返されます。

Repeater の ItemCommand イベントのイベント ハンドラーを作成します。 このイベントは、フィルター用 LinkButton のどれかがクリックされるたびに発生します。クリックされた LinkButton の CommandName 値が RepeaterCommandEventArgs オブジェクトを介して渡されます。 適切な値を UsernameToMatch プロパティに割り当ててから BindUserAccounts メソッドを呼び出す必要があります。 CommandName が All の場合は、すべてのユーザー アカウントが表示されるように、空の文字列を UsernameToMatch に割り当てます。 それ以外の場合は、CommandName の値を UsernameToMatch に割り当てます。

protected void FilteringUI_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "All")
        this.UsernameToMatch = string.Empty;
    else
        this.UsernameToMatch e.CommandName;
    BindUserAccounts();
}

このコードを配置したら、フィルタリング機能をテストします。 このページに最初にアクセスしたときは、すべてのユーザー アカウントが表示されます (図 5 を参照)。 [A] LinkButton を選択するとポストバックが発生し、結果がフィルター処理されて、A で始まるユーザー アカウントのみが表示されます。

Use the Filtering LinkButtons to Display those Users Whose Username Starts with a Certain Letter

図 6: フィルタリング用 LinkButton を使ってユーザー名の先頭が特定の文字であるユーザーを表示する (選択するとフルサイズの画像が表示されます)

手順 4: ページングを使うように GridView を更新する

図 5 と図 6 で示した GridView では、FindUsersByName メソッドから返されたすべてのレコードが一覧表示されています。 ユーザー アカウント数が数百や数千になる場合は、すべてのアカウントを表示すると情報過多になる可能性があります ([All] (すべて) LinkButton を選択したときや最初にページにアクセスしたときと同様)。 より扱いやすい量でユーザー アカウントを表示するために、一度に 10 個のユーザー アカウントが表示されるように GridView を構成しましょう。

GridView コントロールには次の 2 種類のページングが用意されています:

  • 既定のページング - 実装は簡単ですが、効率的ではありません。 簡単に言うと、既定のページングの場合は、GridView に、そのデータ ソースからすべてのレコードが返されます。 その後、レコードの該当ページのみが表示されます。
  • カスタム ページング - 実装するにはより多くの作業が必要ですが、既定のページングよりも効率的です。これは、カスタム ページングの場合は、データ ソースから、表示する一連のレコードのみが返されるためです。

既定とカスタム ページングとのパフォーマンス差は、何千ものレコードをページングするときには大きくなる可能性があります。 ユーザー アカウント数が数百や数千になる場合があることを想定してこのインターフェイスを構築しているため、カスタム ページングを使いましょう。

Note

既定とカスタム ページングの違い、およびカスタム ページングの実装に関する課題について詳しくは、「大量のデータを効率的にページングする」をご覧ください。

カスタム ページングを実装するには、まず、GridView で表示する量のレコードのみを取得するためのメカニズムが必要です。 うれしいことに、Membership クラスの FindUsersByName メソッドに、ページ インデックスとページ サイズを指定できそのレコード範囲内にあるユーザー アカウントのみを返すオーバーロードがあります。

具体的に述べると、このオーバーロードには、FindUsersByName(usernameToMatch, pageIndex, pageSize, totalRecords) のようなシグネチャがあります。

pageIndex パラメーターでは、返すユーザー アカウントのページを指定します。pageSize では、ページごとの表示するレコードの数を示します。 totalRecords パラメーターは、ユーザー ストア内のユーザー アカウントの合計数を返す out パラメーターです。

Note

FindUsersByName で返されたデータは、ユーザー名を基準にして並べ替えられます。並べ替え条件はカスタマイズできません。

GridView は、ObjectDataSource コントロールにバインドされている場合のみ、カスタム ページングを利用するように構成できます。 ObjectDataSource コントロールでカスタム ページングを実装する場合は、2 つのメソッドが必要です。1 つは、開始行インデックスおよび表示するレコードの最大数を渡し、その範囲内にある量のレコードのみを返すメソッドであり、もう 1 つは、ページングするレコードの合計数を返すメソッドです。 FindUsersByName オーバーロードは、ページ インデックスとページ サイズを受け取り、out パラメーターを使用してレコードの合計数を返します。 そのため、ここではインターフェイスに不一致があります。

選択肢の 1 つは、インターフェイス (ObjectDataSource に必要) を公開するプロキシ クラスを作成してから、FindUsersByName メソッドを内部的に呼び出す方法です。 もう 1 つの選択肢 (この記事ではこれを使う) は、独自のページング インターフェイスを作成し、GridView の組み込みページング インターフェイスの代わりにそれを使う方法です。

[First] (最初)、[Previous] (前へ)、[Next] (次へ)、[Last] (最後) のページング インターフェイスを作成する

[First] (最初)、[Previous] (前へ)、[Next] (次へ)、[Last] (最後) LinkButton を使ってページング インターフェイスを構築しましょう。 [First] (最初) LinkButton を選択するとデータの最初のページに移動し、[Previous] (前へ) では前のページに戻ります。 同じく、[Next] (次へ) と [Last] (最後) では、それぞれ、次のページと最後のページに移動します。 UserAccounts GridView の下にそれら 4 つの LinkButton コントロールを追加します。

<p>
 <asp:LinkButton ID="lnkFirst" runat="server"> First</asp:LinkButton> |
 <asp:LinkButton ID="lnkPrev" runat="server">  Prev</asp:LinkButton>|
 <asp:LinkButton ID="lnkNext" runat="server">Next  </asp:LinkButton>|
 <asp:LinkButton ID="lnkLast" runat="server">Last  </asp:LinkButton>
</p>

次に、各 LinkButton の Click イベントのイベント ハンドラーを作成します。

図 7 に、Visual Web Developer のデザイン ビューで表示したときのそれら 4 つの LinkButton を示します。

Add First, Previous, Next, and Last LinkButtons Beneath the GridView

図 7: GridView の下に [First] (最初)、[Previous] (前へ)、[Next] (次へ)、[Last] (最後) LinkButton を追加する (選択するとフルサイズの画像が表示されます)

現在のページ インデックスを記録する

ユーザーが最初に ManageUsers.aspx ページにアクセスしたときや、フィルタリング ボタンのどれかを選択したときに、GridView でデータの最初のページが表示されるようにしたいと考えています。 ただし、ユーザーがナビゲーション用 LinkButton のいずれかを選択したときは、ページ インデックスを更新する必要があります。 ページ インデックス、およびページごとの表示するレコードの数を保持するために、このページの分離コード クラスに次の 2 つのプロパティを追加します:

private int PageIndex
{
 get
 {
 object o = ViewState["PageIndex"];
 if (o == null)
 return 0;
 else
 return (int)o;
 }
 set
 {
 ViewState["PageIndex"] = value;
 }
}

private int PageSize
{
 get
 {
 return 10;
 }
}

UsernameToMatch プロパティと同様に、PageIndex プロパティでは、その値がビュー状態に保持されます。 読み取り専用の PageSize プロパティでは、ハードコーディングされた値 10 が返されます。 これについてさらに学習したい読者には、このプロパティを更新して PageIndex と同じパターンを使うようにしてから、このページにアクセスするユーザーがページごとの表示するユーザー アカウントの数を指定できるように ManageUsers.aspx ページを拡張することをお勧めします。

現在のページのレコードのみを取得し、ページ インデックスを更新し、ページング インターフェイスの LinkButton を有効化および無効化する

ページング インターフェイスを用意し、PageIndex および PageSize プロパティを追加したので、適切な FindUsersByName オーバーロードを使うように BindUserAccounts メソッドを更新する準備ができました。 さらに、このメソッドで、表示されているページに応じてページング インターフェイスが有効または無効になるようにする必要があります。 データの最初のページを表示するときは、[First] (最初) および [Previous] (前へ) リンクを無効にする必要があります。最後のページを表示するときは、[Next] (次へ) と [Last] (最後) を無効にする必要があります。

BindUserAccounts メソッドを次のコードで更新します。

private void BindUserAccounts()
{
 int totalRecords;
 UserAccounts.DataSource = Membership.FindUsersByName(this.UsernameToMatch + "%",this.PageIndex, this.PageSize, out totalRecords);
 UserAccounts.DataBind();

 // Enable/disable the paging interface
 bool visitingFirstPage = (this.PageIndex == 0);
 lnkFirst.Enabled = !visitingFirstPage;
 lnkPrev.Enabled = !visitingFirstPage;

 int lastPageIndex = (totalRecords - 1) / this.PageSize;
 bool visitingLastPage = (this.PageIndex >= lastPageIndex);
 lnkNext.Enabled = !visitingLastPage;
 lnkLast.Enabled = !visitingLastPage;
}

ページングされるレコードの合計数は FindUsersByName メソッドの最後のパラメーターで決まることに注目してください。 これは out パラメーターであるため、最初にこの値 (totalRecords) を保持する変数を宣言してから out キーワードを前に付ける必要があります。

指定したユーザー アカウント ページが返されると、表示されているのがデータの最初のページか最後のページかに応じて、それら 4 つの LinkButton が有効または無効になります。

最後の手順では、それら 4 つの LinkButton の Click イベント ハンドラーのコードを記述します。 これらのイベント ハンドラーは、PageIndex プロパティを更新し、BindUserAccounts の呼び出しを介して GridView にデータを再バインドする必要があります。 First、Previous、Next イベント ハンドラーは非常に単純です。 しかし、[Last] (最後) LinkButton の Click イベント ハンドラーはもう少し複雑です。これは、最後のページ インデックスを決めるには、表示されているレコードの数を特定する必要があるためです。

protected void lnkFirst_Click(object sender, EventArgs e)
{
 this.PageIndex = 0;
 BindUserAccounts();
}

protected void lnkPrev_Click(object sender, EventArgs e)
{
 this.PageIndex -= 1;
 BindUserAccounts();
}

protected void lnkNext_Click(object sender, EventArgs e)
{
 this.PageIndex += 1;
 BindUserAccounts();
}

protected void lnkLast_Click(object sender, EventArgs e)
{
 // Determine the total number of records
 int totalRecords;
 Membership.FindUsersByName(this.UsernameToMatch + "%", this.PageIndex,this.PageSize, out totalRecords);
 // Navigate to the last page index
 this.PageIndex = (totalRecords - 1) / this.PageSize;
 BindUserAccounts();
}

図 8 と図 9 に、動作中のカスタム ページング インターフェイスを示します。 図 8 では、ManageUsers.aspx ページでユーザー アカウントすべてのデータの最初のページが表示されています。 アカウント 13 個のうち 10 個のみが表示されることに注目してください。 [Next] (次へ) または [Last] (最後) リンクを選択するとポストバックが発生し、PageIndex が 1 に更新され、ユーザー アカウントの 2 ページ目がグリッドにバインドされます (図 9 を参照)。

The First 10 User Accounts are Displayed

図 8: 先頭 10 個のユーザー アカウントが表示される (選択するとフルサイズの画像が表示されます)

Clicking the Next Link Displays the Second Page of User Accounts

図 9: [Next] (次へ) リンクを選択するとユーザー アカウントの 2 ページ目が表示される (選択するとフルサイズの画像が表示されます)

まとめ

管理者はよくアカウントのリストからユーザーを選択する必要があります。 前のチュートリアルでは、ユーザーが移入されたドロップダウン リストを使って説明しましたが、この方法は、規模が大きい場合には適していません。 このチュートリアルでは、より便利な代替方法である、ページングされた GridView に結果が表示されるフィルタリング可能なインターフェイスについて説明しました。 このユーザー インターフェイスでは、管理者が、1 つのユーザー アカウントを数千個の中からすばやく効率的に見つけて選択できます。

プログラミングに満足!

もっと読む

この記事で説明したトピックの詳細については、次のリソースを参照してください。

作成者について

複数の ASP/ASP.NET 書籍の著者であり、4GuysFromRolla.com の創設者である Scott Mitchell は、1998 年から Microsoft Web テクノロジに取り組んでいます。 Scott は、独立したコンサルタント、トレーナー、ライターとして働いています。 彼の最新の本は サムズは24時間で2.0 ASP.NET 自分自身を教えています。 Scott には、mitchell@4guysfromrolla.com または http://ScottOnWriting.NET のブログを介して連絡できます。

特別な感謝

このチュートリアル シリーズは、多くの役に立つ校閲者によってレビューされました。 このチュートリアルのリード レビュー担当者は、Alicja Maziarz でした。 今後の MSDN の記事を確認することに関心がありますか? もし、そうでしたら、mitchell@4GuysFromRolla.com 宛にメールをお送りください