WPFC#超市管理系统(4)入库管理

入库管理

    • 7. 商品入库管理
      • 7.2 入库实现显示名称、图片、单位
      • 7.3 界面设计
      • 7.3 功能实现


7. 商品入库管理

  • 数据库中StockRecord表需要增加商品出入库Type类型为nvarchar(50)
  • C#中的数据库重新同步StockRecord表
  • 在Entity→Model中新建枚举类型StockType
namespace 超市管理系统.Entity.Model
{public enum StockType{入库,出库}
}

7.2 入库实现显示名称、图片、单位

  • 由于StockRecord表内未设置商品名称,因此名称需要通过部分类实现。在Entity→Model中新建StockRecord:BaseModel
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;
using 超市管理系统.Entity.Model;
using 超市管理系统.Helper;
using 超市管理系统.ViewModel;namespace 超市管理系统.Entity
{public partial class StockRecord:BaseModel{public string ProductName{get{//ProductId为StockRecord表中的ProductId为StockRecord表中的return ProductViewModel.productProvider.GetAll().FirstOrDefault(t => t.Id == ProductId).Name;}}public BitmapImage BitmapImage{get{string image = ProductViewModel.productProvider.GetAll().FirstOrDefault(t => t.Id == ProductId).Image;return ImageHelper.GetBitmapImage(image);}}}
}

7.3 界面设计

  • 已有UserControl文件InstorageView.xaml,复用ProductView.xaml内容并修改相应内容。
<UserControl x:Class="超市管理系统.View.InstorageView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:超市管理系统.View" xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"mc:Ignorable="d" Background="{Binding AppData.Background}"DataContext="{Binding Source={StaticResource Locator}, Path=InstorageViewModel}"d:DesignHeight="450" d:DesignWidth="800"><i:Interaction.Triggers><i:EventTrigger EventName ="Loaded"><i:InvokeCommandAction Command="{Binding LoadedCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}"/></i:EventTrigger></i:Interaction.Triggers><Grid><Grid.RowDefinitions><RowDefinition Height="40"/><RowDefinition/></Grid.RowDefinitions><Border BorderBrush="#22304B" BorderThickness="0 0 0 1"><TextBlock Text="商品管理" VerticalAlignment="center" Margin="5 0 0 0" Foreground="{Binding AppData.Foreground}" FontSize="16"/></Border><Grid Grid.Row="1"><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/><RowDefinition Height="auto"/></Grid.RowDefinitions><Grid><StackPanel Orientation="Horizontal" Margin="0 5 0 5"><TextBlock Text="入库管理" VerticalAlignment="Center" Margin="5 0 5 0"/><ComboBox VerticalContentAlignment="Center" MinWidth="100" MaxWidth="200" Margin="5 0 5 0" Height="25"ItemsSource="{Binding ProductList }"SelectedItem="{Binding SelectedProduct}" DisplayMemberPath="Name"/><TextBlock Text="入库数量" VerticalAlignment="Center" Margin="5 0 5 0"/><TextBox Text="{Binding Stock.Quantity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="25" VerticalAlignment="Center"  Width="50" Margin="5 0 5 0"/><Button Content="入库" Command="{Binding SaveCommand}"  Width="80" Margin="0 0 10 0" Height="25"/></StackPanel></Grid><DataGrid Grid.Row="1" ItemsSource="{Binding StockRecordList}"SelectedItem="{Binding SelectedStockRecord}"Style="{StaticResource DataGridStyle}"><DataGrid.Columns><!--普通写法--><!--<DataGridTextColumn Width="auto" Binding="{Binding Id}" Header="序号"/><DataGridTextColumn Width="auto" Binding="{Binding Name}" Header="姓名"/><DataGridTextColumn Width="auto" Binding="{Binding Telephone}" Header="电话"/><DataGridTextColumn Width="auto" Binding="{Binding Address}" Header="地址"/>--><!--数据模板写法--><DataGridTemplateColumn Width="auto" Header="序号"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Id,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="商品编号"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding ProductId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="商品名称"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding ProductName, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="商品图片"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><Image Source="{Binding BitmapImage}" ><Image.ToolTip><Grid><Image Source="{Binding BitmapImage}"/></Grid></Image.ToolTip></Image></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="数量"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Quantity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="单位"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Unit, Mode=OneWay}" Style="{StaticResource DataGridTextBoxStyle}"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="类型"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding Type, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}" HorizontalAlignment="Left"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumn Width="auto" Header="入库日期"><DataGridTemplateColumn.CellTemplate><DataTemplate><Grid><TextBox Text="{Binding StockDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource DataGridTextBoxStyle}" HorizontalAlignment="Left"/></Grid></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns></DataGrid><Grid Grid.Row="2"><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><StackPanel Grid.Column="0" Margin="0 5 5 5" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center"><TextBlock Text="当前商品:"  Margin="0 0 10 0" Foreground="White" Width="auto" /><TextBlock Text="{Binding SelectedStockRecord.ProductName}" Foreground="White"  Width="auto"/></StackPanel><StackPanel Grid.Column="1"  Margin="0 5 5 5" Orientation="Horizontal" HorizontalAlignment="Right"><Button Content="删除" Command="{Binding DeleteCommand}" Margin="0 0 10 0" Width="80" Height="25"/></StackPanel></Grid></Grid></Grid>
</UserControl>

7.3 功能实现

  • InstorageViewModel,需要设计商品列表和选择项,入库数量绑定StockRecord表中的Quantity。功能有入库和删除两个。
  • 由于商品相关的ViewModel中private ProductProvider productProvider = new ProductProvider()为不同的实例,造成在入库后切换页面Load不会触发更新。因此,将ProductViewModel创建的改为 public static ProductProvider productProvider = new ProductProvider();,其他相关ViewModel删除private ProductProvider productProvider = new ProductProvider(),采用ProductProvider .productProvider 调用。
using CommonServiceLocator;
using GalaSoft.MvvmLight.Command;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using 超市管理系统.Entity;
using 超市管理系统.Entity.Model;
using 超市管理系统.View;namespace 超市管理系统.ViewModel
{public class InstorageViewModel :ViewModelBase2{private StockRecordProvider stockRecordProvider = new StockRecordProvider();private List<Product> productList = new List<Product>();public List<Product> ProductList{get { return productList; }set{productList = value;RaisePropertyChanged();}}//当前选中的顾客实体private Product selectedProduct = null;public Product SelectedProduct{get { return selectedProduct; }set{selectedProduct = value;RaisePropertyChanged();}}//选中删除的实体private Product deleteProduct = null;public Product DeleteProduct{get { return deleteProduct; }set{deleteProduct = value;RaisePropertyChanged();}}//新增数量private StockRecord stock;public StockRecord Stock{get { return stock; }set { stock = value; RaisePropertyChanged(); }}//所有入库记录private List<StockRecord> stockRecordList = new List<StockRecord>();public List<StockRecord> StockRecordList{get { return stockRecordList; }set{stockRecordList = value;RaisePropertyChanged();}}//当前选中的入库记录private StockRecord selectedStockRecord = null;public StockRecord SelectedStockRecord{get { return selectedStockRecord; }set{selectedStockRecord = value;RaisePropertyChanged();}}#region commands/// <summary>/// 加载所有供应商/// </summary>public RelayCommand<UserControl> LoadedCommand{get{return new RelayCommand<UserControl>((view) =>{ProductList = ProductViewModel.productProvider.GetAll();StockRecordList = stockRecordProvider.GetAll();Stock = new StockRecord() { Type = StockType.入库.ToString() };});}}public RelayCommand<UserControl> DeleteCommand{get{return new RelayCommand<UserControl>((view) =>{if (SelectedStockRecord != null){var count = stockRecordProvider.Delete(SelectedStockRecord);if (count > 0){//商品数量同步变化//DeleteProduct.Id = (int)SelectedStockRecord.ProductId;//DeleteProduct.Quantity -= (double)SelectedStockRecord.Quantity;//ProductViewModel.productProvider.Update(DeleteProduct);//更新到商品属性中ProductList = ProductViewModel.productProvider.GetAll();MessageBox.Show("删除成功");StockRecordList = stockRecordProvider.GetAll();}}else{ return; }});}}public RelayCommand<UserControl> SaveCommand{get{return new RelayCommand<UserControl>((view) =>{if (SelectedProduct == null) {MessageBox.Show("未选择商品"); return; }if (Stock.Quantity <= 0){MessageBox.Show("入库商品应大于0!"); return;}Stock.ProductId = SelectedProduct.Id;Stock.StockDate = DateTime.Now;int count = stockRecordProvider.Insert(Stock);if (count > 0){//增加商品数量SelectedProduct.Quantity += (double)Stock.Quantity;//更新到商品属性中ProductViewModel.productProvider.Update(selectedProduct);//刷新界面StockRecordList = stockRecordProvider.GetAll();MessageBox.Show("保存成功");//Stock = new StockRecord() { Type = StockType.入库.ToString() };}});}}#endregion}
}

在这里插入图片描述

  • 备注:当前未实现删除入库数据时同步更新商品管理中的数量,等待后续处理。

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

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

相关文章

CSS 打字特效

效果图.wxml <view class"tips"><text>{{ tipsText }}</text><text class"tips-line">|</text> </view>.wxss .tips{padding: 50rpx 100rpx;font-size: 28rpx; } .tips-line{color: #ccc;animation: tips-line .5s al…

直播小程序 app 系统架构分析

一、引言 直播行业近年来发展迅猛&#xff0c;直播小程序和 APP 成为众多用户获取直播内容以及主播进行内容输出的重要平台。一个完善且高效的系统架构是支撑直播业务稳定运行、提供优质用户体验的关键。本文将详细剖析直播小程序 / APP 的系统架构&#xff0c;包括整体架构设计…

Vue常见题目

1. 什么是 Vue.js&#xff1f;它的核心特点是什么&#xff1f; Vue.js 是一个渐进式 JavaScript 框架&#xff0c;用于构建用户界面。它的核心特点包括&#xff1a; - 响应式数据绑定 - 组件化开发 - 虚拟 DOM - 指令系统 - 轻量级且易于集成 - 丰富的生态系统&#xff08;Vue…

ipynb文件直接发布csdn

第一步&#xff0c;下载markdown文件 file --> save and export notebook as --> markdown第二步&#xff0c;导入markdown文件 进入csdn发布文章界面&#xff0c;点击导入&#xff0c;选择第一步下载的markdown文件即可

广东省省考备考(第六十四天8.2)——判断推理(重点回顾)

判断推理&#xff1a;数量规律 错题解析解析解析解析解析解析解析标记题解析解析解析解析解析解析解析今日题目正确率&#xff1a;53% 判断推理&#xff1a;属性规律 错题解析解析解析解析解析解析标记题解析解析今日题目正确率&#xff1a;60%

【C++/STL】vector的OJ,深度剖析和模拟实现

vector在OJ中的使用 1.只出现一次的数字 class Solution { public:int singleNumber(vector<int>& nums) {int value 0;for(auto e : v) {value ^ e; }return value;} };2.杨辉三角 class Solution { public:vector<vector<int>> generate(int numRow…

衡石湖仓一体架构深度解构:统一元数据层如何破除数据孤岛?

一、数据融合的世纪难题典型困境二、衡石统一元数据层设计架构核心关键技术实现智能元数据发现自动构建跨源血缘关系动态查询重写 将标准SQL翻译为最优执行计划text Original: SELECT SUM(sales) FROM virtual_view Rewritten: [S3] SELECT SUM(amount) FROM crm_sales [My…

Windows 下 fping 指令使用指南

fping 作为一款强大的网络工具&#xff0c;能够同时向多个主机发送 ICMP 回声请求&#xff0c;相较于传统的 ping 命令&#xff0c;在处理大量主机时具有显著优势。 一、fping 简介​ fping 是 “fast pinger” 的缩写&#xff0c;它可以向一系列 IP 地址发送 ICMP 回声请求。…

代码随想录day52图论3

文章目录101. 孤岛的总面积102. 沉没孤岛103. 水流问题104.建造最大岛屿101. 孤岛的总面积 题目链接 文章讲解 #include<bits/stdc.h> using namespace std;int ans 0; // 记录不与边界相连的孤岛数量 int sum 0; // 当前孤岛的面积 bool flag false; /…

linux pip/conda 修改默认cache位置

1 pip pip cache默认在/home/{username}目录下&#xff0c;容易导致系统盘写满报错。查看pip cache位置pip cache dir假设移动pip cache目录到 /data/.cache/pip/cache&#xff0c;命令如下pip config set global.cache-dir /data/.cache/pip/cache2 conda 查看conda缓存位置c…

如何解决pip安装报错ModuleNotFoundError: No module named ‘seaborn’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘seaborn’问题 一、摘要 在使用 PyCharm 终端进行模块安装时&#xff0c;常常会遇到如下异常&#xff1a; ModuleNotFoundError: No module named ‘seaborn’…

(思维)洛谷 P13551 ももいろの鍵 题解

题意 爱莉给了你一个非负整数 nnn&#xff0c;你需要把 0,1,2,…,n0, 1, 2, \dots, n0,1,2,…,n 划分成若干组&#xff0c;满足每一组的按位与为 000。 划分的组不需要相邻。 你需要最大化划分组数并给出方案。 1≤T≤6001 \le T \le 6001≤T≤600&#xff0c;0≤n≤1050 \le n…

记录一次ESP32报错Guru Meditation Error: Core 1 panic‘ed (Double exception).

一、问题描述 需求&#xff1a; ESP32S3单片机&#xff0c;连接一个麦克风读取5s后&#xff0c;编码后发送到百度云进行语音识别。通过freertos框架&#xff0c;将任务放在核1中运行&#xff08;放在核0同样报错&#xff09; 问题&#xff1a; 在最后的发送语音数据中&#xff…

半导体物理复习

半导体物理导论第一章 半导体的电子状态

vi/vim跳转到指定行命令

在 vi/vim 中跳转到指定行有多种高效方法&#xff0c;以下是最常用的操作方式&#xff1a; 一、基础跳转&#xff1a;行号 命令命令模式下直接输入行号 按 Esc 切换到命令模式后&#xff0c;输入 :行号 并回车。例如&#xff0c;输入 :100 会直接跳转到第 100 行。使用 G 快捷…

智能落地扇方案:青稞RISC-V电机 MCU一览

在科技飞速发展的今天&#xff0c;智能家居已成为人们生活中不可或缺的一部分&#xff0c;而风扇作为夏日解暑的必备家电&#xff0c;其智能化升级也成为了行业发展的必然趋势。传统落地扇功能单一、操作不便&#xff0c;已难以满足现代消费者对便捷、舒适、节能生活的追求。在…

SQL 中 WHERE 与 HAVING 的用法详解:分组聚合场景下的混用指南

SQL中WHERE与HAVING的用法详解&#xff1a;分组聚合场景下的混用指南 1. WHERE与HAVING的基本区别 在SQL查询中&#xff0c;WHERE和HAVING都是用于过滤数据的子句&#xff0c;但它们的应用时机和作用对象有本质区别&#xff1a; WHERE子句&#xff1a;在分组前对原始数据进行过…

14 - 大语言模型 — 抽取式问答系统 “成长记”:靠 BERT 学本事,从文本里精准 “揪” 答案的全过程(呆瓜版-1号)

目录 1、什么是问答系统&#xff1f; 2、问答系统的核心工作流程 2.1、理解问题&#xff1a;把问题 “翻译” 成机器能懂的形式 2.2、 寻找答案&#xff1a;从信息中定位答案 2.3、生成答案&#xff1a;整理并输出结果 2.4、优化迭代&#xff1a;让系统更 “聪明” 3、主…

Docker一键部署轻量级Gitea仓库

1、安装docker 1、安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm22、配置docker yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3、安装docker yum install -y docker-ce4、修改docker配置文…

2025年渗透测试面试题总结-2025年HW(护网面试) 81(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年HW(护网面试) 81 一、Webshell获取路径规划 二、变形注入突破技巧 三、MySQL写入Webshell条件矩阵 …