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