zoukankan      html  css  js  c++  java
  • Asp.NET笔记(八)--使用linq+三层架构实现数据的修改

    一、在同页面修改个别已知字段的值

      1、DAL层中  

         /// <summary>
            /// 处理缺陷
            /// </summary>
            /// <param name="id">缺陷id</param>
            /// <returns>是否处理成功</returns>
            public bool ChuliDefect(int id)
            {
                //通过id找到缺陷信息
                Defect defect = (from i in db.Defect
                                where i.DefectID == id
                                select i).FirstOrDefault();
                //修改缺陷信息
                defect.DefectState = 2;//2为已处理
                defect.DealTime = DateTime.Now; //处理事件为当前时间
                //将保持提交给数据库
                db.SubmitChanges();
                return true;
            }    

    说明:因为修改字段是固定的,所以我们只需要通过id找到要修改的实体字段,即可直接修改数据  

    2、BLL层中

     /// <summary>
            /// 处理缺陷
            /// </summary>
            /// <param name="id">缺陷id</param>
            /// <returns>是否处理成功</returns>
            public bool ChuliDefect(int id)
            {
                return dAL.ChuliDefect(id);
            }

      3、UI层中

     前端显示页面

        <asp:Button ID="Button1" runat="server" Text="处理缺陷" Visible='<%#Eval("DefectState").ToString()=="1"?true:false %>' CommandName="ChuLi" CommandArgument='<%#Eval("DefectID") %>' />

     后台RowCommand事件中

     protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "ChuLi")
                {
                    //获取缺陷ID
                    int id = int.Parse( e.CommandArgument.ToString());
                    if (bll.ChuliDefect(id))
                    {
                        Response.Write("<script>alert('处理成功!')</script>");
              
    //重新加载GridView实现刷新
                List<DeviceDefect> list = bll.SelectDeviceDefect();

    this.GridView1.DataSource = list;
    this.GridView1.DataBind();
                    }
                    else
                    {
                        Response.Write("<script>alert('处理失败!')</script>");
                    }
                }
            }

    -----------------------------------------------------------------------------------------------------------------------------------------------

    二、需要跳转页面,由用户输入要修改的值进行修改

     如:

      第一步:实现跳转修改页面,并且在页面中加载出要修改的数据

      所以在跳转时必须告诉页面,为要修改的是哪一条数据,用参数传递的方法把id传值给新页面

         跳转方法一:直接在页面跳转

      <asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl='<%# "~/AddFurnitureWeb.aspx?id="+Eval("Id") %>'>编辑</asp:LinkButton>

        这种拼接模式容易出错,导致整个控件创建错误,但是简明直观

        跳转方法二:进入到后台代码跳转

      前台: <asp:LinkButton ID="LinkButton2" runat="server" CommandName="edit" CommandArgument='<%#Eval("Id") %>'>编辑</asp:LinkButton>

      protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
            {
                if (e.CommandName == "edit")//判断页面中设置的名称是否edit
                {
                    string id = e.CommandArgument.ToString();//获取页面中的传值id
                    Response.Redirect("AddFurnitureWeb.aspx?id=" + id); //拼接url参数
                }
            }

        这种拼接模式不易出错但代码量大,大家酌情选择,目的都是将id拼接到URL中进行数据传递

    第二步:在修改页面加载事件中,加载页面需要呈现的数据  

     WarehouseBLL bll = new WarehouseBLL();
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    //准备工作:绑定DropDownList1数据
                    this.DropDownList1.DataSource = bll.SelectWarehouse();
                    this.DropDownList1.DataTextField = "WarehouseName";
                    this.DropDownList1.DataValueField = "WarehouseId";
                    this.DropDownList1.DataBind();
    
    
                    //获取URL参数传递的id值
                    int id = int.Parse(Request.QueryString["Fid"]);
    
                    //通过id查询要修改的实体对象
                    List<Furniture> list = bll.SelectFurniture();
                    Furniture f = list.Where(m => m.Id == id).FirstOrDefault();
    
                    //将实体对象的值赋值给页面
                    txtFName.Text = f.FurnitureName; //名称
                    txtPinPai.Text = f.Brand; //品牌
                    txtSalNum.Text = f.SoldCount.ToString();//销售数量
                    txtTotalCount.Text = f.TotalCount.ToString();//总数量
                    DropDownList1.SelectedValue = f.WarehouseId.ToString(); //所属仓库
                }

    第三步:实现修改功能

      分别在DAL,BLL和UI层写传递数据

      DAL层:

     /// <summary>
            /// 修改家具信息
            /// </summary>
            /// <param name="newFurn">修改后的实体对象</param>
            /// <returns>是否修改成功</returns>
            public bool EditFurniture(Furniture newFurn)
            {
                //实例化上下文数据
                DataFurnitureManagementDataContext db = new DataFurnitureManagementDataContext();
    
                //因为修改的时候不修改主键值,所以可以用个新对象的主键id查询到表中要修改的那个具体对象
                Furniture furniture = (from i in db.Furniture
                                       where i.Id == newFurn.Id
                                       select i).FirstOrDefault();
                //判断实体对象值是否为空
                if (furniture != null)
                {
                    //将修改后的实体对象值一一赋值给查询到的对象
                    furniture.FurnitureName = newFurn.FurnitureName;
                    furniture.Brand = newFurn.Brand;
                    furniture.SoldCount = newFurn.SoldCount;
                    furniture.TotalCount = newFurn.TotalCount;
                    furniture.WarehouseId = newFurn.WarehouseId;
                    //注意,这个不要写
                    //furniture.AddTime = newFurn.AddTime; //新实体中没有赋值的字段,这里不用添加,添加后会报错
                    //将结果保存到数据库(一定要保存)
                    db.SubmitChanges();
    
                    return true;
                }
                else
                {
                    return false;
                }
            }

    BLL层中:

         /// <summary>
            /// 修改家具信息
            /// </summary>
            /// <param name="newFurn">修改后的实体对象</param>
            /// <returns>是否修改成功</returns>
            public bool EditFurniture(Furniture newFurn)
            {
                //实例化DAL
                WarehouseDAL dAL = new WarehouseDAL();
                return dAL.EditFurniture(newFurn);
            }

    UI层中:

     //修改按钮
            protected void Button1_Click(object sender, EventArgs e)
            {
                //创建一个新的实体(修改后的实体),并对新实体赋值
                Furniture newFurn = new Furniture();
                newFurn.Id = int.Parse(Request.QueryString["Fid"]);  //ID一定要赋值,不然dal层找不到要修改的对象
                newFurn.FurnitureName = txtFName.Text; 
                newFurn.Brand = txtPinPai.Text;
                newFurn.SoldCount = int.Parse(txtSalNum.Text);
                newFurn.TotalCount = int.Parse(txtTotalCount.Text);
                newFurn.WarehouseId = int.Parse(this.DropDownList1.SelectedValue);
    
                //调用修改方法将新创建的实体对象传值给dal层进行修改
                if (bll.EditFurniture(newFurn))
                {
                    Response.Write("<script>alert('修改成功!')</script>");
                }
                else
                {
                    Response.Write("<Script>alert('修改失败!')</Script>");
                }
            }

    这样就可以实现修改功能啦~

    --------------------------------------------------------------------------------

    tips:对比两种修改大家可以发现其实DAL层的写法是非常类似的,只不过后面修改整个实体对象时我们需要修改的字段过多,用实体对象传递为们要修改的参数,会事半功倍!

  • 相关阅读:
    Linux下如何查看版本信息
    java单利模式设计
    MIT 2012 分布式课程基础源码解析-底层通讯实现
    MIT 2012分布式课程基础源码解析-事件管理封装
    MIT 2012分布式课程基础源码解析-线程池实现
    MIT 2012分布式课程基础源码解析一-源码概述
    Leetcode按Tag刷题
    网页搜集系统
    c/c++中的各种字符串转换
    gentoo装X服务器时显卡选择
  • 原文地址:https://www.cnblogs.com/JuneDream/p/14158037.html
Copyright © 2011-2022 走看看