DataKeyNames就是數(shù)據(jù)庫表的字段,可以設(shè)置多個。
<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 屬性指定表示數(shù)據(jù)源主鍵的字段。
注意
若要以聲明方式設(shè)置此屬性,請使用以逗號分隔的字段名列表。
當(dāng)設(shè)置了 DataKeyNames 屬性時,GridView 控件用來自指定字段的值填充它的 DataKeys 集合,這提供了一種訪問每個行的主鍵的便捷方法。
注意
GridView 控件以控件狀態(tài)存儲這些鍵字段值。如果這些值包含敏感信息,則強烈建議您通過將 ViewStateEncryptionMode 屬性設(shè)置為 ViewStateEncryptionMode.Always 來啟用視圖狀態(tài)加密。
在使用自動生成的字段列時(通過將 AutoGenerateColumns 屬性設(shè)置為 true),GridView 控件自動確保與 DataKeyNames 屬性中指定的字段相對應(yīng)的自動生成字段列是只讀的。
注意
為了使 GridView 控件的自動更新和刪除功能工作,必須設(shè)置 DataKeyNames 屬性。為了匹配要更新或刪除的行,這些鍵字段的值被傳遞到數(shù)據(jù)源控件。
如果將某個列字段的 Visible 屬性設(shè)置為 false,則在 GridView 控件中將不顯示該列,該列中的數(shù)據(jù)也不會往返于客戶端。如果希望某個不可見的列中的數(shù)據(jù)可以進行往返,則向 DataKeyNames 屬性添加相應(yīng)的字段名稱。
一個刪除的例子:
注意: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();
}
}