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
英文地址,請注明出處:http://en.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條件矩陣 …