Обычно вы будете использовать только одно ключевое поле, как показано ниже:

<asp:GridView ID="gridEmployees" runat="server"
  DataSourceID="soureeEmployees" DataKeyNames="EmployeeID" ... >

Теперь вы можете привязать второй источник данных к этому нолю. Ниже приведен пример, применяющий EmployeeID в запросе объединения, чтобы найти все соответствующие записи из таблицы Territories:

<asp:SqlDataSource ID="sourceRegions" runat="server"
  ConnectionString="<%$ ConnectionStrings:Northwind %>"
  ProviderName="System.Data.SqlClient"
  SelectCommand="SELECT Employees.EmployeeID, 
    Territories.TerritoryID, Territories.TerritoryDescription
  FROM Employees
  INNER JOIN EmployееTerritories
  ON Employees.EmployeeID = EmployeeTerritories.EmployeeID
  INNER JOIN Territories
  ON EmployeeTerritories.TerritoryID = Territories.TerritoryID
  WHERE Employees.EmployeeID = @EmployeeID" >
  <SelectParameters>
   <asp:ControlParameter ControlID="gridEmployees" Name="EmployeeID"
     propertyName="SelectedDataKey.Values[&quot;EmployeeID&quot;]" />
  </SelectParameters>
</asp:SqlDataSource>

Этот пример определяет объект источника данных, который использует метод по имени GetEmployeeRegions(). Метод требует единственного параметра — EmployeeID — из выбранной записи о сотруднике. Значение EmployeeID извлекается из коллекции SelectedDataKey.Values. Вы можете найти поле EmployeeID по его индексной позиции (которая в данном примере равна 0, потому что это единственное поле, указанное в списке DataKeyName) или же по имени. Единственный трюк при выполнении поиска имени заключается в том, что нужно заменить символы кавычек соответствующим элементом HTML (&quot;).

На рис. 10.6 представлена эта форма типа "главная-подчиненная", содержащая список регионов, назначенных сотруднику, который отображается при выборе записи о сотруднике.

Событие SelectedIndexChanged

Как показано в предыдущем примере, вы можете установить форму типа "главная-подчиненная" декларативно, без необходимости писать какой-либо код. Однако существует много случаев, когда необходимо реагировать на событие SelectedIndexChanged. Например, вы можете пожелать переадресовать пользователя на новую страницу (возможно, с выбранным значением в строке запроса), или же вы можете захотеть подогнать другие элементы управления на странице.

Например, так может выглядеть код, который добавляет метку, описывающую дочернюю таблицу, показанную в предыдущем примере:

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

433

Hosted by uCoz