(论坛答疑点滴)联合主键的情况怎么在DataGrid中利用DataKeys定位记录?

datagrid

 
比如表中三个字段
key1 int,key2 int,item varchar(50)
前面2个字段联合主键

前台代码:

<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>
后台代码:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace csdn2
{
    public class WebForm20 : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.DataGrid DataGrid1;
    
        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!IsPostBack)
            {
                SetBind();
            }
        }
        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();
        }
        Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /**//// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {    
            this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

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

时间: 2024-11-30 15:37:24

(论坛答疑点滴)联合主键的情况怎么在DataGrid中利用DataKeys定位记录?的相关文章

mysql auto_increment 与 联合主键冲突问题

mysql 5.5之前,auto_increment字段必须为主键,有的时候,这种自增字段,并没有多大的实际意义,而我们需要多个字段组成主键. 例如: 用户只能对购买的商品,进行一次评价,评价的自增ID,没什么用处,用户的ID和商品ID组成的联合主键,意义就大的多了.如果想保留auto_increment字段,就要使用高版本的mysql了. mysql> ALTER TABLE `order` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `user_id` , `or

Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计

俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/Annotation) 联合主键 一对一单向外键联合主键(Xml/Annotation) 一对一组件关联(XML/Annotation) 理解组件 领域驱动设计--自动生成数据库脚本 一对一关系的小结 一些出错问题的总结   自动生成数据库脚本 一般在项目开发过程中,我们的习惯是先建好数据库和表,然后

联合主键和复合主键区别

问题描述 在数据库中,什么是联合主键和复合主键?他们之间有什么区别?他们应用场景是什么?他们和普通主键id有什么区别? 解决方案 什么是数据表的复合主键所谓的复合主键 就是指你表的主键含有一个以上的字段组成比如create table test( name varchar(19), id number, value varchar(10), primary key (name,id))上面的name和id字段组合起来就是你test表的复合主键它的出现是因为你的name字段可能会出现重名,所以要加

Hibernate为什么不推荐使用联合主键

问题描述 Hibernate为什么不推荐使用联合主键 Hibernate为什么不推荐使用联合主键,能说明一下原因吗?谢谢! 解决方案 读取的性能比较差,O/R Mapping都是以主键的方式来识别纪录的,单一主键已经能够满足应用,而且速度快,所以会值得推荐 解决方案二: 如果当你使用无意义的逻辑主键的时候,主键的维护完全是由Hibernate自动进行的,你无须关注主键的维护,自然就避免了很多问题的产生:而如果你选择自己手工维护主键(联合主键就必须手工维护),所有的这些维护主键的重任都必须由你来负

【HIBERNATE框架开发之四】HIBERNATE-ANNOTATION常用的注解归总&amp;&amp;ID的生成策略&amp;&amp;联合主键

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/hibernate/811.html 这篇主要讲解Hibernate中Annotation的常用注解和ID的生成策略以及联合主键三块:     首先介绍些常用的Annotation注解: 1.  当表名与类名不一致: @Table(name="数据库表名")        (javax.persistence)      如果类名与

oracle联合主键问题,2个主键确定数据

问题描述 oracle联合主键问题,2个主键确定数据 #机构信息表T_GX_JGXX = Table('T_GX_JGXX'con.metadataColumn('YXJGDM' String(30) nullable=Falsedoc='银行机构代码')Column('NBJGH' String(30) nullable=Falseprimary_key=Truedoc=""内部机构号"" )Column('YXJGMC' String(200) nullable

sql server...-sql server如何实现16个以上联合主键

问题描述 sql server如何实现16个以上联合主键 现在一个表的联合主键有16个,需要添加一个联合主键,但是sql server最多只能16个主键,怎么能实现17个键的需求? 解决方案 在SQL Server中如何关于修改自增型主键的初始值获取SQL Server 主键有关sql server用int型主键的一些问题

联合主键问题

问题描述 因为开发环境问题.无法粘贴代码,只有截图了:不要嫌弃呀主键类:实体类:调用:错误:初学java请大神指点.查询的这个表无主键.但可以做这样一个联合主键.结果还是报错.求指正 解决方案 本帖最后由 sun280660410 于 2014-07-02 21:11:04 编辑解决方案二:主键类里是重写了hashcode没有截上

oracle-数据库联合主键问题,各位大神过过眼

问题描述 数据库联合主键问题,各位大神过过眼 急救,如果这数据库中使用工号(不可使用递增)和日期做联合主键,来确定查询数据的唯一性,我该怎么处理 解决方案 如果你是开发实际项目,建议你的主键不要和任何业务相关,万一你的老板说,工号和日期也允许重复,或者你需要分库并库,你就给自己挖坑了. 你只要把工号日期做一个唯一约束就可以了. 解决方案二: #机构信息表 T_GX_JGXX = Table('T_GX_JGXX',con.metadata, Column('YXJGDM', String(30)