自己實(shí)現(xiàn)DataKeyNames

676人閱讀 評(píng)論(2) 收藏 舉報(bào)

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(); 
            }
        }