如何网站里做照片动易sitefactorycms 网站配置保存不了问题
2026/4/18 3:55:11 网站建设 项目流程
如何网站里做照片,动易sitefactorycms 网站配置保存不了问题,资阳网站推广,企业官网的作用一、核心目标在原有 WPF 折线图项目基础上#xff0c;通过Sugar ORM连接 SQLite 数据库#xff0c;实现#xff1a;从 SQLite 读取历史销量数据渲染折线图追加数据时同时写入数据库#xff0c;实现数据持久化二、前置准备1. 安装依赖包通过 NuGet 安装以下包#xff1a;包…一、核心目标在原有 WPF 折线图项目基础上通过Sugar ORM连接 SQLite 数据库实现从 SQLite 读取历史销量数据渲染折线图追加数据时同时写入数据库实现数据持久化二、前置准备1. 安装依赖包通过 NuGet 安装以下包包名作用SqlSugarCoreSugar ORM 核心支持 SQLiteSystem.Data.SQLiteSQLite 数据库驱动Microsoft.Data.Sqlite可选替代 System.Data.SQLite2. SQLite 数据库准备1创建数据库文件在项目根目录创建SalesData.db文件也可让 Sugar 自动创建。2创建销量表定义销量实体类Sugar 会自动生成数据表using SqlSugar; using System; ​ namespace LineChart2.Model { /// summary /// 销量数据表实体 /// /summary [SugarTable(SalesRecord)] public class SalesRecord { /// summary /// 主键自增 /// /summary [SugarColumn(IsPrimaryKey true, IsIdentity true)] public int Id { get; set; } ​ /// summary /// 年份2023/2024 /// /summary [SugarColumn(ColumnName Year)] public int SalesYear { get; set; } ​ /// summary /// 月份1-12 /// /summary public int Month { get; set; } ​ /// summary /// 销量数值 /// /summary public double SalesValue { get; set; } ​ /// summary /// 创建时间 /// /summary public DateTime CreateTime { get; set; } DateTime.Now; } }三、Sugar ORM 初始化配置创建数据库帮助类封装 Sugar 连接和操作using SqlSugar; using LineChart2.Model; using System; using System.IO; ​ namespace LineChart2.Helper { public class DbHelper { // Sugar数据库连接实例单例 public static SqlSugarClient Db { get; private set; } ​ static DbHelper() { // 初始化连接 InitDb(); } ​ /// summary /// 初始化SQLite连接 /// /summary private static void InitDb() { // 获取数据库文件路径项目根目录 string dbPath Path.Combine(AppDomain.CurrentDomain.BaseDirectory, SalesData.db); ​ Db new SqlSugarClient(new ConnectionConfig { ConnectionString $Data Source{dbPath};, // SQLite连接字符串 DbType DbType.Sqlite, // 数据库类型 IsAutoCloseConnection true, // 自动关闭连接 InitKeyType InitKeyType.Attribute // 从特性读取主键/自增配置 }); ​ // 初始化数据表不存在则创建 Db.CodeFirst.InitTables(typeof(SalesRecord)); ​ // 开启日志调试用生产可关闭 Db.Aop.OnLogExecuting (sql, pars) { Console.WriteLine($SQL{sql} \r\n参数{string.Join(,, pars.Select(p p.ParameterName p.Value))}); }; } ​ #region 销量数据操作封装 /// summary /// 批量插入销量数据 /// /summary public static void BatchInsertSalesData(SalesRecord[] records) { Db.Insertable(records).ExecuteCommand(); } ​ /// summary /// 插入单条销量数据 /// /summary public static int InsertSalesData(SalesRecord record) { return Db.Insertable(record).ExecuteReturnIdentity(); } ​ /// summary /// 根据年份查询销量数据 /// /summary public static ListSalesRecord GetSalesDataByYear(int year) { return Db.QueryableSalesRecord() .Where(r r.SalesYear year) .OrderBy(r r.Month) .ToList(); } ​ /// summary /// 查询所有年份的销量数据 /// /summary public static ListSalesRecord GetAllSalesData() { return Db.QueryableSalesRecord() .OrderBy(r r.SalesYear) .ThenBy(r r.Month) .ToList(); } #endregion } }四、修改折线图控件整合数据库操作1. 重构 UCLineChart.xaml.cs替换原有硬编码数据改为从数据库读取 / 写入using LiveCharts; using LiveCharts.Defaults; using LiveCharts.Wpf; using LineChart2.Helper; using LineChart2.Model; using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; ​ namespace LineChart2 { public partial class UCLineChart : UserControl { public SeriesCollection SeriesCollection { get; set; } public string[] Labels { get; set; } public Funcdouble, string YFormatter { get; set; } ​ // 模拟销量数据 private readonly Random _random new Random(); // 当前最大月份用于追加数据 private int _currentMaxMonth 5; ​ public UCLineChart() { InitializeComponent(); ​ // 初始化图表数据优先从数据库读取 InitChartDataFromDb(); ​ // Y轴格式化显示整数 YFormatter value ${value:N0}; ​ DataContext this; } ​ /// summary /// 从数据库初始化图表数据 /// /summary private void InitChartDataFromDb() { SeriesCollection new SeriesCollection(); ​ // 1. 查询所有销量数据 var allSalesData DbHelper.GetAllSalesData(); ​ // 2. 如果数据库无数据初始化默认数据并写入数据库 if (!allSalesData.Any()) { InitDefaultDataAndWriteToDb(); allSalesData DbHelper.GetAllSalesData(); } ​ // 3. 按年份分组构建折线系列 var groupedData allSalesData.GroupBy(r r.SalesYear); foreach (var group in groupedData) { int year group.Key; var values group.OrderBy(r r.Month).Select(r r.SalesValue).ToList(); ​ // 创建折线系列 LineSeries series new LineSeries { Title ${year}年, Values new ChartValuesdouble(values), LineSmoothness 0.3, StrokeThickness 2, PointGeometrySize 8 }; ​ // 不同年份设置不同颜色 series.Stroke year 2024 ? Brushes.DodgerBlue : Brushes.OrangeRed; series.PointForeground year 2024 ? Brushes.DodgerBlue : Brushes.OrangeRed; series.PointGeometry year 2024 ? DefaultGeometries.Circle : DefaultGeometries.Square; ​ SeriesCollection.Add(series); } ​ // 4. 构建X轴标签1-当前最大月份 _currentMaxMonth allSalesData.Max(r r.Month); Labels Enumerable.Range(1, _currentMaxMonth).Select(m ${m}月).ToArray(); } ​ /// summary /// 初始化默认数据并写入数据库 /// /summary private void InitDefaultDataAndWriteToDb() { ListSalesRecord defaultData new ListSalesRecord(); ​ // 2024年1-5月数据 double[] sales2024 { 120, 150, 110, 180, 160 }; for (int i 0; i sales2024.Length; i) { defaultData.Add(new SalesRecord { SalesYear 2024, Month i 1, SalesValue sales2024[i] }); } ​ // 2023年1-5月数据 double[] sales2023 { 100, 130, 140, 150, 130 }; for (int i 0; i sales2023.Length; i) { defaultData.Add(new SalesRecord { SalesYear 2023, Month i 1, SalesValue sales2023[i] }); } ​ // 批量写入数据库 DbHelper.BatchInsertSalesData(defaultData.ToArray()); } ​ // 追加数据按钮点击事件 private void BtnAddData_Click(object sender, RoutedEventArgs e) { // 1. 月份1 _currentMaxMonth; int newMonth _currentMaxMonth; ​ // 2. 生成随机销量100-200 double sales2024 _random.Next(100, 200); double sales2023 _random.Next(100, 200); ​ // 3. 写入数据库 DbHelper.InsertSalesData(new SalesRecord { SalesYear 2024, Month newMonth, SalesValue sales2024 }); DbHelper.InsertSalesData(new SalesRecord { SalesYear 2023, Month newMonth, SalesValue sales2023 }); ​ // 4. 追加数据点到图表 SeriesCollection[0].Values.Add(sales2024); SeriesCollection[1].Values.Add(sales2023); ​ // 5. 更新X轴标签 Array.Resize(ref Labels, Labels.Length 1); Labels[Labels.Length - 1] ${newMonth}月; ​ // 6. 刷新绑定触发UI更新 chart.AxisX[0].Labels Labels; ​ // 更新按钮文本追加7月、8月... (sender as Button).Content $追加{newMonth 1}月数据; } } }2. 修复原代码 Bug原代码中Labels数组扩容时使用了错误的方法已替换为Array.Resize// 错误写法 // Labels[Labels.Length - 1] 6月; ​ // 正确写法 Array.Resize(ref Labels, Labels.Length 1); Labels[Labels.Length - 1] ${newMonth}月;五、关键功能说明1. 数据库初始化逻辑首次运行时若数据库无数据自动插入 2023/2024 年 1-5 月默认数据后续运行时从数据库读取数据渲染图表保证数据持久化2. 数据追加逻辑点击按钮时生成随机销量数据并写入数据库同时更新图表数据实现 “数据库 UI” 双向同步按钮文本动态更新追加 6 月→追加 7 月→...3. Sugar ORM 核心操作操作核心代码示例初始化连接new SqlSugarClient(new ConnectionConfig { ... })自动建表Db.CodeFirst.InitTables(typeof(SalesRecord))批量插入Db.Insertable(records).ExecuteCommand()条件查询Db.QueryableSalesRecord().Where(r r.SalesYear year).ToList()排序查询OrderBy(r r.Month)六、运行验证启动项目首次运行会自动创建SalesData.db文件并插入默认数据图表会显示 2023/2024 年 1-5 月销量折线点击 “追加 6 月数据” 按钮数据库会新增 2023/2024 年 6 月销量记录图表自动追加 6 月数据点X 轴标签更新为 “6 月”按钮文本变为 “追加 7 月数据”重复点击可持续追加七、扩展优化建议1. 异常处理添加 try-catch 捕获数据库操作异常try { DbHelper.InsertSalesData(new SalesRecord { ... }); } catch (Exception ex) { MessageBox.Show($数据写入失败{ex.Message}, 错误, MessageBoxButton.OK, MessageBoxImage.Error); }2. 分页查询大数据量若销量数据量大可分页读取// 分页查询2024年数据第1页每页10条 var pageData Db.QueryableSalesRecord() .Where(r r.SalesYear 2024) .OrderBy(r r.Month) .ToPageList(1, 10);3. 数据更新 / 删除扩展 DbHelper 添加更新 / 删除方法/// summary /// 更新销量数据 /// /summary public static bool UpdateSalesData(SalesRecord record) { return Db.Updateable(record).ExecuteCommand() 0; } ​ /// summary /// 删除指定月份数据 /// /summary public static bool DeleteSalesData(int year, int month) { return Db.DeleteableSalesRecord() .Where(r r.SalesYear year r.Month month) .ExecuteCommand() 0; }4. 多表关联进阶若需要关联其他表如产品表可使用 Sugar 的联表查询// 关联产品表查询销量 var joinData Db.QueryableSalesRecord, Product((s, p) new JoinQueryInfos( JoinType.Inner, s.ProductId p.Id)) .Select((s, p) new { s.Month, s.SalesValue, p.ProductName }) .ToList();八、项目结构梳理LineChart2/ ├─ Helper/ │ └─ DbHelper.cs // Sugar ORM数据库操作封装 ├─ Model/ │ └─ SalesRecord.cs // 销量数据实体类 ├─ UCLineChart.xaml // 折线图用户控件XAML ├─ UCLineChart.xaml.cs // 折线图逻辑整合数据库 ├─ MainWindow.xaml // 主窗口 └─ SalesData.db // SQLite数据库文件运行后生成通过以上改造原有的 WPF 折线图项目实现了与 SQLite 数据库的无缝整合数据不再局限于内存而是通过 Sugar ORM 实现了持久化存储和动态读写。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询