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

在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.mfbz.cn/a/252137.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工具在手,创作无忧:一键下载安装Auto CAD工具,让艺术创作更加轻松愉悦!

不要再浪费时间在网上寻找Auto CAD的安装包了&#xff01;因为你所需的一切都可以在这里找到&#xff01;作为全球领先的设计和绘图软件&#xff0c;Auto CAD为艺术家、设计师和工程师们提供了无限的创作潜力。不论是建筑设计、工业设计还是室内装饰&#xff0c;Auto CAD都能助…

HYDRA爆破之王(服务多)(用法简单)

#江南的江 #每日鸡汤&#xff1a;如果你向神求助&#xff0c;说明你相信神的能力。如果神没有帮助你&#xff0c;说明神相信你的能力。 #初心和目标&#xff1a;善用网络安全。。。 HYDRA 1.Hydra的简介 --------------------------------------------------------------------…

写递归函数的一些思考

当编写递归函数时&#xff0c;有几个关键的思考点可以帮助你设计和实现递归算法&#xff1a; 定义递归的基本情况&#xff1a;确定递归函数应该在何时终止&#xff0c;即递归的基本情况。这是一个递归的出口条件&#xff0c;确保递归不会无限进行下去。基本情况应该是可以直接求…

RabbitMq交换机详解

目录 1.交换机类型2.Fanout交换机2.1.声明队列和交换机2.2.消息发送2.3.消息接收2.4.总结 3.Direct交换机3.1.声明队列和交换机3.2.消息接收3.3.消息发送3.4.总结 4.Topic交换机4.1.说明4.2.消息发送4.3.消息接收4.4.总结 5.Headers交换机5.1.说明5.2.消息发送5.3.消息接收5.4.…

Ubuntu 常用命令之 ln 命令用法介绍

ln命令在Ubuntu系统中用于创建硬链接或符号链接。硬链接是指向文件的物理地址&#xff0c;而符号链接&#xff08;也称为软链接&#xff09;是指向文件路径的引用。 命令格式&#xff1a;ln [选项]... [-T] 目标&#xff08;源文件&#xff09; 链接&#xff08;目标文件&…

12.16_黑马数据结构与算法笔记Java

目录 167 B树 remove 168 B树 remove 搭架子 169 B树 remove case1-4 170 B树 remove case5-6分析 171 B树 remove case5 旋转 172 B树 remove case5 合并 173 B树 remove case6 174 B树 remove 演示1 175 B树 remove 演示2 176 哈希表 概述 177 哈希表 hash码映射索…

将html的radio单选框自定义样式为正方形和对号

将html的radio单选框自定义样式为正方形和对号 背景&#xff1a; 如何能把html的<input type"radio" name"option">改成自定义的样式呢&#xff1f;比如想要把他变成正方形&#xff0c;选中的时候是对号。默认的样式太丑了 默认样式&#xff1a; 自…

LCR 146. 螺旋遍历二维数组

解题思路&#xff1a; class Solution {public int[] spiralArray(int[][] array) {if(array.length 0) return new int[0];int l 0, r array[0].length - 1;int t 0, b array.length - 1;int x 0;int[] res new int[(r 1) * (b 1)];while(true) {for(int i l; i <…

Linux(23):Linux 核心编译与管理

编译前的任务&#xff1a;认识核心与取得核心原始码 Linux 其实指的是核心。这个【核心(kernel)】是整个操作系统的最底层&#xff0c;他负责了整个硬件的驱动&#xff0c;以及提供各种系统所需的核心功能&#xff0c;包括防火墙机制、是否支持 LVM 或 Quota 等文件系统等等&a…

C语言入门基础(二)

基本概念 地址 计算机的内存是一块用于存储数据的空间&#xff0c;由一系列连续的存储单元组成&#xff0c;就像下面这样&#xff0c; 每一个单元格都表示1个Bit&#xff0c;一个bit在EE专业的同学看来就是高低电位&#xff0c;而在CS同学看来就是0&#xff0c;1两种状态。 …

cpp_02_函数重载_动态内存分配_左值右值_引用_内联函数

1 函数重载 1.1 定义 要求&#xff1a; 1&#xff09;同一作用域内 2&#xff09;函数名相同 3&#xff09;形参表不同&#xff08;与形参个数及每个形参类型有关&#xff0c;与形参名无关&#xff09; 重载关系的函数调用哪个&#xff1a; 根据实参类型和形参类型进行匹配&…

降采样方法对NCC得分的影响因素评估

定位算法原理 关于不同的定位场景,最适合使用的算法原理,Halcon的原理文档中描述如下: 在图案缩放可用忽略,图案纹理丰富的场景,适合采用基于互相关的匹配。 输入参考图像,搜索图像,参考图像在搜索图像上滑动,得到滑动位置的NCC得分。如下图所示,高于阈值的最亮的地…

基于循环神经网络长短时记忆(RNN-LSTM)的大豆土壤水分预测模型的建立

Development of a Soil Moisture Prediction Model Based on Recurrent Neural Network Long Short-Term Memory in Soybean Cultivation 1、介绍2、方法2.1 数据获取2.2.用于预测土壤湿度的 LSTM 模型2.3.土壤水分预测的RNN-LSTM模型的建立条件2.4.预测土壤水分的RNN-LSTM模型…

后端项目-自定义接口响应结果设计JsonResult

文章接上文&#xff1a;后端接口增删改查 上文中返回的值是string格式&#xff0c;明显是不合适。 一般情况下&#xff0c;我们返回给前台的都是对象格式&#xff0c;结合添加在类上添加RestController注解&#xff0c;标记此类中所以的处理请求的方法都是响应正文的&#xff…

dp中最短编辑距离的笔记(分析dp)

dp分析往往就是看最后一步的变化。 分析&#xff1a; 设a串长度为i&#xff0c;b串长度为j。题目要求为通过三种操作将a字符串转化为b字符串的最少次数。 删除操作&#xff1a; 把a[i]删除后a[1~i]和b[1~j]匹配&#xff0c;所以可以得到f[i - 1][j] 1&#xff0c;在此之前要先…

Crocoddyl: 多接触最优控制的高效多功能框架

系列文章目录 前言 我们介绍了 Crocoddyl&#xff08;Contact RObot COntrol by Differential DYnamic Library&#xff09;&#xff0c;这是一个专为高效多触点优化控制&#xff08;multi-contact optimal control&#xff09;而定制的开源框架。Crocoddyl 可高效计算给定预定…

java minio通过getPresignedObjectUrl设置(自定义)预签名URL下载文件的响应文件名之minio源码改造方案

Minio预签名URL自定义响应文件名之Minio源码改造 需求说明Minio源码改造一、环境准备二、下载Minio源代码三、修改源代码1.修改cmd目录下的api-router.go这个代码文件2.将filename参数值设置到响应头4.修改验证签名时是否需要带入filename参数验证 四、大功告成&#xff0c;编译…

外包干了一个月,技术有明显提升。。。。。

先说一下自己的情况&#xff0c;本科生生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试…

百度地图中显示红点

initMap(longitude, latitude) {var map new BMapGL.Map("container");// 创建地图实例if (longitude null || latitude null) {var point new BMapGL.Point(111.1480354849708, 37.5262978563336);var marker new BMapGL.Marker(point);map.addOverlay(marker)…

003 Windows用户与组管理

Windows用户管理 一、用户账户 1、什么是用户账户 不同用户身份拥有不同的权限每个用户包含了一个名称和一个密码每个用户账户具有唯一的安全标识符查看系统中的用户 net user 安全标识符&#xff08;SID&#xff09; whoami /user 使用注册表查看 打开注册表命令regedi…
最新文章