txt导入到DataGridView

本文介绍了一个用于导入文本文件的C#方法,该方法能够从特定格式的TXT文件中读取并处理物流作业单号及数量信息,同时验证了数据格式的正确性,并确保没有重复的数据条目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//ps:txt导入文本格式

导入单号(判断),单号,数值,导入数量(判断)

CL2012110200416,MD132479864,0,20

 

#region 方法--扫描导入
        /// <summary>
        /// 方法--扫描导入
        /// </summary>
        private void Import()
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";
            openFileDialog.Title = "信息导入---荣庆物流";
            //openFileDialog.FileName = string.Format("BFD{0}.txt", DateTime.Now.ToString("yyyyMMdd"));
            DialogResult result = openFileDialog.ShowDialog();

            if (result == DialogResult.OK)
            {
                #region 读取文本
                string fileName = openFileDialog.FileName; //得到:文件路径+文件名+文件后缀名

                string strName = fileName.Substring(fileName.LastIndexOf('\\') + 1); //得到:文件名+文件后缀名
                strName = strName.Remove(strName.LastIndexOf(".")); //得到:文件名

                if (fileName.Substring(fileName.LastIndexOf(".") + 1).ToLower() != "txt")
                {
                    MessageBox.Show("导入文件类型不正确,请导入TXT文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                /*if (strName != _frm.txtSchedulingBillCode.Text + "_UnLoad")//扫描文件与当前界面调度单对比
                {
                    MessageBox.Show("请正确导入调度单扫描文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }*/

                //读取文本信息
                FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read);
                StreamReader streamReader = new StreamReader(fs, Encoding.GetEncoding("GBK"));
                streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
                string strLine = streamReader.ReadLine();

                List<ImportObject> list = new List<ImportObject>();
                ImportObject obj;

                //循环读取文本信息
                while (!string.IsNullOrEmpty(strLine))
                {
                    if (strLine.IndexOf(",") == -1)
                    {
                        MessageBox.Show("导入内容格式不正确,请检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    string[] arr = strLine.Split(','); //以逗号分割,添加到数组
                    if (arr.Length != 4)
                    {
                        MessageBox.Show("导入内容格式不正确,请检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    try
                    {
                        obj = new ImportObject();
                        if (arr.Length == 4) //判断读取文本中,是否有实际扫描数量
                        {
                            obj.Code = arr[0].Trim(); //作业单号
                            obj.Count = Convert.ToInt32(arr[3].Trim()); //实际扫描数量
                            list.Add(obj);
                        }
                    }
                    catch
                    {
                        MessageBox.Show("导入内容格式不正确,请检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    strLine = streamReader.ReadLine(); //循环读取下一行
                }
                fs.Close(); //关闭流
                streamReader.Close();

                //判断读取到的文本中,是否有重复的项
                var linq = from s in list
                           group s by new { s.Code } into newGroup
                           where newGroup.Count() > 1
                           select newGroup;
                if (linq.ToList().Count > 0)
                {
                    MessageBox.Show("导入内容中有重复的项,请检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                #endregion

                DataGridViewRow row;
                int ii = 0;
                foreach (DataGridViewRow drA in _frm.dgvA.Rows)
                {
                    foreach (ImportObject ss in list)
                    {
                        if (drA.Cells["OperationBillCodeA"].Value.ToString() == ss.Code)
                        {
                            row = new DataGridViewRow();
                            _frm.dgvB.Rows.Add(row);

                            _frm.dgvB.Rows[ii].Cells["OperationBillCodeB"].Value = ss.Code;//作业单号
                            _frm.dgvB.Rows[ii].Cells["UnGoodsNumberB"].Value = ss.Count;//实际卸货数量
                            _frm.dgvB.Rows[ii].Cells["WayBillCodeB"].Value = drA.Cells["WayBillCodeA"].Value;//托运单号
                            if (ss.Count == Convert.ToInt32(drA.Cells["GoodsNumberA"].Value))//扫描数量==任务列表中计划数量
                            {
                                _frm.dgvB.Rows[ii].Cells["UnGrossWeightB"].Value = drA.Cells["GrossWeightA"].Value;//重量
                                _frm.dgvB.Rows[ii].Cells["UnGoodsSizeB"].Value = drA.Cells["GoodsSizeA"].Value;//体积
                            }
                            _frm.dgvB.Rows[ii].Cells["SurfaceCodeB"].Value = drA.Cells["SurfaceCodeA"].Value;//面单号
                            _frm.dgvB.Rows[ii].Cells["ShipperNameB"].Value = drA.Cells["ShipperNameA"].Value;//托运方

                            ii++;
                            break;//匹配数据后,跳出本次循环
                        }
                    }
                }

                //扫描导入成功后,清空手工表格(清空数据、货品缓存)
                _frm.dgvC.Rows.Clear();
                _frm.saveListObj=new List<Oper_LoadOrUnLoadDetailsObject>();
            }

        }
        #endregion

转载于:https://www.cnblogs.com/xiangshu/articles/2785593.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值