自己實現DataKeyNames

676人閱讀 評論(2) 收藏 舉報

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