datakeynames:獲取或設置一個數(shù)組,該數(shù)組包含了顯示在 gridview 控件中的項的主鍵字段的名稱。
datakeys:獲取一個 datakey 對象集合,這些對象表示 gridview 控件中的每一行的數(shù)據(jù)鍵值。
gridview的datakeynames屬性指出要持久保存在視圖狀態(tài)中的數(shù)據(jù)字段的名稱,以便在回發(fā)事件(儲如rowcommand)的后期獲取它們.作為字符串數(shù)組實現(xiàn)的datakeyname,是datagrid控件的datakeyfield屬性在gridview中的對應屬性。它包括一個datagrid中顯示的行的主鍵和gridview的許多屬性:
<asp:gridview id="gridview1" runat="server" datasourceid="sqldatasource1" datakeynames="productid,productname,unitprice"..../>
談談對GridView控件DataKeyName屬性的一點認識。
頁面前臺有以下代碼:
<asp:GridView ID="View1" Width="100%" runat="server" AutoGenerateColumns="False" CellPadding="3" OnRowDataBound="View1_RowDataBound" CssClass="GbText" DataKeyNames="SubjectID,Mode" CellSpacing="1">
后臺有以下代碼:
protected void View1_RowDataBound(object sender,GridViewRowEventArgs e)
{
if(View1.DataKeys[e.Row.RowIndex].Values["Mode"].ToString().ToLower() == "false")
{
......
}
}
說明:
由于為GridView控件的DataKeyNames屬性設置了表的兩個字段(SubjectID,Mode),因此可以在為GridView綁定數(shù)據(jù)時對庫表的每個記錄的指定字段值作出判斷。后臺代碼中的e.Row.RowIndex即表示GridView的當前行(對應于庫表的當前記錄);而View1.DataKeys[e.Row.RowIndex].Values["Mode"].ToString()則獲取當前行指定字段(Mode)的值。若前臺代碼只寫:DataKeyNames="SubjectID'(即DataKeyNames屬性只填入一個字段名),則后臺只需寫成: View1.DataKeys[e.Row.RowIndex].Value.ToString()) 即可。
同樣的,要動態(tài)獲取當前行另一個字段的值可以這樣寫: View.DataKeys[e.Row.RowIndex].Values["SubjectID"].ToString())。
總之,為GridView的DataKeyNames屬性設置庫表字段名的主要目的還是為了在為GridView控件綁定數(shù)據(jù)時獲取當前行指定字段的值,以便作相應處理。若無此需求的話則GridView的DataKeyNames屬性就可以不設置。