SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

使ってみようASP.NET AJAX Control Toolkit

使ってみようASP.NET AJAX Control Toolkit(入力補助コントロール編)

ASP.NET AJAX Control Toolkitの利用方法を学習する 前編


ReorderList・SliderExtender

ReorderListコントロール

 ReorderListコントロールはリスト内の要素がドラッグ&ドロップによって整理し直すことが可能なリストコントロールで、ドラッグによりリスト内の位置を変更し、ドロップをされた段階でデータソースを更新するという特徴があります。ReorderListはポストバックを利用するかコールバックを利用することで、リストの再整理を行うことができます。

 コールバックを利用して再整理を行う場合、ポストバックは起こりません。データのみの整理であるならば役立ちます。もし、データ項目の追加、編集、削除が必要ならクライアントサイドとサーバサイドのデータを同期させるためにポストバックを起こす必要があります。

 必要に応じて必要なテンプレート、必要な整理方法を選択する必要があるコントロールです。また、ReorderListコントロールはプロパティ設定の他に6種類のテンプレートの設定も必要になります(すべてが必須ではありません)。

表5
プロパティ名概要
PostBackOnReorder再整理がポストバックかコールバックを開始するかを設定。編集やデータに結びついたリストの機能を削除するためにポストバックはenabledに設定する必要あり
DataSourceIDReorderListコントロールで使用するDataSourceIDを設定
DragHandleAlignmentユーザーがリスト内の項目をドラッグするためのドラッグハンドルの表示位置を設定
ItemInsertLocation新しいアイテムがリストに追加された時、BeginningかEndであるか設定
DataKeyFieldデータのための第一キーフィールドを設定
SortOrderFieldアイテムのソート順を表すフィールドを設定
ItemTemplateリストアイテムのために表示するテンプレート
EditItemTemplate編集モードにある列のために表示するテンプレート
ReorderTemplateアイテムをドラッグしている時に表示するテンプレート
InsertItemTemplate新しいアイテムをリストに加えるために表示するテンプレート
DragHandleTemplateユーザーがアイテムを再整理するためにドラッグするドラッグハンドルのテンプレート
EmptyListTemplateリストにデータがない時に表示するテンプレート

 ReorderListコントロールは今回ご紹介するコントロールの中では利用する上で難易度が高いコントロールです。他のコントロールに比べて書くコードの量が増えてしまうことはご理解ください。なお、サンプルファイルを読むと理解が深まると思いますので、ぜひ参照ください。

 ここではSQL Serverとデータセットを利用してリストを表示し、データアクセスコンポーネントを拡張することで再整理、行の追加を行う方法を紹介します(ダウンロードサンプルのファイルは「/ReorderList/ReorderList.aspx」です)。最初はdefault.aspxの一部です。

default.aspx(一部)
<ajaxToolkit:ReorderList 
    ID="ReorderList1" 
    runat="server"
    DataKeyField="ViewID" 
    DataSourceID="ObjectDataSource1"
    SortOrderField="ReorderID" 
    AllowReorder="True" 
    PostBackOnReorder="False" >
  <ItemTemplate>
    <div class="ItemBlock">
      <asp:Label ID="Label1" runat="server" 
          Text=
          '<%# HttpUtility.HtmlEncode(Convert.ToString(Eval(
                                                  "Chores"))) %>' >
      </asp:Label>
      <asp:Label ID="Label2" runat="server" 
          Text=
          '<%# HttpUtility.HtmlEncode(Convert.ToString(Eval(
                                       "Progress", " - {0}"))) %>' >
      </asp:Label>
    </div>
  </ItemTemplate>
  <ReorderTemplate>
    <asp:Panel ID="Panel2" runat="server" CssClass="reorderList" />
  </ReorderTemplate>
  <DragHandleTemplate>
    <div class="dragHandle"></div>
  </DragHandleTemplate>
  <InsertItemTemplate>
    <div class="InsertBlock">
      <asp:TextBox ID="TextBox1" Text='<%# Bind("Chores") %>'  
          runat="server" ValidationGroup="add">
      </asp:TextBox>
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
          runat="server" ValidationGroup="add"
          ErrorMessage="家事項目を入力してください" 
          ControlToValidate="TextBox1" />
      <br />
      <asp:TextBox ID="TextBox2" Text='<%# Bind("Progress") %>'  
          runat="server" ValidationGroup="add">
      </asp:TextBox>
      <asp:RequiredFieldValidator ID="RequiredFieldValidator2" 
          runat="server" ValidationGroup="add"
          ErrorMessage="進捗を入力してください" 
          ControlToValidate="TextBox2" />
      <asp:Button ID="Button1" runat="server" Text="追加" 
          CommandName="Insert" ValidationGroup="add" />
    </div>
  </InsertItemTemplate>
</ajaxToolkit:ReorderList>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
    DeleteMethod="Delete"
    InsertMethod="insertNewRow" 
    OldValuesParameterFormatString="original_{0}" 
    SelectMethod="GetData"
    TypeName="ChoresTableAdapters.TodoTableTableAdapter" 
    UpdateMethod="updatePriority">
  <DeleteParameters>
    <asp:Parameter Name="Original_ViewID" Type="String" />
  </DeleteParameters>
  <UpdateParameters>
    <asp:Parameter Name="Chores" Type="String" />
    <asp:Parameter Name="Progress" Type="String" />
    <asp:Parameter Name="reorderID" Type="Int32" />
    <asp:Parameter Name="Original_ViewID" Type="Int32" />
  </UpdateParameters>
  <InsertParameters>
    <asp:Parameter Name="Chores" Type="String" />
    <asp:Parameter Name="Progress" Type="String" />
    <asp:Parameter Name="reorderID" Type="Int32" />
  </InsertParameters>
</asp:ObjectDataSource>

 続いてデータアクセスコンポーネントの拡張です。

Chores.vb
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Imports System.ComponentModel

Namespace ChoresTableAdapters

  Partial Public Class TodoTableTableAdapter

    <DataObjectMethod(DataObjectMethodType.Update)> _
        Public Sub updatePriority(ByVal chores As String, _
                                  ByVal progress As String, _
                                  ByVal reorderID As Int32, _
                                  ByVal Original_ViewID As Int32)
    '必要な処理を記述
    End Sub

   'TextBoxコントロールに入力された値をchores,progressとして
   '新しい行を作成しTodoTableに追加する
   <DataObjectMethod(DataObjectMethodType.Insert)> _
       Public Sub insertNewRow(ByVal chores As String, _
                               ByVal progress As String, _
                               ByVal reorderID As Int32)

         Dim todoTA As New ChoresTableAdapters.TodoTableTableAdapter
         Dim TodoDS As New Chores

         todoTA.Fill(TodoDS.TodoTable)

         Dim dr As DataRow = TodoDS.Tables("TodoTable").NewRow

         dr("chores") = chores
         dr("progress") = progress
         dr("reorderID") = reorderID

         TodoDS.Tables("TodoTable").Rows.Add(dr)

         todoTA.Update(TodoDS)

      End Sub

  End Class

End Namespace

 サンプルを実行すると図6~10のようになります。

図6 ReorderListコントロールの実行結果
図6 ReorderListコントロールの実行結果
図7 Itemのドラッグ時
図7 Itemのドラッグ時
図8 Itemのドロップ時
図8 Itemのドロップ時
図9 新たな行の追加
図9 新たな行の追加
図10 追加ボタンクリック時
図10 追加ボタンクリック時

 今回は使用していませんが、ReorderListは他にもEditItemTempleteやEmptyListTemplateがありますので、記事を参考にして触れてみてください。

SliderExtenderコントロール

 SliderExtenderコントロールはTextBoxコントロールをスクロールバー型のスライダーに変えるエクステンダコントロールで、マウスカーソルを利用してスライダーの機能を利用することが可能になります。デフォルトでMinimumが0、Maximumが100、Stepsが1に設定されています。

表6
プロパティ名概要
Minimumスライダーの最小の値を設定
Maximumスライダーの最大の値を設定
Decimals小数点以下の桁数を設定
Stepsどの単位でスライドするかの値を設定
EnableHandleAnimationスライドをアニメーションを使って移動させるかどうか設定
RailCSSClassスライドのレールのCSSクラスを設定
HandleCSSClassスライドのハンドルのCSSクラスを設定
HandleImageURLスライドのハンドルのImageURLの設定
Lengthスライドの長さを設定
BoundControlIDダイナミックにスライドの値を表示するボタンかラベルを設定
TargetControlIDスライダーに拡張させる「TextBoxコントロール」のIDを設定

 スライダーの初期値を100に、最小値を-100、最大値を100と設定し、Labelコントロールにスライダーの値を表示させるには次のように設定することで実現できます。

default.aspx(一部)
<asp:TextBox ID="TextBox1" runat="server" text="100"></asp:TextBox>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
<ajaxToolkit:SliderExtender 
    ID="SliderExtender1" 
    runat="server" 
    BehaviorID="TextBox1" 
    TargetControlID="TextBox1" 
    Minimum="-100" 
    Maximum="100" 
    BoundControlID="Label1" 
    Steps="100" />

 サンプルを実行すると図11~12のようになります(ダウンロードサンプルのファイルは「/SliderExtender/SliderExtender.aspx」です)。

図11 SliderExtenderコントロールの実行結果
図11 SliderExtenderコントロールの実行結果
図12 SliderExtenderコントロールの動作結果
図12 SliderExtenderコントロールの動作結果

次のページ
ListSearchExtender・CascadingDropDown

修正履歴

この記事は参考になりましたか?

使ってみようASP.NET AJAX Control Toolkit連載記事一覧
この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト ナオキ(ナオキ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1249 2007/05/21 15:22

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー