自己實現DataKeyNames

來源:互聯網
上載者:User

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.