DataKeyNames就是資料庫表的欄位,可以設定多個。
<asp:GridView ID="gvGoods" runat="server" AutoGenerateColumns="False" Width="550px" AllowPaging="True" DataKeyNames="s_goodsID,s_goodsName" OnPageIndexChanging="gvGoods_PageIndexChanging" OnRowDataBound="gvGoods_RowDataBound" OnRowCommand="gvGoods_RowCommand">
使用 DataKeyNames 屬性指定表示資料來源主鍵的欄位。
注意
若要以聲明方式設定此屬性,請使用以逗號分隔的欄位名列表。
當設定了 DataKeyNames 屬性時,GridView 控制項用來自指定欄位的值填充它的 DataKeys 集合,這提供了一種訪問每個行的主鍵的便捷方法。
注意
GridView 控制項以控制項狀態儲存這些鍵欄位值。如果這些值包含敏感資訊,則強烈建議您通過將 ViewStateEncryptionMode 屬性設定為 ViewStateEncryptionMode.Always 來啟用檢視狀態加密。
在使用自動產生的欄位列時(通過將 AutoGenerateColumns 屬性設定為 true),GridView 控制項自動確保與 DataKeyNames 屬性中指定的欄位相對應的自動產生欄位列是唯讀。
注意
為了使 GridView 控制項的自動更新和刪除功能工作,必須設定 DataKeyNames 屬性。為了匹配要更新或刪除的行,這些鍵欄位的值被傳遞到資料來源控制項。
如果將某個欄欄位的 Visible 屬性設定為 false,則在 GridView 控制項中將不顯示該列,該列中的資料也不會往返於用戶端。如果希望某個不可見的列中的資料可以進行往返,則向 DataKeyNames 屬性添加相應的欄位名稱。
一個刪除的例子:
注意:DataKeyField=的用法
=====頁面=====
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" DataKeyField="DoubleKey">
<Columns>
<asp:BoundColumn DataField="item" HeaderText="item"></asp:BoundColumn>
<asp:ButtonColumn CommandName="del" Text="刪除"></asp:ButtonColumn>
</Columns>
</asp:DataGrid>
====綁定========
private void SetBind()
{
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
SqlDataAdapter da=new SqlDataAdapter("select * from doublekey",conn);
DataSet ds=new DataSet();
da.Fill(ds);
DataTable dt=ds.Tables[0];
DataColumn dc=new DataColumn("DoubleKey",typeof(string),"key1+'#'+key2");
dt.Columns.Add(dc);
this.DataGrid1.DataSource=dt;
this.DataGrid1.DataBind();
}
=====刪除====
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.CommandName=="del")
{
SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);
SqlCommand comm=new SqlCommand("delete from doublekey where key1=@key1 and key2=@key2",conn);
SqlParameter parm1=new SqlParameter("@key1",SqlDbType.Int);
SqlParameter parm2=new SqlParameter("@key2",SqlDbType.Int);
string [] keys=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString().Split('#');
parm1.Value=keys[0];
parm2.Value=keys[1];
comm.Parameters.Add(parm1);
comm.Parameters.Add(parm2);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
SetBind();
}
}