Maui blazor与sqlite开发一个增删改查

news2024/11/27 6:21:56

在android端增删改不能运行。也看不出来是什么,但运行到windows可以运行。

在这里插入图片描述

引入sqlite-net-pcl 开发Model

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SQLite;
namespace MauiAppBlazorapp.Model
{
    internal class TaskJob
    {

        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        public DateTime Date { get; set; }
        public string  TaskName { get; set; }
        public Boolean FinishedFlag { get; set; }

        [SQLite.MaxLength(4000)]
        public string Summary { get; set; }

    }
}

TaskjobService.cs 定义增删改查:

using MauiAppBlazorapp.Model;
using SQLite;

namespace MauiAppBlazorapp.Service
{
    internal class TaskjobService
    {
        private string _dbPath;
        public string StatusMessage { get; set; }
        private SQLiteAsyncConnection conn;

        public TaskjobService(string dbPath)
        {
            _dbPath = dbPath;
        }

        private async Task InitAsync()
        {
            // Don't Create database if it exists
            if (conn != null)
                return;
            // Create database and WeatherForecast Table
            conn = new SQLiteAsyncConnection(_dbPath);
            await conn.CreateTableAsync<TaskJob>();
        }

        public async Task<List<TaskJob>> GetJobAsync()
        {
            await InitAsync();
            return await conn.Table<TaskJob>().ToListAsync();
        }

        public async Task<TaskJob> CreateJobAsync( TaskJob taskjob)
        {
            // Insert
            await conn.InsertAsync(taskjob);
            // return the object with the
            // auto incremented Id populated
            return taskjob;
        }

        public async Task<TaskJob> UpdateJobAsync(TaskJob taskjob)
        {
            // Update
            await conn.UpdateAsync(taskjob);
            // Return the updated object
            return taskjob;
        }

        public async Task<TaskJob> DeleteJobAsync(
            TaskJob taskjob)
        {
            // Delete
            await conn.DeleteAsync(taskjob);
            return taskjob;
        }

    }
}

同时在MauiProgram.cs加入数据库的链接:

using MauiAppBlazorapp.Service;
using Microsoft.Extensions.Logging;

namespace MauiAppBlazorapp
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                });

            builder.Services.AddMauiBlazorWebView();

#if DEBUG
    		builder.Services.AddBlazorWebViewDeveloperTools();
    		builder.Logging.AddDebug();
#endif

            //builder.Services.AddSingleton<WeatherForecastService>();
            // Set path to the SQLite database (it will be created if it does not exist)
            var dbPath =
                Path.Combine(
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
                    @"Taskjob.db");
            // Register WeatherForecastService and the SQLite database
            builder.Services.AddSingleton<TaskjobService>(
                s => ActivatorUtilities.CreateInstance<TaskjobService>(s, dbPath));
            return builder.Build();
        }
    }
}

相关的TaskjobList.razor代码:引入@using MauiAppBlazorapp.Model
注入服务 @inject Service.TaskjobService Taskserice @code里的代码以前以为是typescript 现在看来是C#

@page "/taskList"
@using MauiAppBlazorapp.Model
@inject Service.TaskjobService Taskserice
<h1>任务例表</h1>
<p style="color:red">@Error</p>
@if (tasklists == null)
{
    <p><em>无任务...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>时间</th>
                <th>工作</th>
                <th>完成</th>
                <th>说明</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in tasklists)
            {
                <tr>
                    <td>@item.Date.ToShortDateString()</td>
                    <td>@item.TaskName</td>
                    <td>
                        <!-- 将 Switch 替换为 Checkbox -->
                        <input type="checkbox" @bind="item.FinishedFlag" />
                    </td>
                    <td>@item.Summary</td>
                    <td>
                        <button class="btn btn-primary" @onclick="(() => EditTask(item))"> 修改 </button>
                    </td>
                </tr>
            }
        </tbody>
    </table>
    <p>
        <button class="btn btn-success" @onclick="AddNewTask"> 增加任务 </button>
    </p>
    @if (ShowPopup)
    {
        <div class="modal" tabindex="-1" style="display:block" role="dialog">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <h3 class="modal-title">修改任务</h3>
                        <button type="button" class="close" @onclick="ClosePopup">
                            <span aria-hidden="true">X</span>
                        </button>
                    </div>
                    <div class="modal-body">
                        <div class="form-group">
                            <label for="taskName">任务</label>
                            <input class="form-control" type="text" id="taskName" @bind="objtask.TaskName" />
                        </div>
                        <div class="form-group">
                            <label>完成</label>
                            <!-- 将 Switch 替换为 Checkbox -->
                            <input type="checkbox" @bind="objtask.FinishedFlag" />
                        </div>
                        <div class="form-group">
                            <label for="summary">说明</label>
                            <input class="form-control" type="text" id="summary" @bind="objtask.Summary" />
                        </div>
                        <button class="btn btn-success" @onclick="SaveTask">保存</button>
                        @if (objtask.Id > 0)
                        {
                            <button class="btn btn-danger" @onclick="DeleteTask">删除</button>
                        }
                    </div>
                </div>
            </div>
        </div>
    }
}

@code
{
    string Error = "";
    List<TaskJob> tasklists = new List<TaskJob>();
    TaskJob objtask = new TaskJob();
    bool ShowPopup = false;
    protected override async Task OnInitializedAsync()
    {
        tasklists = await Taskserice.GetJobAsync();
    }
    void AddNewTask()
    {
        objtask = new TaskJob();
        objtask.Id = 0;
        ShowPopup = true;
    }
    void EditTask(TaskJob weatherForecast)
    {
        objtask = weatherForecast;
        ShowPopup = true;
    }
    void ClosePopup()
    {
        ShowPopup = false;
    }
    async Task SaveTask()
    {
        ShowPopup = false;
        Error = "";
        try
        {
            if (objtask.Id == 0)
            {
                TaskJob objTask = new TaskJob();
                objTask.Date = System.DateTime.Now;
                objTask.Summary = objtask.Summary;
                objTask.TaskName = objtask.TaskName;
                objTask.FinishedFlag = objtask.FinishedFlag;
                var NewWeatherForecast = await Taskserice.CreateJobAsync(objTask);
                tasklists.Add(NewWeatherForecast);
            }
            else
            {
                await Taskserice.UpdateJobAsync(objtask);
            }
        }
        catch (Exception ex)
        {
            Error = ex.Message;
        }
    }

    async Task DeleteTask()
    {
        ShowPopup = false;
        try
        {
            Error = "";
            await Taskserice.DeleteJobAsync(objtask);
            tasklists.Remove(objtask);
        }
        catch (Exception ex)
        {
            Error = ex.Message;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1318860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入探讨线程池及其关键参数

目录 引言 1. 线程池概述 2. 线程池的工作原理 3. 线程池的关键参数 4. 线程池的最佳实践 5. 实际应用场景 结论 引言 在并发编程领域&#xff0c;线程池是一种重要的工具&#xff0c;用于管理和重用线程&#xff0c;提高程序的性能和效率。线程池可以有效地管理线程的生…

VMware----基于 VMware 玩转 CentOS 虚拟机创建、克隆以及配置后台运行

查看原文 文章目录 一、安装 Vmware二、创建 CentOS7 系统的虚拟机三、克隆虚拟机四、设置虚拟机后台运行 一、安装 Vmware &#xff08;1&#xff09;打开VMware下载地址页面&#xff0c;滑动页面&#xff0c;找到如下界面&#xff0c;点击【下载】 &#xff08;2&#xff…

计算机服务器中了mkp勒索病毒怎么办,mkp勒索病毒解密恢复

在计算机技术飞速发展的今天&#xff0c;越来越多的企业走向了数字化办公模式&#xff0c;极大地方便了企业的生产运营&#xff0c;为企业带来了更高的效率。但网络威胁无处不在&#xff0c;网络威胁手段随着计算机技术的不断发展也在不断增加。近期&#xff0c;云天数据恢复中…

数据仓库与数据挖掘c5-c7基础知识

chapter5 分类 内容 分类的基本概念 分类 数据对象 元组(x,y) X 属性集合 Y 类标签 任务 基于有标签的数据&#xff0c;学习一个分类模型&#xff0c;通过这个分类模型&#xff0c;可以把一组属性x映射到一个特定的类别y上 类别y 提前设定好的--如&#xff1a;学生…

【CMU 15-445】Lecture 12: Query Execution I 学习笔记

Query Execution I Processing ModelsIterator ModelMaterialization ModelVectorization Model Access MethodsSequential ScanIndex Scan Modification QueriesHalloween Problem 本节课主要介绍SQL语句执行的相关机制。 Processing Models 首先是处理模型&#xff0c;它定义…

nodejs微信小程序+python+PHP邮件过滤系统的设计与实现-计算机毕业设计推荐

邮件过滤系统综合网络空间开发设计要求。该系统主要设计并完成了管理过程中的用户登录、个人信息修改、邮件信息、垃圾箱、意见反馈、论坛等功能。该系统操作简便&#xff0c;界面设计简洁&#xff0c;不但可以基本满足本行业的日常管理工作&#xff0c; 目的是将邮件过滤通过网…

李宏毅机器学习2023课程记录(1)--课程介绍

李宏毅机器学习2023课程记录(1)–课程介绍 在这里&#xff0c;记录我最近听的李宏毅老师的机器学习课程的一些笔记和感想&#xff0c;进行归纳总结同时方便后续复习回顾。 注&#xff1a;这门课虽然叫做机器学习&#xff0c;但是李宏毅老师讲课主要以深度学习的技术&#xff0…

Dagger2基本使用3之其他使用

一&#xff0c;Dagger容器中添加不是Dagger创建的实力对象 在实际使用中&#xff0c;有些类的已经创建好了&#xff0c;dagger需要使用这些类&#xff0c;就需要通过参数传入&#xff0c;下面是android中传入application实例的一个例子 1&#xff0c;创建module //创建需要传…

Python 函数与参数传递

一、函数的定义和调用 在python中&#xff0c;如果经常重复使用一些代码&#xff0c;可以把它们创建为一个函数&#xff0c;这可以大大减少编程工作量。用户创建的函数叫做自定义函数。定义函数时要使用def关键字&#xff0c;格式如下&#xff1a; def 函数名&#xff08;参数…

探索神奇之旅:点击链接a,开启你的前端之旅!

一、代码全文 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>链接</title> </head> <body> <h3>不同的链接</h3> <!-- 使用<a>标签创建链接&#xf…

【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51

代码工程。 http://dt4.8tupian.net/2/28880a66b12880.pg3这段代码是用于一个数字拔河游戏的嵌入式系统&#xff0c;采用了基于8051架构的单片机&#xff0c;使用Keil C51编译器。 主要功能包括&#xff1a; 数码管显示&#xff1a;使用了四个数码管&#xff08;通过P2的控制…

Windows中安装Git软件和TortoiseGit软件

1、git软件下载地址 https://git-scm.com/download/win 2、TortoiseGit软件下载 >https://tortoisegit.org/download/ 3、软件安装 4、环境安装说明 上面介绍的是在Windows中使用git&#xff0c;如果你电脑已经装了Ubuntu系统&#xff0c;可以直接在Ubuntu中使用git命令提…

neuq-acm预备队训练week 9 P1119 灾后重建

解题思路 本题可以用最短路算法——Floyd AC代码 #include<bits/stdc.h> #define inf 1e9 using namespace std; const int N 2e2 50; int n, m, q, now 0, a, b, c, t[N], G[N][N];int main() {scanf("%d%d", &n, &m);for(int i 0;i<n;i)sc…

neuq-acm预备队训练week 9 P8604 [蓝桥杯 2013 国 C] 危险系数

题目背景 抗日战争时期&#xff0c;冀中平原的地道战曾发挥重要作用。 题目限制 题目描述 地道的多个站点间有通道连接&#xff0c;形成了庞大的网络。但也有隐患&#xff0c;当敌人发现了某个站点后&#xff0c;其它站点间可能因此会失去联系。 我们来定义一个危险系数 DF…

设计模式 简单工厂 工厂方法模式 抽象工厂模式 Spring 工厂 BeanFactory 解析

工厂模式介绍 工厂模式是我们最常用的实例化对象模式了&#xff0c;是用工厂方法代替new操作的一种模式。它是创建型模式。 简单工厂 简单工厂模式是指由一个工厂对象决定创建出哪一种产品类的实例, 但它不属于GOF 23种设计模式 简单工厂适用于工厂类负责创建的对象较少的场景,…

华为鸿蒙应用--欢迎页SplashPage+倒计时跳过(自适应手机和平板)-ArkTs

鸿蒙ArkTS 开发欢迎页SplashPage倒计时跳过&#xff0c;可自适应平板和手机&#xff1a; 一、SplashPage.ts import { BreakpointSystem, BreakPointType, Logger, PageConstants, StyleConstants } from ohos/common; import router from ohos.router;Entry Component struct…

pytorch——支持向量机

1、任务要求 针对已知类别的5张卧室照片(标签为1)和5张森林照片(标签为-1)所对应的矩阵数据进行分类训练,得到训练集模型;再利用支持向量机对另外未知类别的5张卧室照片和5张森林照片数据进行测试分类(二分类)&#xff0c;得到分类结果及其准确率。 2、先导入查看基本数据 3、…

【JVM】4.运行时数据区(程序计数器、虚拟机栈)

文章目录 4.JVM的运行时数据区4.1 程序计数器4.2 Java虚拟机栈4.3 虚拟机栈内存溢出 4.JVM的运行时数据区 4.1 程序计数器 程序计数器&#xff08;PC&#xff09;会记录着下一行字节码指令的地址。执行完当前指令后&#xff0c;PC刷新&#xff0c;JVM的执行引擎根据程序计数器…

和鲸科技CEO范向伟受邀出席港航数据要素流通与生态合作研讨会,谈数据资产入表的战略机会

近日&#xff0c;由上海虹口数字航运创新中心、龙船&#xff08;北京&#xff09;科技有限公司&#xff08;下简称“龙船科技”&#xff09;、华东江苏大数据交易中心联合举办的“港航数据要素流通与生态合作研讨会”圆满落幕&#xff0c;来自港航领域的近百名企业代表共同参与…

JVM基础入门

JVM 基础入门 JVM 基础 聊一聊 Java 从编码到执行到底是一个怎么样的过程&#xff1f; 假设我们有一个文件 x.Java&#xff0c;你执行 javac&#xff0c;它就会变成 x.class。 这个 class 怎么执行的&#xff1f; 当我们调用 Java 命令的时候&#xff0c;class 会被 load 到…