- PR -

AjaxControlToolkit:キー項目が二つあるテーブルでのReorderListの使用法

1
投稿者投稿内容
K
会議室デビュー日: 2008/05/16
投稿数: 6
投稿日時: 2008-06-10 09:47
お世話になります。
ASP.NET2.0(C#) + AjaxControlToolkitで開発をしています。
下記のようなキーが二つあるテーブルにおいて、ReorderListを使用しドラッグ&ドロップでデータのソート順の変更をしたいと思っています。

A_TBL
-------------------------------------------
S_ID [varchar](50) NOT NULL PK
ID [varchar](10) NOT NULL PK
NAME [varchar](50)
SORT_NO [int]
-------------------------------------------

hoge.aspx
-------------------------------------------
<asp:ScriptManager ID="manager" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<ajaxToolkit:ReorderList ID="ReorderList1" runat="server"
AllowReorder="True"
DataSourceID="SqlDataSource1"
PostBackOnReorder="False"
SortOrderField="SORT_NO"
DataKeyField="CATEGORY_ID"
>
<ItemTemplate>
<asp:Label ID="id" runat="server Text='<%#Eval("ID")%>'></asp:Label>
<asp:Label ID="name" runat="server" Text='<%#Eval("NAME")%>'></asp:Label>
</ItemTemplate>
<DragHandleTemplate>

</DragHandleTemplate>
<EmptyListTemplate>
データなし
</EmptyListTemplate>
</ajaxToolkit:ReorderList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT [S_ID][ID], [NAME], [SORT_NO] FROM [A_TBK] ORDER BY [SORT_NO]"
DeleteCommand="DELETE FROM [A_TBL] WHERE [S_ID] = @SID AND [ID] = @ID"
InsertCommand="INSERT INTO [A_TBL] ([S_ID], [ID], [NAME], [SORT_NO]) VALUES (@SID, @ID, @NAME, @SORT_NO)"
UpdateCommand="UPDATE [A_TBL] SET [S_ID] = @SID, [NAME] = @NAME, [SORT_NO] = @SORT_NO WHERE [S_ID] = @SID AND [ID] = @ID"
>
<DeleteParameters>
<asp:SessionParameter Name="SID" SessionField="SessionID" Type="String" />
<asp:Parameter Name="ID" Type="String" />
</DeleteParameters>
<UpdateParameters>
<asp:SessionParameter Name="SID" SessionField="SessionID" Type="String" />
<asp:Parameter Name="NAME" Type="String" />
<asp:Parameter Name="SORT_NO" Type="Int32" />
<asp:Parameter Name="ID" Type="String" />
</UpdateParameters>
<InsertParameters>
<asp:SessionParameter Name="SID" SessionField="SessionID" Type="String" />
<asp:Parameter Name="ID" Type="String" />
<asp:Parameter Name="NAME" Type="String" />
<asp:Parameter Name="SORT_NO" Type="Int32" />
</InsertParameters>
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel>
-------------------------------------------

画面上では正常にドラッグ&ドロップでリストの並び替えができるのですが、ReorderListのSortOrderFieldに指定したデータベースの[SORT_NO]の値が更新されません。
上記のテーブルからキー項目を一つ除去し、同様にReorderListを使用した場合は正常にSORT_NOの値が更新されました。
恐らくDataKeyFieldが片方のキーだけしか指定していないのが原因だと思いますが、そもそもReorderListにおいて複数のDatakeyFieldを指定できるものなのでしょうか。
また、できるとしたらどのように指定すればよろしいのでしょうか。

ご教授の程、お願いいたします。
K
会議室デビュー日: 2008/05/16
投稿数: 6
投稿日時: 2008-06-12 11:00
自己レスです。

A_TBL
-------------------------------------------
S_ID [varchar](50) NOT NULL PK
ID [varchar](10) NOT NULL PK
NAME [varchar](50)
SORT_NO [int]
-------------------------------------------



A_TBL
-------------------------------------------
WK_ID [varchar](60) NOT NULL PK ← S_ID+IDの値を格納
NAME [varchar](50)
SORT_NO [int]
-------------------------------------------

とすることによってPKを一つにすることで対応しました。
現状、上記の対応に方法は無さそう?
今後、GridViewのようにキーを複数指定(DataKeyNames)できるようになってくれればうれしいですね。

引き続き、上記以外の方法での解決方法をご存じの方いらっしゃいましたらご教授の程、お願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)