首页 > 其他分享 >Ant for Blazor做单个表的增删查改

Ant for Blazor做单个表的增删查改

时间:2024-02-27 22:59:11浏览次数:29  
标签:BindListData repository void private Id Ant 查改 Blazor model

Ant for Blazor做单个表的增删查改

2024年02月27日花了一天时间弄出来了,基本弄好了,vs2022+blazor server+net8,引用的AntDesign版本是0.17.4 代码里的model和repository是用自己牛腩代码生成器生成的东西,sqlsugar的,记得在program里注入就好

相关代码:

@page "/Student"
@using System.Text.Json
@inject IMessageService _message
@inject ModalService _modalService
@inject DAL.IRepository<Model.Student,int> _repository;
<div style="padding:10px;">




    <Table TItem="Model.Student" DataSource="@datalist" @bind-PageSize="pageSize">
        <TitleTemplate>
            <GridRow>
                <GridCol Span="16">
                    <Title Level="3">Student</Title>
                </GridCol>
                <GridCol Span="4">
                    <Button Type="primary" Icon="@IconType.Outline.PlusSquare" @onclick="PopAdd">新增</Button>
                </GridCol>
                <GridCol Span="4"> 
                    <Search @bind-Value="searchKey" Placeholder="搜索关键字" OnSearch="HandleSearch" />
                </GridCol>
            </GridRow>
        </TitleTemplate>
        <ChildContent>
            <PropertyColumn Title="ID" Property="c=>c.Id">
            </PropertyColumn>
            <PropertyColumn Title="学号" Property="c=>c.StuNo"></PropertyColumn>
            <PropertyColumn Title="姓名" Property="c=>c.StuName">
            </PropertyColumn>
            <PropertyColumn Title="生日" Property="c=>c.Birthday">
            </PropertyColumn>
            <PropertyColumn Title="余额" Property="c=>c.Balance">
            </PropertyColumn>
            <ActionColumn Title="操作">
                <Space>
                    <SpaceItem>
                        <Button Icon="@IconType.Outline.Edit" @onclick="(()=>Edit(context.Id))">编辑</Button>
                    </SpaceItem>
                    <SpaceItem>

                        <Button Danger Icon="@IconType.Outline.Delete" @onclick="(()=>Delete(context.Id))">删除</Button>
                     </SpaceItem>
                 </Space>
             </ActionColumn>
         </ChildContent>
         <PaginationTemplate>
             <div style="margin:10px;">
                 <Pagination ShowTotal=showTotal Total="total" PageSize="pageSize" OnChange="HandlePageChange" />
             </div>
         </PaginationTemplate>
     </Table>

     <Modal Title="@popTitle"
            @bind-Visible="@_visible"
            OnOk="@HandleOk">
         <Form Model="@model"
               LabelColSpan="8"
               WrapperColSpan="16">
             <FormItem Label="学号">
                 <Input @bind-Value="@context.StuNo" />
             </FormItem>
             <FormItem Label="姓名">
                 <Input @bind-Value="@context.StuName" />
             </FormItem>
             <FormItem Label="生日">
                 <DatePicker @bind-Value="@context.Birthday" />
             </FormItem>
             <FormItem Label="余额">
                 <AntDesign.InputNumber @bind-Value="@context.Balance"></AntDesign.InputNumber>
             </FormItem>
         </Form>
     </Modal>
 </div>
 @code {
    Func<PaginationTotalContext, string> showTotal = ctx => $"总共 {ctx.Total} 条数据";
    private List<Model.Student> datalist = new List<Model.Student>();
    private Model.Student model = new Model.Student();
    bool _visible = false;
    private int total = 0;  //总记录数
    private int pageIndex = 1; //第几页
    private int pageSize = 3;  //每页显示多少条数据
    private string popTitle = "新增";
    private string searchKey = "";

    //页面初始化方法
    protected override void OnInitialized()
    {
        base.OnInitialized();
        BindListData();
    }

    //显示分页数据
    public void BindListData()
    {
        var q = _repository.GetAll();
        q = q.Where(a => a.StuName.Contains(searchKey));
        total = q.Count();
        datalist = q.OrderByDescending(a=>a.Id).ToPageList(pageIndex, pageSize);
        StateHasChanged();
    }

    //弹出新增的框框
    public void PopAdd()
    {
        popTitle = "新增";
        _visible = true;
        model = new Model.Student();
    }
    //新增,编辑
    private async Task HandleOk(MouseEventArgs e)
    {
        try
        {
            if (string.IsNullOrEmpty(model.StuNo) || string.IsNullOrEmpty(model.StuName))
            {
                throw new Exception("请把学号和姓名填写完整。");
            }

            Console.WriteLine($"提交的数据:{JsonSerializer.Serialize(model)}");

            if (model.Id == 0)
            { 
                _repository.Insert(model);
                _message.Info("新增成功!");
            }
            else
            { 
                _repository.Update(model);
                _message.Info("编辑成功!");
            }
            _visible = false;
            BindListData();
        }
        catch (Exception ex)
        {
            _visible = true;
            _message.Error("出错:" + ex.Message);
        }


    }

    //分页点击
    public void HandlePageChange(PaginationEventArgs e)
    {
        pageIndex = e.Page;
        BindListData();
    }

    //显示删除确认框
    private void Delete(int id)
    {
        _modalService.Confirm(new ConfirmOptions()
            {
                Title = "是否确认删除?",
                Content = "ID为【" + id + "】的数据!",
                OnOk = (e) =>
                          {
                              Console.WriteLine("删除:"+id);
                              _repository.Delete(a => a.Id == id);
                              BindListData();
                              
                              _message.Info("删除成功!");

                              return Task.CompletedTask;
                          },
                OkType = "danger",
            });
    }

    //显示编辑的框框
    public void Edit(int id)
    {
        popTitle = "编辑";
        model = _repository.FirstOrDefault(a => a.Id == id);
        _visible = true;
    }


    //查询
    public void HandleSearch()
    {
        pageIndex = 1;
        BindListData(); 
    }

}

 

 

 

标签:BindListData,repository,void,private,Id,Ant,查改,Blazor,model
From: https://www.cnblogs.com/niunan/p/18038607

相关文章

  • Semantic Kernel 学习笔记:初步体验用 Semantic Memory 生成 Embedding 并进行语义搜索
    SemanticKernel的Memory有两种实现,一个是SemanticKernel内置的SemanticMemory,一个是独立的KernelMemory,KernelMemory是从SemanticKernel进化而来。关于SemanticMemory的介绍(来源):SemanticMemory(SM)isalibraryforC#,Python,andJavathatwrapsdir......
  • antd proTable 默认展开所有层
    antdproTable默认展开所有层expandable={{defaultExpandAllRows:true}}importReactfrom'react';import{ProTable}from'@ant-design/pro-table';constcolumns=[{title:'Name',dataIndex:'name',ke......
  • [转]MySQL “grant all”与”grant all privileges”授权语句的差别
    原文地址:MySQL“grantall”与”grantallprivileges”的差别|极客笔记在MySQL中,”grantall”与”grantallprivileges”都是用来赋予用户所有权限的语句。然而,在某些情况下,这两种语句的区别是非常明显的。 “grantall”“grantall”语句将授权用户执行操作的所有权......
  • 浙江中控 inplantscada 安装 demo运行报错
    1、卸载inplantscada和杀毒软件。重新安装inplantscada(成功跑起来)。安装虚拟机win7跑不起来。2、还原官网下载的电气demo程序。 成功截图:    没有重装inplantscada和卸载杀毒软件,运行demo报错截图:  备注:建index页面。管理员方式运行,也解决不了,只有重新安装i......
  • MAUI Blazor+MASA开发安卓应用学习笔记 - 设置图标和初始屏幕
    上一期已经成功生成了APK能成功安装到手机上了,图标和初始屏幕很难看,接下来着手修改图标和初始屏幕一、修改图标打开项目文件.csproj,找到以下代码<!--AppIcon--><MauiIconInclude="Resources\AppIcon\appicon.svg"ForegroundFile="Resources\AppIcon\appiconfg.svg"Colo......
  • MAUI Blazor+MASA开发安卓应用学习笔记 - 设置APP格式、名称、版本信息
    上一期说到了如何生成APP应用,生成的文件是AAB格式的,这个格式安装不是很方便,如果能生成APK就好了 一、设置APP格式打开项目文件.csproj,在PropertyGroup下添加属性<AndroidPackageFormat>apk</AndroidPackageFormat>二、设置名称和版本信息在项目文件里,可以设置全局的应用......
  • MAUI Blazor+MASA开发安卓应用学习笔记 - 新建项目和发布
    PS:开个新坑,内容都是全新接触的东西,包括MAUI,Blazor,MASA等等。整个项目都边学习边做的,有什么错的地方望大神指教。 学习开发安卓应用,我们的最终目标就是要生成一个APP应用,并能成功的在手机端打开。那么,我们首先要解决的就是怎么生成APP应用。一、创建一个.NETMAUIBlazor应用(注......
  • 多线程系列(九) -ReentrantLock常用方法详解
    一、简介在上一篇文章中,我们介绍了ReentrantLock类的一些基本用法,今天我们重点来介绍一下ReentrantLock其它的常用方法,以便对ReentrantLock类的使用有更深入的理解。二、常用方法介绍2.1、构造方法ReentrantLock类有两个构造方法,核心源码内容如下:/***默认创建非公平锁*/......
  • Pydantic:强大的Python 数据验证库
    PydanticPydantic是一个在Python中用于数据验证和解析的第三方库。它提供了一种简单且直观的方式来定义数据模型,并使用这些模型对数据进行验证和转换。Pydantic的一些主要特性:类型注解:Pydantic使用类型注解来定义模型的字段类型。你可以使用Python内置的类型、自定义......
  • 使用`react-hooks写法`对`antd的Upload.Dragger上传组件`进行二次封装
    使用react-hooks写法对antd的Upload.Dragger上传组件进行二次封装预期对antd的Upload.Dragger组件进行二次封装,让它的使用方法和Upload.Dragger组件保持一致。让该组件能自动把数据放到对应后端服务器中。让该组件能的value值如果没上传,为数组形式。如果没有值,为空数组。如......