К сожалению, это не делает Web-приложение дружественным к пользователю. В частности, это представляет проблему, если запись состоит из нескольких полей или поля содержат детальную информацию, поскольку в таким случае отредактированные изменения просто отбрасываются, заставляя пользователя начинать все сначала.
Лучшее решение — предоставить пользователю возможность выбора. В идеале страница должна показать текущее значение записи (принимая во внимания все последние изменения) и разрешить пользователю применить исходные отредактированные им значения, либо отменить обновление, либо внести дополнительные уточнения и затем подтвердить обновление. На самом деле достаточно легко построить страницу, которая реализует все эти возможности.
Во-первых, начните с DetailsView, который позволяет пользователю редактировать индивидуальные записи из таблицы Shippers базы данных Northwind. (Эту таблицу достаточно легко использовать в стратегии "сравнить все", потому что в ней всего три поля. Более крупные таблицы лучше работают с эквивалентным подходом на основе временных меток.)
Вот сокращенное определение DetailsView, который вам понадобится:
<asp:DetailsView ID="detailsEditing1" runat="server"
DataKeyNames="ShipperID" AllowPaging="True" AutoGenerateRows="False"
DataSourceID="sourceShippers" OnItemUpdated="DetailsView1_ItemUpdated" ...>
<Fields>
<asp:BoundField DataField="ShipperID" ReadOnly="True" />
<asp:BoundField DataField="CompanyName" />
<asp:BoundField DataField="Phone" />
<asp:CommandField ShowEditButton="True" />
</Fields>
</asp:DetailsView>
Элемент управления источником данных, привязанный к DetailsView, использует выражение "проверки всех" в операторе UPDATE для реализации строгого параллелизма:
<asp:SqlDataSource ID="sourceShippers" runat="server"
ConnectionString="<%$ ConnectionStrings:Northwind %>"
SelectCommand="SELECT * FROM Shippers"
UpdateCommand="UPDATE Shippers
SET CompanyName=@CampanyName, Phone=@Phone
WHERE ShipperID=@original_ShipperID AND
CompanyName=@original_CompanyName AND
Phone=@original_Phone"
ConflictDetection="CompareAllValues">
<UpdateParameters>
<asp:Parameter Name="companyName" />
<asp:Parameter Name="Phone" />
<asp:Parameter Name="original_ShipperID" />
<asp:Parameter Name="original_CompanyName" />
<asp:Parameter Nаmе="оriginal_Рhоne" />
</UpdateParameters>
</asp:SqlDataSource>
предыдущая следующая страница вначало главы оглавление
477