...
    ErrorPanel.Visible = true;
  }
}

Панель ошибок описывает проблему с информативным сообщением и содержит второй DetailsView, который привязан к соответствующей строке, чтобы показать текущее значение записи, находящейся под вопросом.

<asp:Panel ID="ErrorPanel" runat="server" Visible="False"
  EnableViewState="False">
There is a newer version of this record in the database.<br />
The current record has the values shown below.<br />
<br />
<asp:DetailsView ID="detailsConflicting" runat="server"
  AutoGenerateRows="Faise" DataSourceID="sourceUpdateValues" ...>
  <Fields>
    <asp:BoundField DataFieid="ShipperID" />
    <asp:BoundPield DataField="CompanyName" />
    <asp:BoundField DataField="Phone" >
  </Fields>
</asp:DetailsView>
<br />
* Click <b>Update</b>to override these values with your changes.<br />
* Click <b>Cancel</b>to abandon your edit.</span>&nbsp;
<asp:SqlDataSouree ConnectionString="<%$ ConnectionStrings:Northwind %>"
  ID="sourceUpdateValues" runat="server"
  SelectCommand="SELECT * FROM Shippers "WHERE (ShipperID = @shipperID)"
  OnSelecting"="sourceUpdateValues_Selecting">
  <SelectParameters>
    <asp:ControlParameter ControlID="detailsEditing" Name="ShipperID"
      PropertyName="SelectedValue" Type="Int32" />
  </SelectParameters>
</asp:SqlDataSource>
</asp:Panel>

После этого остается одна последняя деталь. Чтобы сэкономить на накладных расходах, не нужно выполнять повторный запрос второго DetailsVlew, если только это не абсолютно необходимо из-за возникновения ошибки, связанной с параллелизмом. Чтобы реализовать эту логику, код реагирует на событие SqlDataSource.Selecting и отменяет запрос, если панель ошибок в данный момент не видима.

protected void sourceUpdateValues_Selecting(object sender,
    SqlDataSourceSelectingEventArgs e)
{
  if (!ErrorPanel.Visible)
    e.Cancel = true;
}

Чтобы протестировать этот пример, откройте две копии страницы в разных окнах браузера и активизируйте на них режим редактирования одной и той же записи. Примените изменения в первом окне, затем во втором. Когда вы попытаетесь подтвердить изменения во втором окне, появится панель ошибок с предупреждением (рис. 10.24). Затем вы можете либо выбрать продолжение редактирования, щелкнув на ссылке Update (Обновить), либо отменить его, щелкнув на ссылке Cancel (Отмена).

предыдущая    следующая страница    вначало главы    оглавление

479

Hosted by uCoz