【C#】根据名称获取编码(Dictionary获取key)

系列文章

【C#】单号生成器(编号规则、固定字符、流水号、产生业务单号)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范围生成器(构建开始日期、结束日期)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】组件化开发,调用dll组件方法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129492112

【C#】GridControl控件和List数据集双向绑定
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129423755

【C#】数据实体类使用
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】单据审批流方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】二维码标签制作及打印
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全单据打印方案(设计打印模板、条形码&二维码、图片、字体)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】条码管理操作手册
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】WebAPI发布和IIS部署,及异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】【提高编程效率】代码模板生成工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】【提高编程效率】Excel数据导入工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】Windows服务(Service)安装及启停方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任务计划实现,使用Quartz类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】《周计划管理关于产前准备模块》解决方案20200203
本文链接:https://blog.csdn.net/youcheng_ge/article/details/122919543

【C#】源码解析正则表达式
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】软件版本和文件MD5记录(XML操作)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】测试网络是否连通
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】程序开发,你使用DataTable还是List?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129792726

【C#】根据名称获取编码(Dictionary获取key)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129816701

【Inno Setup】安装包制作,项目打包方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123665633

【Regex正则】最全正则表达式操作手册
本文链接:https://blog.csdn.net/youcheng_ge/article/details/108216964



前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。
3A0N000001


一、问题描述

我们已经确定了大致的方向,与业务部门沟通,进一步确定标签需要支持以下目标:
①公司存在保密要求,标签不便显示产品信息,但特定人员可以看懂。
②编号要可以人工复核,双重保障,防止识别不出可以人工干预。

注意:原生ComBox控件支持绑定key-value值,这里我们使用了自定义控件,暂时不支持。

二、解决方案

绑定数据源,根据Value获取key。

三、软件开发(项目源码)

3.1 变量定义

	private Dictionary<string, string> Dic_Stock;  //仓库数据源
	private Dictionary<string, string> Dic_Goods;  //货位数据源
	
	Dic_Stock = DBService.GetComboBoxStock();
	Dic_Goods = DBService.GetComboBoxGoods(baseDataInput_仓库.StringValue);

3.2 获取下拉数据源

以“仓库”、“货位”为例,分别获取其编码、名称。


	public static Dictionary<string, string> GetComboBoxGoods(string strStockName)
	{
    
    
		Dictionary<string, string> dictionary = new Dictionary<string, string>();
		string strSQL = "SELECT 货位编号,货位名称 FROM dl_mes.货位信息表 AS goods  INNER JOIN dl_mes.仓库信息表 AS stock  ON stock.仓库编号 = goods.仓库编号 WHERE stock.仓库名称 = '" + strStockName + "'";
		BaseMySQL baseMySQL = new BaseMySQL();
		DataTable dataTable = baseMySQL.Query(strSQL);
		bool flag = dataTable != null && dataTable.Rows.Count > 0;
		if (flag)
		{
    
    
			foreach (DataRow dataRow in dataTable.Rows)
			{
    
    
				dictionary.Add(dataRow["货位编号"].ToString(), dataRow["货位名称"].ToString());
			}
		}
		bool flag2 = baseMySQL != null;
		if (flag2)
		{
    
    
			baseMySQL.Close();
		}
		baseMySQL = null;
		return dictionary;
	}
	
	public static Dictionary<string, string> GetComboBoxStock()
	{
    
    
		Dictionary<string, string> dictionary = new Dictionary<string, string>();
		string strSQL = "SELECT 仓库编号,仓库名称 FROM dl_mes.仓库信息表";
		BaseMySQL baseMySQL = new BaseMySQL();
		DataTable dataTable = baseMySQL.Query(strSQL);
		bool flag = dataTable != null && dataTable.Rows.Count > 0;
		if (flag)
		{
    
    
			foreach (DataRow dataRow in dataTable.Rows)
			{
    
    
				dictionary.Add(dataRow["仓库编号"].ToString(), dataRow["仓库名称"].ToString());
			}
		}
		bool flag2 = baseMySQL != null;
		if (flag2)
		{
    
    
			baseMySQL.Close();
		}
		baseMySQL = null;
		return dictionary;
	}

3.3 控件与数据源的绑定

	//仓库
	Dic_Stock = GlobalFunction.GetComboBoxStock();
	foreach (var item in Dic_Stock)
	{
    
    
	    baseDataInput_Stock.AddItem(item.Value);
	}
	baseDataInput_Stock.StringValue = "7#厂房周转库";
	
	//货位
	Dic_Goods = GlobalFunction.GetComboBoxGoods(baseDataInput_Stock.StringValue);
	baseDataInput_Goods.Clear();
	foreach (var item in Dic_Goods)
	{
    
    
	    baseDataInput_Goods.AddItem(item.Value);
	}
	baseDataInput_Goods.SelectIndex(0);

3.4 根据名称获取编码(核心)

核心代码,数据库存储的是编码,前端显示的是 名称,所以需要根据 名称找编码。
注意:原生ComBox控件支持绑定key-value值,这里我们使用了自定义控件,暂时不支持。

	/// <summary>
	/// 获取编码
	/// </summary>
	/// <param name="a_dic"></param>
	/// <param name="a_strValue"></param>
	/// <returns></returns>
	public static string GetDictionaryKey(Dictionary<string, string> a_dic, string a_strValue)
	{
    
    
		return a_dic.FirstOrDefault((KeyValuePair<string, string> q) => q.Value == a_strValue).Key;
	}
    foreach (DataRow item in Dt_StockSave.Rows)
    {
    
    
        item[钨条出入库表.出入库单据编号] = str_TakeOutNo;
        item[钨条出入库表.仓库编号] = GlobalFunction.GetDictionaryKey(Dic_Stock, str_Stock);
        item[钨条出入库表.货位编号] = GlobalFunction.GetDictionaryKey(Dic_Goods, str_Goods);
        item[钨条出入库表.出入库时间] = dateTime_TakeOutDate;
        item[钨条出入库表.出入库操作人编号] = "gyc";
        item[钨条出入库表.库管员编号] = str_StockAdmin;
        item[钨条出入库表.出入库备注] = str_Note;
        item[钨条信息表.钨条领用人编号] = str_TakeOutWorker;
    }
    Dt_StockSave.AcceptChanges();

四、项目展示

暂无

五、资源链接

5.1 仓库数据库脚本

/*
 Navicat Premium Data Transfer

 Source Server         : 本地连接
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : localhost:3306
 Source Schema         : dl_mes

 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001

 Date: 03/04/2023 11:09:06
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for 仓库信息表
-- ----------------------------
DROP TABLE IF EXISTS `仓库信息表`;
CREATE TABLE `仓库信息表`  (
  `公司编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `工厂名称` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '一期',
  `仓库编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '空',
  `仓库名称` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `仓库描述` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  PRIMARY KEY (`仓库编号`) USING BTREE,
  INDEX `AK_Key_CompanyID`(`公司编号` ASC) USING BTREE,
  INDEX `AK_Key_FactoryName`(`工厂名称` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '0-1-基础信息' ROW_FORMAT = DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;

5.2 货位数据库脚本

/*
 Navicat Premium Data Transfer

 Source Server         : 本地连接
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : localhost:3306
 Source Schema         : dl_mes

 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001

 Date: 03/04/2023 11:10:04
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for 货位信息表
-- ----------------------------
DROP TABLE IF EXISTS `货位信息表`;
CREATE TABLE `货位信息表`  (
  `公司编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `仓库编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `货位编号` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '空',
  `货位名称` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  `货位描述` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '空',
  PRIMARY KEY (`货位编号`) USING BTREE,
  INDEX `AK_Key_CompanyID`(`公司编号` ASC) USING BTREE,
  INDEX `AK_Key_StoreID`(`仓库编号` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '0-1-基础信息' ROW_FORMAT = DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;

猜你喜欢

转载自blog.csdn.net/youcheng_ge/article/details/129816701