EF复习第三次课:增删查改

要实现的效果图:
在这里插入图片描述
主要功能:
(1)点击删除,弹出确认取消框,点确认完成删除,点取消返回;
(2)状态的显示,如果是0则非置顶,前台不显示;如果是1则置顶,前台的状态一列则显示置顶
(3)操作栏的置顶:点击置顶,状态更改为置顶,点击取消置顶,状态栏为空。

实现步骤:
一、数据库的搭建以及添加数据
在这里插入图片描述

在这里插入图片描述
id为主键,自增1
pushTime为系统当前时间
states默认值为0
在这里插入图片描述
在这里插入图片描述
步骤二:
打开VS,创建四个文件夹:Model、DAL、BLL、Images
(1)在Model文件夹上右击选择添加、新建项
在这里插入图片描述
在这里插入图片描述
以下步骤省略

(2)实体数据模型建好之后,根据题目要求写DAL层的代码:查询所有、查询对象、新增、添加、修改等。

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using XinXian.Model;

namespace XinXian.DAL
{
    public class NewsDAL
    {
        /// <summary>
        /// 查询所有
        /// </summary>
        /// <returns></returns>
        public static List<tb_news> SelectAll()
        {
            using (ChangeDBEntities db=new ChangeDBEntities())
            {
                var list = db.tb_news.ToList();
                return list;
            }
        }

        /// <summary>
        /// 根据id查询某一个
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static tb_news SelectByID(int id)
        {
            using (ChangeDBEntities db=new ChangeDBEntities())
            {
                var news = db.tb_news.Where(p => p.id == id).SingleOrDefault();
                return news;
            }
        }
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static int Delete(int id)
        {
            using (ChangeDBEntities db=new ChangeDBEntities())
            {
                //根据id查询对象
                var news = db.tb_news.Where(p => p.id == id).SingleOrDefault();
                if (news!=null)
                {
                    db.tb_news.Remove(news);
                }
                return db.SaveChanges();
            }
        }

        /// <summary>
        /// 更新状态
        /// </summary>
        /// <param name="tb"></param>
        /// <returns></returns>
        public static int UpdateState(tb_news tb)
        {
            using (ChangeDBEntities db=new ChangeDBEntities())
            {
                db.Entry<tb_news>(tb).State = System.Data.Entity.EntityState.Modified;
                return db.SaveChanges();
            }
        }
    }
}

(3)BLL层的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using XinXian.Model;
using XinXian.DAL;

namespace XinXian.BLL
{
    public class NewsBLL
    {
        /// <summary>
        /// 查询所有
        /// </summary>
        /// <returns></returns>
        public static List<tb_news> SelectAll()
        {
            return NewsDAL.SelectAll();
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static bool Delete(int id)
        {
            return NewsDAL.Delete(id) > 0;
        }

        /// <summary>
        /// 根据id查询某一个
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static tb_news SelectByID(int id)
        {
            return NewsDAL.SelectByID(id);
        }

        /// <summary>
        /// 更新状态
        /// </summary>
        /// <param name="tb"></param>
        /// <returns></returns>
        public static bool UpdateState(tb_news tb)
        {
            return NewsDAL.UpdateState(tb) > 0;
        }
        }
}

步骤三:
创建Web窗体
在这里插入图片描述
这里我们用Repeater控件实现:
(1)ReapterWeb.aspx中的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReapterWeb.aspx.cs" Inherits="XinXian.ReapterWeb" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style type="text/css">
        .main{
            width:980px;
            margin:0px auto;
        }
        .maincontent img{
            width:100px;
            height:100px;
        }
        .maincontent table th,td{
            border:1px solid black;
            text-align:center;
        }
        .positionTop{
            margin-left:10px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div class="main">
            <div class="topcontent">
                <h2>商品后台管理——促销信息</h2>
            </div>
            <div class="maincontent">
                <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
                    <HeaderTemplate>
                        <table style="width: 100%;">
                            <tr>
                                <th>图片</th>
                                <th>标题</th>
                                <th>内容</th>
                                <th>发布日期</th>
                                <th>状态</th>
                                <th>操作</th>
                            </tr>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <tr>
                            <td>
                                <img src='Images/<%#Eval("photoUrl") %>' /></td>
                            <td><%#Eval("title") %></td>
                            <td><%#Eval("content") %></td>
                                <td><%# DateTime.Parse( Eval("pushTime").ToString()).ToString( "yyyy年MM月dd日 ")  %></td>
                                <td><%#Eval("states").ToString()=="0"?"":"置顶" %></td>
                            <td>
                                <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%#Eval("id") %>' CommandName="sc" OnClientClick="return confirm('确认删除吗?')">删除</asp:LinkButton>
                                <asp:LinkButton ID="LinkButton2" runat="server" CssClass="positionTop" CommandArgument='<%#Eval("id") %>' CommandName="zd"  ><%#Eval("states").ToString()=="0"?"置顶":"取消置顶" %></asp:LinkButton></td>
                        </tr>
                    </ItemTemplate>
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
                </asp:Repeater>
            </div>
        </div>
    </form>
</body>
</html>

(2)ReapterWeb.aspx.cs中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using XinXian.Model;
using XinXian.BLL;

namespace XinXian
{
    public partial class ReapterWeb : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                NewMethod();
            }
        }

        private void NewMethod()
        {
            this.Repeater1.DataSource = NewsBLL.SelectAll();
            this.Repeater1.DataBind();
        }

        protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandName=="sc")
            {
                //获取id
                int id = int.Parse(e.CommandArgument.ToString());
                if (NewsBLL.Delete(id))
                {
                    Response.Write("<script>alert('删除成功')</script>");
                    //重新绑定
                    NewMethod();
                }
            }
            if (e.CommandName=="zd")
            {
                //获取改行的id
                int id =int.Parse( e.CommandArgument.ToString());
                //查找对象
                tb_news tb = NewsBLL.SelectByID(id);
                string states = tb.states.ToString();
                if (states=="0")
                {
                    tb.states = 1;
                    //调用更新方法
                    if (NewsBLL.UpdateState(tb))
                    {
                        NewMethod();
                    }
                }
                else
                {
                    tb.states = 0;
                    if (NewsBLL.UpdateState(tb))
                    {
                        NewMethod();
                    }
                }
            }
        }
    }
}

完成了!

接下来使用GridView控件实现相同的操作

步骤一:在页面拖入一个GridView控件
在这里插入图片描述
在设计视图:编辑列
在这里插入图片描述

在这里插入图片描述
图片、发布日期、状态、操作需要转换为TemplateField

GridView.aspx中的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridView.aspx.cs" Inherits="XinXian.GridView" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style type="text/css">
        .main {
            width: 980px;
            margin: 0px auto;
        }
        .maincontent img{
            width:100px;
            height:100px;
            
        }
        .maincontent table th,td{
            width:200px;
            text-align:center;
        }
        .zdStyle{
            margin-left:20px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div class="main">
            <div class="topmain">
                <h2>商品后台管理——促销信息</h2>
            </div>
            <div class="maincontent">
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCommand="GridView1_RowCommand">
                    <Columns>
                        <asp:TemplateField HeaderText="图片">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <img src='Images/<%#Eval("photoUrl") %>' />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="title" HeaderText="标题" />
                        <asp:BoundField DataField="content" HeaderText="内容" />
                        <asp:TemplateField HeaderText="发布日期">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("pushTime") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <%# DateTime.Parse( Eval("pushTime").ToString()).ToString("yyyy年MM月dd日") %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="状态">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("states") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <%#Eval("states").ToString()=="0"?"":"置顶" %>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="操作">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%#Eval("id") %>' CommandName="sc" OnClientClick="return confirm('确认删除吗?')">删除</asp:LinkButton><asp:LinkButton ID="LinkButton2" runat="server"  CommandArgument='<%#Eval("id") %>' CommandName="zd" CssClass="zdStyle"><%#Eval("states").ToString()=="0"?"置顶":"取消置顶" %></asp:LinkButton>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </div>
        </div>
    </form>
</body>
</html>

注意的几个点:
(1)图片
在这里插入图片描述
(2)发布日期
在这里插入图片描述
(3)状态
在这里插入图片描述
(4)操作
在这里插入图片描述

GridView.aspx.cs中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using XinXian.Model;
using XinXian.BLL;

namespace XinXian
{
    public partial class GridView : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //初次加载页面时,绑定所有数据
                InitGridView();
            }
        }
        /// <summary>
        /// 绑定所有数据
        /// </summary>
        private void InitGridView()
        {
            this.GridView1.DataSource = NewsBLL.SelectAll();
            this.GridView1.DataBind();
        }

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName=="sc")
            {
                //获取这一行的id
                int id = int.Parse(e.CommandArgument.ToString());
                //调用BLL层删除的方法
                if (NewsBLL.Delete(id))
                {
                    //删除成功之后重新绑定数据
                    InitGridView();
                }
            }
            if (e.CommandName=="zd")
            {
                //获取这一行的id
                int id = int.Parse(e.CommandArgument.ToString());
                //根据id查询该对象
                tb_news tb = NewsBLL.SelectByID(id);
                //声明变量用来接收对象的状态
                string states = tb.states.ToString();
                //判断states的值,为0则改为1 ,为1则改为0
                if (states=="0")
                {
                    //将1赋值给该对象的states属性
                    tb.states = 1;
                    //调用BLL层更新的方法
                    if (NewsBLL.UpdateState(tb))
                    {
                        InitGridView();
                    }

                }
                else
                {
                    //将1赋值给该对象的states属性
                    tb.states = 0;
                    //调用BLL层更新的方法
                    if (NewsBLL.UpdateState(tb))
                    {
                        InitGridView();
                    }
                }

            }
        }
    }
}

最终效果图:
在这里插入图片描述

【使用教程】 一、环境配置 1、建议下载anaconda和pycharm 在anaconda中配置好环境,然后直接导入到pycharm中,在pycharm中运行项目 anaconda和pycharm安装及环境配置参考网上博客,有很多博主介绍 2、在anacodna中安装requirements.txt中的软件包 命令为:pip install -r requirements.txt 或者改成清华源后再执行以上命令,这样安装要快一些 软件包都安装成功后才算成功 3、安装好软件包后,把anaconda中对应的python导入到pycharm中即可(不难,参考网上博客) 二、环境配置好后,开始训练(也可以训练自己数据集) 1、数据集准备 需要准备yolo格式的目标检测数据集,如果不清楚yolo数据集格式,或者有其他数据训练需求,请看博主yolo格式各种数据集集合链接:https://blog.csdn.net/DeepLearning_/article/details/127276492 里面涵盖了上百种yolo数据集,且在不断更新,基本都是实际项目使用。来自于网上收集、实际场景采集制作等,自己使用labelimg标注工具标注的。数据集质量绝对有保证! 本项目所使用的数据集,见csdn该资源下载页面中的介绍栏,里面有对应的下载链接,下载后可直接使用。 2、数据准备好,开始修改配置文件 参考代码data文件夹下的banana_ripe.yaml,可以自己新建一个不同名称的yaml文件 train:训练集的图片路径 val:验证集的图片路径 names: 0: very-ripe 类别1 1: immature 类别2 2: mid-ripe 类别3 格式按照banana_ripe.yaml照葫芦画瓢就行,不需要过多参考网上的 3、修改train_dual.py中的配置参数,开始训练模型 方式一: 修改点: a.--weights参数,填入'yolov9-s.pt',博主训练的是yolov9-s,根据自己需求可自定义 b.--cfg参数,填入 models/detect/yolov9-c.yaml c.--data参数,填入data/banana_ripe.yaml,可自定义自己的yaml路径 d.--hyp参数,填入hyp.scratch-high.yaml e.--epochs参数,填入100或者200都行,根据自己的数据集可改 f.--batch-size参数,根据自己的电脑性能(显存大小)自定义修改 g.--device参数,一张显卡的话,就填0。没显卡,使用cpu训练,就填cpu h.--close-mosaic参数,填入15 以上修改好,直接pycharm中运行train_dual.py开始训练 方式二: 命令行方式,在pycharm中的终端窗口输入如下命令,可根据自己情况修改参数 官方示例:python train_dual.py --workers 8 --device 0 --batch 16 --data data/coco.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights '' --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15 训练完会在runs/train文件下生成对应的训练文件及模型,后续测试可以拿来用。 三、测试 1、训练完,测试 修改detect_dual.py中的参数 --weights,改成上面训练得到的best.pt对应的路径 --source,需要测试的数据图片存放的位置,代码中的test_imgs --conf-thres,置信度阈值,自定义修改 --iou-thres,iou阈值,自定义修改 其他默认即可 pycharm中运行detect_dual.py 在runs/detect文件夹下存放检测结果图片或者视频 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值