仓库管理系统25--数据导出

news2024/11/22 15:14:09

原创不易,打字不易,截图不易,多多点赞,送人玫瑰,留有余香,财务自由明日实现 

1、添加用户控件

 

<UserControl x:Class="West.StoreMgr.View.DataExportView"
             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:West.StoreMgr.View"
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
             mc:Ignorable="d" 
             DataContext="{Binding Source={StaticResource Locator},Path=DataExport}"
             d:DesignHeight="450" d:DesignWidth="800">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding LoadCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50"/>
            <RowDefinition />
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <!--标题-->
        <StackPanel Background="#EDF0F6" Orientation="Horizontal">
            <TextBlock Margin="10 0 0 0" Text="&#xf015;" FontSize="20" FontFamily="/Fonts/#FontAwesome" HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="#797672"/>
            <TextBlock Margin="10 0 0 0" Text="首页 > 数据导出" FontSize="20" FontFamily="/Fonts/#FontAwesome" HorizontalAlignment="Left" VerticalAlignment="Center" Foreground="#797672"/>
        </StackPanel>

        <!--Tabcontrol-->
        <Grid Grid.Row="1" Margin="20">
            <TabControl ItemsSource="{Binding TabItems}"/>
        </Grid>

        <!--button-->
        <Grid Grid.Row="2" Margin="10 10 10 10">
            <Button  Height="36" Width="120" Grid.Row="3" 
                     HorizontalAlignment="Right"
                        Content="一键导出" Style="{StaticResource ButtonStyle}" 
                        CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=local:DataExportView}}"
                        Command="{Binding BackupCommand}"/>
        </Grid>
    </Grid>
</UserControl>

 2、添加viewmodel

using GalaSoft.MvvmLight;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows;
using System.IO;
using GalaSoft.MvvmLight.Command;
using West.StoreMgr.Service;
using West.StoreMgr.Control;
using West.StoreMgr.Helper;
using West.StoreMgr.Model;

namespace West.StoreMgr.ViewModel
{
    /// <summary>
    /// 数据导出viewmodel
    /// </summary>
    public class DataExportViewModel : ViewModelBase
    {
        private List<Customer> customers = new List<Customer>();
        private List<Goods> goods = new List<Goods>();
        private List<GoodsType> goodsTypes = new List<GoodsType>();
        private List<InStore> inStores = new List<InStore>();
        private List<Inventory> inventories = new List<Inventory>();
        private List<OutStore> outStores = new List<OutStore>();
        private List<OutStore_temp> outStoresTemp = new List<OutStore_temp>();
        private List<Spec> specs = new List<Spec>();
        private List<Store> stores = new List<Store>();
        private List<Supplier> suppliers = new List<Supplier>();
        private List<UserInfo> userInfos = new List<UserInfo>();


        private ObservableCollection<TabItem> tabItems = new ObservableCollection<TabItem>();
        /// <summary>
        /// tab选项集合
        /// </summary>
        public ObservableCollection<TabItem> TabItems
        {
            get { return tabItems; }
            set { tabItems = value; RaisePropertyChanged(); }
        }

        public RelayCommand LoadCommand
        {
            get
            {
                return new RelayCommand(() =>
                {
                    customers = new CustomerService().Select();
                    goods = new GoodsService().Select();
                    goodsTypes = new GoodsTypeService().Select();
                    inStores = new InStoreService().Select();
                    inventories = new InventoryService().Select();
                    outStores = new OutStoreService().Select();
                    outStoresTemp = BuildList(outStores);
                    specs = new SpecService().Select();
                    stores = new StoreService().Select();
                    suppliers = new SupplierService().Select();
                    userInfos = new UserInfoService().Select();

                    tabItems.Add(new TabItem { Header = "客户表", Content = new TableControl { DataContext = customers } });
                    tabItems.Add(new TabItem { Header = "物资表", Content = new TableControl { DataContext = goods } });
                    tabItems.Add(new TabItem { Header = "物资类别表", Content = new TableControl { DataContext = goodsTypes } });
                    tabItems.Add(new TabItem { Header = "入库表", Content = new TableControl { DataContext = inStores } });
                    tabItems.Add(new TabItem { Header = "盘存表", Content = new TableControl { DataContext = inventories } });
                    tabItems.Add(new TabItem { Header = "出库表", Content = new TableControl { DataContext = outStoresTemp } });
                    tabItems.Add(new TabItem { Header = "规格表", Content = new TableControl { DataContext = specs } });
                    tabItems.Add(new TabItem { Header = "仓库表", Content = new TableControl { DataContext = stores } });
                    tabItems.Add(new TabItem { Header = "供应商表", Content = new TableControl { DataContext = suppliers } });
                    tabItems.Add(new TabItem { Header = "用户表", Content = new TableControl { DataContext = userInfos } });
                });
            }
        }

        /// <summary>
        /// 构建新的出库实体(原实体具有扩展属性,这是不必要的)
        /// </summary>
        /// <param name="outStores"></param>
        /// <returns></returns>
        List<OutStore_temp> BuildList(List<OutStore> outStores)
        {
            List<OutStore_temp> list = new List<OutStore_temp>();
            foreach(OutStore item in outStores)
            {
                OutStore_temp temp = new OutStore_temp();
                temp.Id = item.Id;
                temp.GoodsSerial = item.GoodsSerial;
                temp.Name = item.Name;
                temp.StoreId = item.StoreId;
                temp.StoreName = item.StoreName;
                temp.CustomerId = item.CustomerId;
                temp.CustomerName = item.CustomerName;
                temp.Unit = item.Unit;
                temp.Number = item.Number;
                temp.Price = item.Price;
                temp.InsertDate = item.InsertDate;
                temp.GoodsTypeId = item.GoodsTypeId;
                temp.UserInfoId = item.UserInfoId;
                temp.UserInfoName = item.UserInfoName;
                temp.Tag = item.Tag;
                temp.IsInventory = item.IsInventory; 
                list.Add(temp); 
            }
            return list;
        }


        /// <summary>
        /// 导出命令
        /// </summary>
        public RelayCommand BackupCommand
        {
            get
            {
                return new RelayCommand(() =>
                {
                    Backup(customers, "customers");
                    Backup(goods, "goods");
                    Backup(goodsTypes, "goodsTypes");
                    Backup(inStores, "inStores");
                    Backup(inventories, "inventories");
                    Backup(outStoresTemp, "outStores");
                    Backup(specs, "specs");
                    Backup(stores, "stores");
                    Backup(suppliers, "suppliers");
                    Backup(userInfos, "userInfos");
                });
            }
        }

        /// <summary>
        /// 导出数据
        /// </summary>
        /// <param name="array">列表对象</param>
        /// <param name="filename">文件名称</param>
        /// <exception cref="NotImplementedException"></exception>
        private void Backup<T>(List<T> array, string name)
        {
            var t = typeof(T);
            var properties = t.GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
            var contents = new StringBuilder();

            //标题
            foreach (var item in properties)
            {
                //得到第一个自定义属性的参数的值,即属性描述
                var desc = item.CustomAttributes.ToList()[0].ConstructorArguments[0].Value.ToString();  
                contents.Append(desc);
                contents.Append(",");
            } 
            contents.Append("\r\n");//换行

            //内容
            foreach (var model in array)
            {
                var row = new StringBuilder();
                foreach (var property in properties)
                {
                    var val = property.GetValue(model);
                    row.Append(val);
                    row.Append(",");
                }
                contents.Append(row.ToString());
                contents.Append("\r\n");
            }

            //finename -> 表格+日期
            var date = $"{DateTime.Now.Year}-{DateTime.Now.Month}-{DateTime.Now.Day}";
            var filename = $"c:\\{name}{date}.csv";

            //保存
            File.WriteAllText(filename, contents.ToString(),Encoding.UTF8);//以utf-8的格式保存成csv格式
            MsgWinHelper.ShowMessage("数据导出完成");
        }
    }
}

3、运行效果

 

 

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

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

相关文章

融云 CEO 董晗获颁 EqualOcean「2024 出海全球化服务 30 人」

6 月 26 日-27 日&#xff0c;EqualOcean 全球化百人论坛 &#xff08;GGF2024&#xff09;及颁奖盛典在深圳举办&#xff0c;融云 CEO 董晗荣登“2024 出海全球化服务 30 人”榜单。 作为全球商业信息平台和智库&#xff0c;EqualOcean 设立“出海全球化服务 30 人榜单”&am…

u盘里的数据全部不见了怎么恢复?这些方法你试过吗

在快节奏的工作和生活中&#xff0c;U盘作为我们随身携带的数据存储工具&#xff0c;承载了无数重要的文件和资料。然而&#xff0c;有时我们会突然发现U盘里的数据全部不见了&#xff0c;这无疑会给我们带来巨大的困扰和焦虑。面对这种情况&#xff0c;不要慌张&#xff0c;本…

2小时动手学习扩散模型(pytorch版)【入门版】【代码讲解】

2小时动手学习扩散模型&#xff08;pytorch版&#xff09; 课程地址 2小时动手学习扩散模型&#xff08;pytorch版&#xff09; 课程目标 给零基础同学快速了解扩散模型的核心模块&#xff0c;有个整体框架的理解。知道扩散模型的改进和设计的核心模块。 课程特色&#xf…

OpenCV 车牌检测

OpenCV 车牌检测 级联分类器算法流程车牌检测相关链接 级联分类器 假设我们需要识别汽车图像中车牌的位置&#xff0c;利用深度学习目标检测技术可以采取基于锚框的模型&#xff0c;但这需要在大量图像上训练模型。 但是&#xff0c;级联分类器可以作为预训练文件直接使用&…

云数据中心运维新纪元:让Linux服务器如虎添翼

文章目录 一、Linux系统管理的高级技巧1. 性能调优与监控&#xff1a;2. 自动化与脚本编写&#xff1a;3. 文件系统与存储管理&#xff1a; 二、服务器配置优化的策略1. 硬件选型与配置&#xff1a;2. 网络配置与优化&#xff1a;3. 应用部署与调优&#xff1a; 三、安全策略的…

FPGA程序设计

在设计FPGA时&#xff0c;多运用模块化的思想取设计模块&#xff0c;将某一功能设计成module。 设计之前要先画一下模块设计图&#xff0c;列出输入输出接口&#xff0c;再进一步设计内部功能。 状态机要画图&#xff0c;确定每个状态和状态之间怎么切换。状态用localparam定…

Taro + vue3 中微信小程序中实现拉起支付

在前端开发中 H5 的拉起支付和微信小程序的拉起支付 是不太一样的 现在分享一下微信小程序中的拉起支付 逻辑都在后端 我是用的Taro 框架 其实就是一个Api Taro 文档

Nacos2.3.x动态刷新不生效

1.日志分析 Ignore the empty nacos configuration and get it based on dataId[null.yaml] & group[DEFAULT_GROUP] Ignore the empty nacos configuration and get it based on dataId[null-local.yaml] & group[DEFAULT_GROUP] 从日志文件分析中可以得到 dataId[n…

JAVA 在服务器上创建文件夹

JAVA 在服务器上创建文件夹 在服务器端开发中&#xff0c;我们经常需要在服务器上创建文件夹来存储文件或其他资源。本文将介绍使用JAVA在服务器上创建文件夹的方法&#xff0c;并提供相应的示例代码。 创建文件夹的基本概念 在JAVA中&#xff0c;我们可以使用File类来操作文…

在C#中使用RabbitMQ做个简单的发送邮件小项目 _

前言 好久没有做项目了&#xff0c;这次做一个发送邮件的小项目。发邮件是一个比较耗时的操作&#xff0c;之前在我的个人博客里面回复评论和友链申请是会通过发送邮件来通知对方的&#xff0c;不过当时只是简单的进行了异步操作。那么这次来使用RabbitMQ去统一发送邮件&#x…

redhawk:tech file与lefdef layer name不匹配问题

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 一些工艺厂商给的redhawk tech file是加密的&#xff0c;读完tech file再读lef/def会报错&#xff0c;根本不知道问题在哪&#xff0c;他们一般会搭配给一个layer map&#xff…

【084】基于SpringBoot实现的家乡特色推荐系统

系统介绍 视频演示 点击查看演示视频 基于SpringBoot实现的家乡特色推荐系统主要采用SpringBootVue进行开发&#xff0c;系统整体分为管理员、用户两种角色&#xff0c;主要功能包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;文章分类管理&#xff0c;文章分…

【愤怒的小方块案例 Objective-C语言】

一、我们来做这个愤怒的小方块啊, 1.我们新建一个项目, Name:18-愤怒的小方块, Dynamic,不能够处理圆形的View,Dynamic都是方的,如果你想处理圆的View的话,需要用另外一个东西,什么Kit,专门做游戏的一个iOS框架, 首先,我们把这个项目的竖屏,去掉勾选,只留一个Lan…

ThreeJS-3D教学十四:ShaderMaterial(length、fract、step)

length() 内置函数可以获取向量的长度&#xff0c; 这里用 vUv 计算每个像素离原点(0.0, 0.0)位置的距离 dist&#xff0c;将其设置到颜色上&#xff0c; 会得到圆心在左下角的1/4渐变圆形效果&#xff0c;左上角(0.0, 1.0)和右下角(1.0, 0.0)离原点距离都是1&#xff0c; 对应…

雷池WAF+Modsecurity安装防护及系统加固

君衍. 一、雷池WAF1、什么是雷池2、什么是WAF3、雷池的功能4、WAF部署架构5、整体检测流程 二、雷池WAF环境依赖1、查看本地CPU架构2、Docker安装2.1 卸载旧版本2.2 安装yum-utils工具包2.3 设置镜像仓库2.4 安装docker2.5 启动docker并查看版本 3、Docker Compose安装3.1 卸载…

flex布局中子元素内容超出时,子元素本身出现滚动条实现方法

flex布局中子元素宽度平均分配&#xff0c;并且当子元素内容超出时&#xff0c;子元素本身出现滚动条实现方法&#xff1a; 将父元素设置为display: flex&#xff0c;以启用Flexbox布局。将每个子元素的flex属性设置为1&#xff0c;以使其宽度平均分配。设置子元素的overflow属…

《Linux开发笔记》C语言编译过程

C语言编译过程 编译过程主要分为四步&#xff1a;预处理、编译、汇编、链接 预处理&#xff1a;主要用于查找头文件、展开宏 编译&#xff1a;把.i文件编译成.s文件 汇编&#xff1a;把.s文件汇编为.o文件 链接&#xff1a;把多个.o文件链接成一个app 以上四个步骤主要由3个命…

MySQL常用操作命令大全

文章目录 一、连接与断开数据库1.1 连接数据库1.2 选择数据库1.3 断开数据库 二、数据库操作2.1 创建数据库2.2 查看数据库列表2.3 删除数据库 三、表操作3.1 创建表3.2 查看表结构3.3 修改表结构3.3.1 添加列3.3.2 删除列3.3.3 修改列数据类型 3.4 删除表 四、数据操作4.1 插入…

一文讲懂npm link

前言 在本地开发npm模块的时候&#xff0c;我们可以使用npm link命令&#xff0c;将npm 模块链接到对应的运行项目中去&#xff0c;方便地对模块进行调试和测试 用法 包链接是一个两步过程&#xff1a; 1.为依赖项创建全局软链npm link。一个符号链接&#xff0c;简称软链&a…