Przeciąganie i upuszczanie za pomocą kontrolki ReorderList (C#)
Autor: Christian Wenz
Kontrolka ReorderList w zestawie narzędzi AJAX Control Toolkit udostępnia listę, którą można zmienić kolejność przez użytkownika za pomocą przeciągania i upuszczania. Bieżąca kolejność listy jest utrwalana na serwerze.
Omówienie
Kontrolka ReorderList
w zestawie narzędzi AJAX Control Toolkit udostępnia listę, którą można zmienić kolejność przez użytkownika za pomocą przeciągania i upuszczania. Bieżąca kolejność listy jest utrwalana na serwerze.
Kroki
Kontrolka ReorderList
obsługuje powiązanie danych z bazy danych do listy. Najlepiej jest również zapisywać zmiany w kolejności elementu listy z powrotem do magazynu danych.
W tym przykładzie użyto usługi Microsoft SQL Server 2005 Express Edition jako magazynu danych. Baza danych jest opcjonalną (i bezpłatną) częścią instalacji programu Visual Studio, w tym wersji express. Jest on również dostępny jako oddzielny plik do pobrania w obszarze https://go.microsoft.com/fwlink/?LinkId=64064. W tym przykładzie przyjęto założenie, że wystąpienie SQL Server 2005 Express Edition jest wywoływane SQLEXPRESS
i znajduje się na tej samej maszynie co serwer internetowy. Jest to również domyślna konfiguracja. Jeśli konfiguracja się różni, musisz dostosować informacje o połączeniu dla bazy danych.
Najprostszym sposobem skonfigurowania bazy danych jest użycie usługi Microsoft SQL Server Management Studio Express (https://www.microsoft.com/downloads/details.aspx?FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796& DisplayLang=en ). Połącz się z serwerem, kliknij dwukrotnie i utwórz nową bazę danych (kliknij prawym przyciskiem myszy Databases
i wybierz polecenie New Database
) o nazwie Tutorials
.
W tej bazie danych utwórz nową tabelę o nazwie AJAX
z następującymi czterema kolumnami:
id
(klucz podstawowy, liczba całkowita, tożsamość, nie null)char
(char(1), NULL)description
(varchar(50), NULL)position
(int, NULL)
Układ tabeli AJAX (kliknij, aby wyświetlić obraz pełnowymiarowy)
Następnie wypełnij tabelę kilkoma wartościami. Należy pamiętać, że kolumna position
przechowuje kolejność sortowania elementów.
Początkowe dane w tabeli AJAX (kliknij, aby wyświetlić obraz pełnowymiarowy)
Następny krok wymaga wygenerowania SqlDataSource
kontrolki w celu komunikowania się z nową bazą danych i jej tabelą. Źródło danych musi obsługiwać SELECT
polecenia i UPDATE
SQL. Gdy kolejność elementów listy zostanie później zmieniona, ReorderList
kontrolka automatycznie przesyła dwie wartości do polecenia źródła Update
danych: nowe położenie i identyfikator elementu. W związku z tym źródło danych wymaga <UpdateParameters>
sekcji dla tych dwóch wartości:
<asp:SqlDataSource ID="sds" runat="server" ConnectionString="Data
Source=(local)\SQLEXPRESS;Initial Catalog=Tutorials;Integrated Security=True"
ProviderName="System.Data.SqlClient" OldValuesParameterFormatString="original_{0}"
SelectCommand="SELECT [id], [char], [description], [position] FROM [AJAX] ORDER BY [position]"
UpdateCommand="UPDATE [AJAX] SET position=@position WHERE [id]=@original_id">
<UpdateParameters>
<asp:Parameter Name="position" Type="Int32" />
<asp:Parameter Name="original_id" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
Kontrolka ReorderList
musi ustawić następujące atrybuty:
AllowReorder
: czy elementy listy mogą być zmienianeDataSourceID
: identyfikator źródła danychDataKeyField
: nazwa kolumny klucza podstawowego w źródle danychSortOrderField
: Kolumna źródła danych, która udostępnia kolejność sortowania elementów listy
W sekcjach <DragHandleTemplate>
i <ItemTemplate>
układ listy można dostosować. Ponadto łączenie danych jest możliwe przy użyciu Eval()
metody , jak pokazano tutaj:
<ajaxToolkit:ReorderList ID="rl1" runat="server" SortOrderField="position"
AllowReorder="true" DataSourceID="sds" DataKeyField="id">
<DragHandleTemplate>
<div class="DragHandleClass">
</div>
</DragHandleTemplate>
<ItemTemplate>
<asp:Label ID="ItemLabel" runat="server" Text='<%#Eval("description") %>' />
</ItemTemplate>
</ajaxToolkit:ReorderList>
Następujące informacje o stylu CSS (przywoływne w <DragHandleTemplate>
sekcji ReorderList
kontrolki) zapewniają, że wskaźnik myszy zmienia się odpowiednio po umieszczeniu kursora na uchwytie przeciągania:
<style type="text/css">
.DragHandleClass
{
width: 12px;
height: 12px;
background-color: red;
cursor:move;
}
</style>
Na koniec kontrolka inicjuje ScriptManager
ASP.NET AJAX dla strony:
<asp:ScriptManager ID="asm" runat="server" />
Uruchom ten przykład w przeglądarce i zmień kolejność elementów listy nieco. Następnie załaduj ponownie stronę i/lub przyjrzyj się bazie danych. Zmienione pozycje zostały zachowane i są również odzwierciedlane przez wartości w kolumnie w position
bazie danych i że wszystkie bez żadnego kodu, tylko przy użyciu znaczników.
Dane w bazie danych zmieniają się zgodnie z nową kolejnością elementów listy (kliknij, aby wyświetlić obraz pełnowymiarowy)