GridView、FromView、DetailsView实现主从表需要注意的几个细节
摘录自MSDN:http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.gridview.selecteddatakey.aspx
取GridView1的属性SelectedDataKey作为Parameter,必须使用SelectedDataKey[i] 来指定是第几个值,否则会报类型不匹配的错误了。
如果GridView的SelectedDataKey有多个值,SelectedValue只会取第一个做为值。
不过DetailsView的SelectedDataKey有多个值,SelectedValue是可以取到多个值的。
下面的示例演示如何在主/从方案中将第二个键字段作为参数使用。使用 GridView 控件显示 Northwind 数据库的 Order Details 表中的记录。在 GridView 控件中选择某一记录时,将在 DetailsView 控件中显示来自 Products 表的产品详细信息。ProductID 是 GridView 控件中的第二个键名称。若要访问第二个键,请将 GridView1.SelectedDataKey[1] 的值用作 DetailsView 控件的 SqlDataSource 控件的 ControlParameter 对象的 PropertyName。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html ><head runat="server">
<title>Selecting Data Key Values</title></head><body><form id="form1" runat="server"><div><asp:SqlDataSourceID="SqlDataSource1"
runat="server"
ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString%>"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT * FROM [Order Details]">
</asp:SqlDataSource><asp:SqlDataSourceID="SqlDataSource2"
runat="server"
ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString%>"
ProviderName="System.Data.SqlClient"
SelectCommand="SELECT * FROM [Products]WHERE [ProductID] = @productid">
<SelectParameters><asp:ControlParameterName="productid"
ControlID="GridView1"
PropertyName="SelectedDataKey[1]" />
</SelectParameters></asp:SqlDataSource></div><asp:GridViewID="GridView1"
runat="server"
AllowPaging="True"
AutoGenerateColumns="False"
DataKeyNames="OrderID,ProductID" DataSourceID="SqlDataSource1"><Columns><asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="OrderID" HeaderText="OrderID" ReadOnly="True"/><asp:BoundField DataField="ProductID" HeaderText="ProductID" ReadOnly="True" /><asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" /><asp:BoundField DataField="Quantity" HeaderText="Quantity" /><asp:BoundField DataField="Discount" HeaderText="Discount" /></Columns></asp:GridView><br /><asp:DetailsViewID="DetailsView1"
runat="server"
AutoGenerateRows="False"
DataKeyNames="ProductID"
DataSourceID="SqlDataSource2"
Height="50px" Width="125px"><Fields><asp:BoundFieldDataField="ProductID"
HeaderText="ProductID"
InsertVisible="False"
ReadOnly="True" />
<asp:BoundField DataField="ProductName" HeaderText="ProductName"/><asp:BoundField DataField="SupplierID" HeaderText="SupplierID"/><asp:BoundField DataField="CategoryID" HeaderText="CategoryID" /><asp:BoundField DataField="QuantityPerUnit" HeaderText="QuantityPerUnit" /><asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" /><asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" /><asp:BoundField DataField="UnitsOnOrder" HeaderText="UnitsOnOrder" /><asp:BoundField DataField="ReorderLevel" HeaderText="ReorderLevel" /><asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued" /></Fields></asp:DetailsView></form></body></html>