数组绑定GridView1,请问DataKeyNames应该如何设置? 如题,谢谢. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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(); } } 数据表现形式 asp.net AjaxPro 错误 xml如何创建自动增长的ID? .net中水晶报表打印问题 求一个用soap 封装传输数据的例子 在.net中实现 特急问题--“ ”(十六进制值 0x0B)是无效的字符 在ASP.NET后台代码中写存储过程出现的问题(急!!!)? 怎样列出一个目录下所有的文件by c# ASP如何读MySql中的blob字段中的文本? 关于SSO是不是要每个页面都要验证一下用户的权限呢 如何在asp.net中调用Process.Start() 如何得到gridview的记录条数?有哪些方法?谢谢
<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 属性时,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();
}
}