GridView.DataKeyNames 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得或設定陣列,這個陣列包含 GridView 控制項中所顯示項目的主索引鍵欄位名稱。
public:
virtual property cli::array <System::String ^> ^ DataKeyNames { cli::array <System::String ^> ^ get(); void set(cli::array <System::String ^> ^ value); };
[System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.StringArrayConverter))]
public virtual string[] DataKeyNames { get; set; }
[<System.ComponentModel.TypeConverter(typeof(System.Web.UI.WebControls.StringArrayConverter))>]
member this.DataKeyNames : string[] with get, set
Public Overridable Property DataKeyNames As String()
屬性值
陣列,包含 GridView 控制項中所顯示項目的主索引鍵欄位名稱。
- 屬性
範例
下列範例示範如何使用 DataKeyNames 屬性來指定數據源的索引鍵字段。 在此範例中, DataKeyNames
標記中元素的 GridView
屬性會使用逗號分隔名稱來指定兩個索引鍵字段。 若要執行此範例,請建立具有下列項目的網站:
AdventureWorksLT 範例資料庫的連線,以及名為的
AdventureWorksLTConnectionString
連接字串。 如需如何設定 AdventureWorksLT 範例資料庫的詳細資訊,請參閱 如何:設定 AdventureWorksLT 範例資料庫以進行 ASP.NET 開發。名為
AdventureWorksLTDataClassesDataContext
的 LINQ-to-SQL 資料內容類別。 數據內容必須具有 SalesOrderDetails 數據表的類別。 如需如何建立 LINQ to-SQL 類別的詳細資訊,請參閱 LINQ to SQL。
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="AdventureWorksLTDataClassesDataContext"
EnableDelete="True" EnableInsert="True" EnableUpdate="True"
TableName="SalesOrderDetails">
</asp:LinqDataSource>
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
DataKeyNames="SalesOrderID,SalesOrderDetailID"
DataSourceID="LinqDataSource1">
<Columns>
<asp:CommandField ShowDeleteButton="True"
ShowEditButton="True" />
<asp:BoundField DataField="SalesOrderID"
HeaderText="SalesOrderID" ReadOnly="True"
SortExpression="SalesOrderID" />
<asp:BoundField DataField="SalesOrderDetailID"
HeaderText="SalesOrderDetailID" InsertVisible="False"
ReadOnly="True" SortExpression="SalesOrderDetailID" />
<asp:BoundField DataField="OrderQty"
HeaderText="OrderQty" SortExpression="OrderQty" />
<asp:BoundField DataField="ProductID"
HeaderText="ProductID" SortExpression="ProductID" />
<asp:BoundField DataField="UnitPrice"
HeaderText="UnitPrice" SortExpression="UnitPrice" />
<asp:BoundField DataField="ModifiedDate"
HeaderText="ModifiedDate" SortExpression="ModifiedDate" />
</Columns>
</asp:GridView>
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="AdventureWorksLTDataClassesDataContext"
EnableDelete="True" EnableInsert="True" EnableUpdate="True"
TableName="SalesOrderDetails">
</asp:LinqDataSource>
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
DataKeyNames="SalesOrderID,SalesOrderDetailID"
DataSourceID="LinqDataSource1">
<Columns>
<asp:CommandField ShowDeleteButton="True"
ShowEditButton="True" />
<asp:BoundField DataField="SalesOrderID"
HeaderText="SalesOrderID" ReadOnly="True"
SortExpression="SalesOrderID" />
<asp:BoundField DataField="SalesOrderDetailID"
HeaderText="SalesOrderDetailID" InsertVisible="False"
ReadOnly="True" SortExpression="SalesOrderDetailID" />
<asp:BoundField DataField="OrderQty"
HeaderText="OrderQty" SortExpression="OrderQty" />
<asp:BoundField DataField="ProductID"
HeaderText="ProductID" SortExpression="ProductID" />
<asp:BoundField DataField="UnitPrice"
HeaderText="UnitPrice" SortExpression="UnitPrice" />
<asp:BoundField DataField="ModifiedDate"
HeaderText="ModifiedDate" SortExpression="ModifiedDate" />
</Columns>
</asp:GridView>
備註
DataKeyNames使用屬性來指定代表數據源主鍵的欄位或欄位。 您應該只將此屬性設定為唯一識別每個數據列所需的欄位或欄位;例如,如果整數值可唯一識別每個數據列,則為ID數據行。 您必須設定 DataKeyNames 屬性,才能讓控件的 GridView 自動更新和刪除功能運作。 這些索引鍵欄位的值會傳遞至數據源控件,以指定要更新或刪除的數據列。
如果您需要在更新或刪除資料列時擷取資料鍵值,請使用 Keys
或 GridViewDeleteEventArgs 類別的 GridViewUpdateEventArgs 屬性。 例如,e.Keys[0]
保留 或 RowDeleting 事件處理程式中第一個RowUpdating數據索引鍵的值。
如果您需要在選取數據列時擷取數據鍵值,請使用 SelectedDataKey 屬性。
DataKeyNames設定屬性時,GridView控件會自動將指定字段或欄位的值填入其DataKeys集合中,以提供方便的方式存取每個數據列的主鍵。
注意
控制件 GridView 會將這些索引鍵域值儲存在控制項狀態中。 如果這些值包含敏感性資訊,強烈建議您將 屬性設定 ViewStateEncryptionMode 為 ViewStateEncryptionMode.Always
來啟用檢視狀態加密。
當您藉由將 屬性設定 AutoGenerateColumns 為 true
) 來使用自動產生的欄位資料行 (時, GridView 控件可確保對應至屬性中所 DataKeyNames 指定字段的數據行是只讀的。
如果數據 Visible 行欄位的 屬性設定 false
為 ,則數據行不會顯示在控件中 GridView ,而且數據行的數據不會進行往返用戶端。 如果您想要用戶端看不到的數據行數據,請將功能變數名稱新增至 DataKeyNames 屬性。