MVC模式下如何对多选框数据进行增删改查

一、业务情景:

     做的是一个项目管理的增删改查模块,一个项目里面有项目成员属性,而且一个项目可以有多个成员,一个成员可以参加多个项目,多对多关系,数据库表里自然要建立一个关系表。

视图

二、视图显示:

因为新增项目和修改项目的时候用的是同一个视图,所以项目成员多选框那里不仅要显示所有用户,而且要把在项目成立里的数据要选上显示,这里我先把所有用户从用户表里查出来,然后显示在页面上,然后再判断每个用户是否在用户成员表里面,在的话就给勾选上。

 1 <tr>
 2                      <td class="field">
 3                         <label>
 4                             项目成员:@*<span class="xing">*</span>*@
 5
 6                         </label>
 7                     </td>
 8                     <td  class="otherfont">
 9                         @{
10                             var users = ViewBag.users;
11                             var projectmember = ViewBag.projectmember;
12
13                         }
14                         @foreach (var user in users)
15                         {
16
17                             bool result = true;
18                             foreach (var test in projectmember)
19                             {
20                                 if (test == user.UserId)
21                                 {
22                                     result = false;
23                                 }
24                                 else
25                                 {
26                                     continue;
27
28                                 }
29                             }
30                             if (result == true)
31                             {
32
33                                <input type="checkbox" name="selectusers"  [email protected] />@user.RealName
34
35
36                             }
37                             else
38                             {
39
40                                  <input type="checkbox" name="selectusers" checked="True" [email protected] />@user.RealName
41
42                             }
43
44                         }
45                     </td>
46
47                 </tr>

三、新增模块

新增的时候要把勾选得数据存入项目成员表,先获得所有勾选得数据,然后分离开来,获得每个用户的ID,再做个循环插入数据到数据库,这样就能把所有项目成员都插入到项目成员表了,由于可能存在多个用户,需要多次操作数据库,所以需要使用事物。

  /// <summary>
        /// 新增项目时添加项目成员表
        /// </summary>
        /// <param name="str">项目成员组成的字符串</param>
        /// <param name="proId">项目ID</param>
        /// <returns></returns>
        public bool AddUserInProject(string str, Guid proId)
        {
            bool result = true;//为了后面记录是否全部插入成功做准备
            string sqlstr = "";//数据库操作字符串
           // List<Guid> historyusers = GetProjectMember(proId);//得到已经存在的项目成员数组
            string[] userids = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
            int usernum = userids.Length;//用来记录实际要插入的数据条数
            for (int i = 0; i < userids.Length; i++)
            {
                Guid userid = new Guid(userids[i]);//需要增加的用户ID

                sqlstr = sqlstr + "insert into tb_UserInProject(ProjectId,UserId)values(‘" + proId + "‘,‘" + userid + "‘);";
            }

            try
            {
               //string sql = @"insert into tb_UserInProject(ProjectId,UserId)values(@projectid,@userid);";

                //需要操作多条数据库语句,使用事物
                using (TransactionScope scope = new TransactionScope())
                {
                    using (var context = DataBaseConnection.GetSqlServerConnection())
                    {
                        var affectrow = context.Execute(sqlstr);
                        result = affectrow == usernum;
                    }
                    // 没有错误——提交事务
                    scope.Complete();
                }
            }
            catch (Exception)
            {

                //throw;
            }
            return result;
        }

四、修改模块

由于当时准备把新增和修改的业务逻辑都写在一个方法里面,所以纠结了很久,因为新增的时候就已经很麻烦了,还要修改,修改的时候又想着哪些用户原来有,哪些需要增加进去,哪些需要去掉,所以让我纠结了很久。后来把新增业务逻辑和修改业务逻辑分别放在不同方法中后,就渐渐明了了,修改的时候,先直接删除掉原来的项目成员,然后把新的项目成员添加进去即可。当然,由于存在操作多个语句,所以都需要使用事物来操作,这样一旦哪个没成功,就可以自动回滚。

 /// <summary>
        /// 修改项目成员
        /// </summary>
        /// <param name="str">项目成员s</param>
        /// <param name="proId">项目ID</param>
        /// <returns></returns>
        public bool UpdateUserInProject(string str, Guid proId)
        {
            bool result = true;//为了后面记录是否全部插入成功做准备
            string sqlstr = "";//数据库操作字符串
            string sqldelstr = @"delete tb_UserInProject where ProjectId=‘"+proId+"‘";
            List<Guid> historyusers = GetProjectMember(proId);//得到已经存在的项目成员数组
            int historyusersnum = historyusers.Count;//获得历史成员的数目

            string[] userids = str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
            int usernum = userids.Length;//用来记录实际要插入的数据条数
            for (int i = 0; i < userids.Length; i++)
            {
                Guid userid = new Guid(userids[i]);//需要增加的用户ID
                sqlstr = sqlstr + "insert into tb_UserInProject(ProjectId,UserId)values(‘" + proId + "‘,‘" + userid + "‘);";
            }
                //需要操作多条数据库语句,使用事物
                using (TransactionScope scope = new TransactionScope())
                {
                    using (var context = DataBaseConnection.GetSqlServerConnection())
                    {
                        var affectrow1 = context.Execute(sqldelstr);//删除原来项目成员
                        var affectrow2 = context.Execute(sqlstr);//添加修改后的项目成员
                        result = (affectrow1 == usernum)&&(affectrow2==historyusersnum);
                    }
                    // 没有错误——提交事务
                    scope.Complete();
                }

            return result;
        }

查询和删除在修改的时候有体现,点击修改的时候,会查询以前的项目成员,进行修改的时候,会先删除以前成员,然后添加新的成员数组!!

注:本人编程新手,肯定有很多纰漏,本文纯属个人笔记,欢迎大家批评指教,当然,如需转载,请标明出处!   ----喜狗

    

时间: 2024-07-30 09:49:00

MVC模式下如何对多选框数据进行增删改查的相关文章

Windows下安装MySQLdb, Python操作MySQL数据库的增删改查

这里的前提是windows上已经安装了MySQL数据库,且配置完毕,能正常建表能操作.在此基础上只需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了,只有1M多.这个有点类似jdbc里的那个jar包. 下载链接:http://sourceforge.net/projects/mysql-python/ , 百度云盘 :http://pan.baidu.com/s/1dDgnfpR 密码:7bna 接着import MySQLdb就能使用了,下面给出测试代码:

SpringMVC框架下数据的增删改查,数据类型转换,数据格式化,数据校验,错误输入的消息回显

在eclipse中javaEE环境下: 这儿并没有连接数据库,而是将数据存放在map集合中: 将各种架包导入lib下... web.xml文件配置为 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/

基于MVC和Bootstrap的权限框架解决方案 二.添加增删改查按钮

上一期我们已经搭建了框架并且加入了列表的显示, 本期我们来加入增删改查按钮 整体效果如下 HTML部分,在HTML中找到中意的按钮按查看元素,复制HTML代码放入工程中 <a class="btn btn-small element" data-original-title="新增" href="/Customer/Add" data-toggle="tooltip" data-placement="top&q

在 idea 下搭建的第一个MyBatis项目及增删改查用法

Mybatis搭建第一个项目 1. 简介 1.1 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型.接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录. 如何获取Mybatis? GitHub 源码:https://gith

MVC + EF 框架 对数据库做增删改查

这几天一直在看MVC 开发模式,其中借助EF框架对数据库进行 增删改查操作 现在就小小的总结一下吧 在使用EF操作数据库时,会首先添加 ADO.NET数据模型,这时,会为我们添加一个数据上下文类,使用这个类的对象可以对数据库做任何操作.所以在使用EF操作数据库之前 需要创建数据上下文对象. MyDatabaseEntities mde = new MyDatabaseEntities(); 1.使用EF 对数据库 做增加操作 1.1 创建一个需要被操作数据表的对象(一般来说 ,一张表就是一个实体

asp.net下利用MVC模式实现Extjs表格增删改查

在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式. 今天就来写一个这样的例子.欢迎大家交流指正. 首先简单介绍一下MVC模式,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分.通常模型对象负责在数据库中存取数据. View(视图) 是应用程序中处理数据显示的部分.通常视图是依据模型

【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表

提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表.今天我们来一起了解一下什么是报表,报表的结构.构成元素,以及为什么需要报表. 什么是报表 简单的说:报表就是通过表格.图表等形式来动态显示数据,并为使用者提供浏览.打印.导出和分析的功能,可以用公式表示为: 报表 = 多样的布局 + 动态的数据 + 丰富的输出 报表通常包含以下组成部分: 报表首页:在报表的开始处,用来显示报表的标题.图形或说明性文字,每份报表只有一个报表首页. 页眉:用来显示报表中的字段名或对记录的

MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)

最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求.以下是在利用网上资源.与同事探讨下,完成的代码. 首先我们需要有定义好的实体类.以下是截取了项目中用到的部分代码. 1 public class QyggDocuments implements java.io.Serializable { 2 3 private static final long serialVersionUID = -2543382529255041149L; 4 5 private Stri

.net MVC模式下easyui datagrid控件分页

此参照一位仁兄代码,稍作修改 视图代码: <div id="tab" class="easyui-tabs" data-options="tools:'#tab-tools'" style="width:800px;height:400px"> <div title="****" style="padding:0px;"> <div class="