Обычно вы будете использовать только одно ключевое поле, как показано ниже:
<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["EmployeeID"]" />
</SelectParameters>
</asp:SqlDataSource>
Этот пример определяет объект источника данных, который использует метод по имени GetEmployeeRegions(). Метод требует единственного параметра — EmployeeID — из выбранной записи о сотруднике. Значение EmployeeID извлекается из коллекции SelectedDataKey.Values. Вы можете найти поле EmployeeID по его индексной позиции (которая в данном примере равна 0, потому что это единственное поле, указанное в списке DataKeyName) или же по имени. Единственный трюк при выполнении поиска имени заключается в том, что нужно заменить символы кавычек соответствующим элементом HTML (").
На рис. 10.6 представлена эта форма типа "главная-подчиненная", содержащая список регионов, назначенных сотруднику, который отображается при выборе записи о сотруднике.
Как показано в предыдущем примере, вы можете установить форму типа "главная-подчиненная" декларативно, без необходимости писать какой-либо код. Однако существует много случаев, когда необходимо реагировать на событие SelectedIndexChanged. Например, вы можете пожелать переадресовать пользователя на новую страницу (возможно, с выбранным значением в строке запроса), или же вы можете захотеть подогнать другие элементы управления на странице.
Например, так может выглядеть код, который добавляет метку, описывающую дочернюю таблицу, показанную в предыдущем примере:
предыдущая следующая страница оглавление
433