ASP.NET 同时删除多条记录

来源:互联网 发布:江阴广电网络 编辑:程序博客网 时间:2024/05/18 00:02

下图是未办代理的查询界面,用户可以选择多条记录,进行删除。

实现:
绑定数据的控件是GridView。显示的未办代理信息的各个项是与数据库中未办代理表的字段绑定的。
1.档案编号唯一
在档案编号唯一的情况下,同时删除多条记录。实现思路:获取选中的多条记录的档案编号,放到集合中。
绑定表(未办代理表)里边存在主键列——number。通过主键进行删除。所以,通过档案编号集合获得主键编号集合,用主键编号集合作为参数传递到数据层实现删除。

后台代码:

protected void btnDelete_Click(object sender, EventArgs e)        {            List<String> idlist = GetSelIDlist();               //定义未办代理档案编号编号集合           UniversityStudentFacade universityFacade = new UniversityStudentFacade();  //实例未办代理外观             universityFacade .DecoveryList(idlist);          //调用外观类方法,删除勾选记录            BindData();                                         //绑定数据        }

 private List<string> GetSelIDlist()        {            List<String> list = new List<String>();             //实例化字符串集合            string idlist = "";                                 //档案编号ID            string prilist = "";                                //获取主键            bool BxsChkd = false;            Facade.universityFacade universityFacade = new Facade.UniversityStudentFacade();            for (int i = 0; i < gridView.Rows.Count; i++)       //遍历gridView            {                CheckBox ChkBxItem = (CheckBox)gridView.Rows[i].FindControl("DeleteThis");  //获取复选框控件                if (ChkBxItem != null && ChkBxItem.Checked)     //判断是否不为空并且处于勾选状态                {                    BxsChkd = true;                    //#warning 代码生成警告:请检查确认Cells的列索引是否正确                    if (gridView.DataKeys[i].Value != null)     //判断勾选记录的DataKeys值是否不为空                    {                        idlist = gridView.DataKeys[i].Value.ToString();                        //获得PRI                        prilist += universityFacade .GetNumberlist(idlist).ToString() + "','";  //调用外观类方法,得到对应外键值                    }                }            }            if (BxsChkd)                //判断数据行的最后一行是否勾选复选框            {                prilist = prilist.Substring(0, prilist.LastIndexOf("',"));                      }            list.Add(prilist);      //将外键字符串附加到外键集合中            return list;        }

D层实现:

/// <summary>        /// 根据档案编号集合获得number集合        /// </summary>        /// <param name="IDList">档案编号集合字符串</param>        /// <returns>number集合字符串</returns>        public string GetNumberlist(string IDList)        {            StringBuilder strSql = new StringBuilder();            strSql.Append("select number from T_UniversityStudent  ");            strSql.Append(" where state='T' and ID in ('" + IDList + "')");            SqlParameter[] parameters = {};            DataSet ds = DbHelperSQL.Query(strSql.ToString(), parameters);            string numberList = "";            if (ds.Tables[0].Rows.Count == 0)                        //判断是否有查询到数据            {                numberList = "";            }            else if (ds.Tables[0].Rows.Count==1)            {                numberList = ds.Tables[0].Rows[0][0].ToString();            }            else{                for (int i = 0; i < (ds.Tables[0].Rows.Count - 1); i++)     //循环数据集DataTable每一行                {                    numberList += ds.Tables[0].Rows[i][0] + "'" + ",";     //获取主键number集合                }                numberList += "'" + ds.Tables[0].Rows[ds.Tables[0].Rows.Count - 1][0].ToString();            }            return numberList;        }
  /// <summary>        /// 批量删除数据        /// </summary>        /// <param name="list">主键集合</param>        /// <param name="conn">数据库连接</param>        /// <param name="trans">事务</param>        /// <returns>返回布尔值</returns>        public bool RecoveryList(List<string> list, SqlConnection conn, SqlTransaction trans)        {            string[] prilist = list.ToArray();            StringBuilder strSql = new StringBuilder();            strSql.Append("update T_UniversityStudent  set state ='F'  ");            strSql.Append(" where  number in ('" + prilist[0] + "')");            SqlParameter[] parameters = {};            int rows = DbHelperSQL.ExecuteSqlRow(strSql.ToString(), conn, trans, parameters);            if (rows > 0)            {                return true;            }            else            {                return false;            }        }

2.档案编号不唯一
在档案编号不唯一的情况下,同时删除多条记录。实际在实现时,档案编号不唯一。绑定表(未办代理表)
里边存在主键列——number,所以需要获取选中的多条记录的number,放到集合中,将集合作为参数传递到数据层实现删除。number是通过‘详情’项获得的。‘详情’是一个超链接,实现查看具体个人的详细未办代理信息。超链接中获取了number。所以,获取删除列的唯一标识number是从超链接中截取出来的。

前台代码:

<script type="text/javascript">        function getnumber() {            if (Delcheck()) {      //是否确认删除确认删除                     var gv = document.getElementById("gridView");                var mycheck = gv.getElementsByTagName("input"); //获取GridView的Inputhtml                var universityList = new Array();          //未办代理数组                var hg;                var id;                for (var i = 0; i < mycheck.length; i++) {                    if (mycheck[i].type == 'checkbox')//hidden                    {                        if (mycheck[i].checked == true) {       // 复选框被选中                            var numid = new Object();                            hg = gv.rows(i + 1).cells(13).innerHTML;              //获取详情列超链接                            //alert(hg);                            hg = hg.substring(hg.lastIndexOf("number=") + 7, hg.lastIndexOf("\" target="));        //截取number                            //alert(hg);                            id = gv.rows(i + 1).cells(1).innerHTML;               //获取档案编号                            numid.number = hg;                            numid.id = id;                            universityList.push(numid);             //universityList中有将要删除记录的档案编号、mumber                            //alert(hg);                        }                    }                }                $.ajaxSetup({                    async: false                });                var nid = JSON.stringify(universityList);                $.post("UniversityDelete.ashx", { action: "post", numid: "" + nid + "" }, function (data) {        //将universityList传递到删除的一般处理程序中,实现删除                    if (data == "false") {                        window.setTimeout(function () {                            alert('删除失败!', 'fail');                        }, 200);                    }                    else {                        alert("删除成功", "提示");                        window.location.reload();                    }                });            }            else {                return false;            }        }    </script><asp:LinkButton ID="lbtnDelete" class="btn-lit" runat="server" Height="25px"  OnClientClick="return getnumber()" Width="52px"  ><span>删 除</span></asp:LinkButton>


删除的一般处理程序:
 public void ProcessRequest(HttpContext context)        {            bool flag = false;            string json = "{\"flag\":\"true\"}";                        UniversityStudentFacade universityFacade = new UniversityStudentFacade();                                   context.Response.ContentType = "application/json";            string numid = context.Request["numid"].ToString();                       JArray numidget = (JArray)JsonConvert.DeserializeObject(numid);            for (int i = 0; i < numidget.Count; i++)            {                JObject numberget = (JObject)numidget[i];                string num = numberget["number"].ToString();                if (num.Equals(""))                {                    UniversityStudentEntity enUniversity = new UniversityStudentEntity();                    string id = numberget["id"].ToString();                    enUniversity.ID = id;                    flag = universityFacade.Delete(universityFacade.GetModel(id).number);                    universityFacade.UpdateUniversityInfo(enUniversity);                }                else                {                    int number = Convert.ToInt32(num);                    flag = universityFacade.Delete(number);                }            }            //context.Response.Write(json);            //Page.ClientScript.RegisterStartupScript(typeof(Page), "", "<script>alert('恭喜,文件上传成功!');history.go(-1);</script>");            if (flag)            {                context.Response.Write("true");            }            else            {                context.Response.Write("false");            }        }


D层实现;
/// <summary>/// 删除一条数据/// </summary>public bool Delete(int number){StringBuilder strSql=new StringBuilder();                                  strSql.Append("update T_UniversityStudent  set state='F' ");strSql.Append(" where number=@number");SqlParameter[] parameters = {new SqlParameter("@number", SqlDbType.Int,4)};parameters[0].Value = number;int rows=DbHelperSQL.ExecuteSql(strSql.ToString(),parameters);if (rows > 0){return true;}else{return false;}}

下图是删除前两条记录的查询结果:


0 0
原创粉丝点击