实战基础技能(21)--------多数据拼凑成表插入到数据库中

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace TechnologyProject.项目管理.加计扣除.ERP导入
{
    public partial class superDeduction : Form
    {
        DataGridViewRow row = new DataGridViewRow();//科研项目表的选红行
        DataSet ds_Data = new DataSet();//excel DS
        DataTable datatable_ERP = null;//ERP导入DS

        Hashtable hs_superDeductionERP = new Hashtable();//datagridview
        public superDeduction()
        {
            InitializeComponent();
            this.cmbMatchShow.SelectedIndex = 0;
            hs_superDeductionERP.Add("ID", "ID");
            hs_superDeductionERP.Add("项目唯一标识", "kj9000a");
            hs_superDeductionERP.Add("局级项目编号", "kj0065a");
            hs_superDeductionERP.Add("厂处级项目编号", "kj0068a");
            hs_superDeductionERP.Add("项目名称", "kj8101a");
            hs_superDeductionERP.Add("项目内码", "kj8102a");
            hs_superDeductionERP.Add("项目编号", "kj8103a");
            hs_superDeductionERP.Add("二级单位", "kj8104a");
            hs_superDeductionERP.Add("专业", "kj8105a");
            hs_superDeductionERP.Add("项目级别", "kj8106a");
            hs_superDeductionERP.Add("年度", "kj8107a");
            hs_superDeductionERP.Add("标识", "kj8108a");
            hs_superDeductionERP.Add("加计扣除标识", "kj8128a");
            hs_superDeductionERP.Add("加计扣除类型", "kj8129a");
            hs_superDeductionERP.Add("条款内容", "kj8130a");
            hs_superDeductionERP.Add("8大项类型", "kj8403a");
            hs_superDeductionERP.Add("金额", "kj8114a");
            hs_superDeductionERP.Add("备注", "kj8115a");

            btnCheck.Enabled = false;
            btnSave.Enabled = false;
        }
        public void FormShow(DataGridViewRow Srow)
        {
            row = Srow;
            this.ShowDialog();
        }

        #region 选择Excel
        private void btnChoose_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog openFD = new OpenFileDialog();//打开文件
                openFD.Filter = "所有 Office Excel 文件|(*.xls;*.xl*;*.xlt;*.xlsx;*.xlc;*.xlw)";//选择器
                if (openFD.ShowDialog() != DialogResult.OK)
                    return;
                this.txtPath.Text = openFD.FileName;
                if (!System.IO.File.Exists(this.txtPath.Text))//如果要导入的名字和选中的不同,返回
                    return;

                PrintStatement print = new PrintStatement();
                string filedir = string.Empty;

                string[] tablenames = print.Print_ERP导入(ref ds_Data, this.txtPath.Text);//数据源和路径

                if (tablenames == null)
                    return;

                SetAllSheet(tablenames);//通过数据库文件路径获取所有的Excel工作簿名称
                btnCheck.Enabled = true;
            }
            catch (Exception ex)
            {

            }
        }

        /// <summary>获取所有的Excel工作簿名称</summary>
        void SetAllSheet(string[] tabnames)
        {
            datatable_ERP = SetDT(ds_Data);//处理excel DS
            BindDataSource(datatable_ERP);
        }

        //处理数据表
        private DataTable SetDT(DataSet ds)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("kj0083a");//项目名称
            dt.Columns.Add("kj8403a");//8大项类型
            dt.Columns.Add("kj8114a");//金额
            dt.Columns.Add("kj0086a");//专业
            dt.Columns.Add("kj0087a");//年度
            dt.Columns.Add("kj0084a");//项目级别
            dt.Columns.Add("kj9000a");//项目唯一标识
            dt.Columns.Add("kj0065a");//局级项目编号
            dt.Columns.Add("kj0068a");//厂处级项目编号
            dt.Columns.Add("kj8128a");//加计扣除标识
            dt.Columns.Add("kj8129a");//加计扣除类型
            dt.Columns.Add("kj8130a");//条款内容
            dt.Columns.Add("kj8112a");//八大项内码
            dt.Columns.Add("kj8113a");//排序号
            DataTable dtData = ds.Tables[0];
            for (int i = 0, j = 0; i < dtData.Rows.Count; i++)
            {
                if (string.IsNullOrEmpty(dtData.Rows[i][0].ToString()))
                {
                    continue;
                }//如果8大项类型为空,Excel导入的DataTable开始循环下一行,跳出当前i的所在循环

                dt.Rows.Add();
                dt.Rows[j]["kj0083a"] = row.Cells["xmmc"].Value.ToString();//项目名称
                dt.Rows[j]["kj0086a"] = row.Cells["zy"].Value.ToString();//专业
                dt.Rows[j]["kj0087a"] = row.Cells["nd"].Value.ToString();//年度
                dt.Rows[j]["kj0084a"] = row.Cells["xmjb"].Value.ToString();//项目级别
                dt.Rows[j]["kj8403a"] = dtData.Rows[i][0];//8大项类型
                dt.Rows[j]["kj8114a"] = dtData.Rows[i][1];//金额
                dt.Rows[j]["kj9000a"] = row.Cells["ID"].Value.ToString();//项目唯一标识
                dt.Rows[j]["kj0065a"] = row.Cells["kj0065a"].Value.ToString();//局级项目编号
                dt.Rows[j]["kj0068a"] = row.Cells["kj0068a"].Value.ToString();//厂处级项目编号
                dt.Rows[j]["kj8128a"] = row.Cells["kj8128a"].Value.ToString();//加计扣除标识
                dt.Rows[j]["kj8129a"] = row.Cells["kj8129a"].Value.ToString();//加计扣除类型
                dt.Rows[j]["kj8130a"] = row.Cells["kj8130a"].Value.ToString();//条款内容
                j++;
            }
            return dt;
        }

        //绑定数据源
        private void BindDataSource(DataTable dtSource)
        {
            this.dataGV1.AutoGenerateColumns = false;
            dataGV1.DataSource = dtSource;
        }
        #endregion

        #region 显示匹配项改变事件
        private void cmbMatchShow_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                BindDataSouce(cmbMatchShow.Text);

                SetDGVColor();
            }
            catch (Exception ex)
            {

            }
        }
        public void BindDataSouce(string combotext)
        {
            string RowFilter = string.Empty;
            DataView dv = datatable_ERP.DefaultView;
            if (combotext == "已匹配")
                RowFilter = "Flag is not null";
            else if (combotext == "未匹配")
                RowFilter = "Flag is null";

            dv.RowFilter = RowFilter;

            this.dataGV1.AutoGenerateColumns = false;
            this.dataGV1.DataSource = dv;
        }
        public void SetDGVColor()
        {
            //改变当前单元格的颜色
            foreach (DataGridViewRow dgvr in this.dataGV1.Rows)
            {
                DataRowView drv = (DataRowView)dgvr.DataBoundItem;
                if (string.IsNullOrEmpty(drv["Flag"].ToString()))
                    dgvr.DefaultCellStyle.ForeColor = System.Drawing.Color.Black;
                else
                    dgvr.DefaultCellStyle.ForeColor = System.Drawing.Color.Blue;
            }
        }

        #endregion

        #region 导入数据
        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (dataGV1.CurrentRow == null) return;
                Cursor.Current = Cursors.WaitCursor;
                DataSet ds = new DataSet();//实例化一个ds
                DataTable dt = datatable_ERP.Copy();//将datagridview的datatable复制,再赋给dt
                DataView dv = dt.DefaultView;//将dt的默认表的视图赋给dv
                dv.RowFilter = "Flag is  null";//dataview的过滤器,Flag不等于空
                dt.Columns.Remove("Flag");
                dt.Columns.Remove("kj8403a");
                ds.Tables.Add(dv.ToTable());//将dv转换为表,加到ds里
                OperaterClass.NewInsert(Const.LISTNAME_JJCC, Const.CONTENTTYPE_JJCC, ref ds, UserInfo.Department);

                this.btnSave.Enabled = false;
                this.btnCheck.Enabled = false;
                MessageBox.Show("已成功导入 " + ds.Tables[0].Rows.Count + " 条信息!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("ERP数据导入失败!\n\r请检查您选择的Excel模板是否正确!\n\r。系统提示:" + ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        #endregion

        #region 检查数据
        private void btnCheck_Click(object sender, EventArgs e)
        {
            /*如何在一个datagridview中绑定数据源拼凑成另一张表
             * 数据源本身来源于一个导入的Excel数据源和传入的DataRow数据组成的一张DataTable,
             * 利用Excel数据源内容从字典表中查到的id,id加到目前的DataTable
             * 将这个DataTable的数据存到数据库中
             * for()循环要查的内容dr
             * {
             *      for()固定的数据字典dr
             *      {break;}内容在数据字典中找到,得到id,break跳出for循环
             *
             *      for()用得到的id到另一张表中查询,如果有表示查询到了数据,isExists = true,dr
             *      {}
             *
             *      如果isExists = true,在内容表中标记这列为已将存在
             *      将id加到内容dr中
             * }
             */
            try
            {
                btnSave.Enabled = true;
                //得到八大项字典表数据
                DataTable dtBDX = OperaterClass.SearchData(Const.LISTNAME_JJKC8DXZDB, Const.CONTENTTYPE_JJKC8DX, "", null).Tables[0];

                //根据项目名称,得到该项目对应的所有加计扣除列表数据
                CamlBuilder cbl = new CamlBuilder();
                cbl.AddWhere("Eq", "kj0083a", row.Cells["xmmc"].Value.ToString(), "Text");
                //DataTable dtJJKC = OperaterClass.SearchData(Const.LISTNAME_JJCC, Const.CONTENTTYPE_JJCC, cbl.GetCamlString(), null).Tables[0];
                DataSet dsJJKC = OperaterClass.SearchData(Const.LISTNAME_JJCC, Const.CONTENTTYPE_JJCC, cbl.GetCamlString(), null);
                DataTable dtJJKC = new DataTable();
                if (dsJJKC != null)
                {
                     dtJJKC = dsJJKC.Tables[0];
                }
                datatable_ERP.Columns.Add("Flag");//标识列,表示改加计扣除项是否存在
                for (int i = 0; i < datatable_ERP.Rows.Count; i++)
                {
                    string id = string.Empty;//8大项ID
                    string paNum = string.Empty;//排序号
                    string lx = datatable_ERP.Rows[i]["kj8403a"].ToString();//8大项类型
                    for (int j = 0; j < dtBDX.Rows.Count; j++)
                    {
                        if (lx == "1、仪器" && dtBDX.Rows[j]["kj8402a"].ToString() == "10")
                        {
                            lx = "1、仪器1";
                        }
                        else if (lx == "2、设备" && dtBDX.Rows[j]["kj8402a"].ToString() == "10")
                        {
                            lx = "2、设备1";
                        }
                        else if (lx == "1、仪器" && dtBDX.Rows[j]["kj8402a"].ToString() == "13")
                        {
                            lx = "1、仪器2";
                        }
                        else if (lx == "2、设备" && dtBDX.Rows[j]["kj8402a"].ToString() == "13")
                        {
                            lx = "2、设备2";
                        }
                        if (lx == dtBDX.Rows[j]["kj8403a"].ToString())
                        {
                            id = dtBDX.Rows[j]["ID"].ToString();
                            paNum = dtBDX.Rows[j]["kj8405a"].ToString();
                        }
                        if (!string.IsNullOrEmpty(id)) break;//如果找到了,就跳出for循环
                    }
                    bool isExists = false;//加计扣除项是否存在
                    for (int k = 0; k < dtJJKC.Rows.Count; k++)
                    {
                        if (id == dtJJKC.Rows[k]["kj8112a"].ToString())
                            isExists = true;
                        if (isExists) break;
                    }
                    if (isExists)
                    {
                        datatable_ERP.Rows[i]["Flag"] = "1";
                    }
                    datatable_ERP.Rows[i]["kj8112a"] = id;
                    datatable_ERP.Rows[i]["kj8113a"] = paNum;
                    id = string.Empty;
                    paNum = string.Empty;
                }

                BindDataSouce(cmbMatchShow.Text);
                SetDGVColor();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }
}

 break,return,continue的使用区别

continue是跳出开始循环的一次新迭代,如下:

for(var i=1;i<=10;i++)
{   if(i==6)  {     continue;   }
  document.write(i);
}
//输出结果:1234578910

break是跳出包含在最内层循环的循环体或者退出一个switch语句,如下:

for(var i=1;i<=10;i++)
{   if(i==6)   {  break;   }
  document.write(i);
}
//输出结果:12345

return是用于指定函数返回的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!当执行return语句时,即使函数主体中还有其他语句,函数执行也会停止!

时间: 2024-08-02 19:07:23

实战基础技能(21)--------多数据拼凑成表插入到数据库中的相关文章

实战基础技能(02)-----------类,属性,构造函数和方法打死都要快速区分

一:做项目时经常会看见很对自定义的类,一定要快速的识别才能正确的理解项目代码 二:区分 类:很好区分,有Class修饰 方法:有返回值的描述,新的方法名 构造函数:没有返回值,有类名 属性:主要是get 和set标志,可能会有自定义的类型有一定的迷惑性 实战基础技能(02)-----------类,属性,构造函数和方法打死都要快速区分,布布扣,bubuko.com

实战基础技能(07)--------WPF的登录界面的排版

一:截图 二:XAML代码 <Window x:Class="wpf练习.登录窗体" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="登录窗体" Height="200" Width="

实战基础技能(08)--------MVVM模式中WPF数据的完全绑定

一:截图,描述:将后台代码的姓名.年龄绑定到文本框,单击”增加年龄“--年龄自+1,单击”显示年龄“--弹出年龄的显示对话框,实现了从文本框修改年龄和后台更改年龄并显示到文本框 运行结果和解决方案管理截图如下: 二:person类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace 完全数据绑定 {

实战基础技能(06)--------object sender C#有个毛作用

button1_Click(object sender,EventHandler e) { Button button=(Button)sender; button.Text="text property has been changed at its event"; } object 是事件的激发控件,或叫事件源:具体我们可以用MessageBox.Show(sender.ToString())直接输出,我们可以直接看到; 如果一个按钮button1,我点击这个按钮﹕sender就是

实战基础技能(07)--------DEV控件的Gridview小技巧总结

1.设置Gridview控件的某列不可编辑 this.gridData.gridView1.Columns["change_date"].OptionsColumn.AllowEdit = false; 字段:change_date是数据库中字段,是绑定到gridview上的. 2.设置Gridview控件整体不可编辑 this.gridData.IsEnableEdit = false; 3.设置Gridview控件,列头不可排序 this.gridDataDetail.gridVi

PHP实现单击“添加”按钮增加一行表单项,并将所有内容插入到数据库中

PHP实现单击“添加”按钮增加一行表单项,并将所有内容插入到数据库中 效果图: html+jquery: <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script language="javascript" type="text/javascript" src=&qu

SQL 基础之子查询、多表插入、merge 语句、跟踪一段时间数据变化(二十)

使用子查询处理数据 可以使用子查询中的数据操纵语言(DML)语句: 使用内嵌视图检索数据 从一张表向另一张表复制数据 基于另一张表的值更新表中数据 基于另一张表的值删除表中的行 使用子查询作为数据源检索数据 select department_name, city from departments natural join (select l.location_id, l.city, l.country_id from loc l join countries c on(l.country_id

如何将EXCEL表导入ORACLE数据库中?【转】

来源:https://zhidao.baidu.com/question/383828330.html?qbl=relate_question_2&word=excel%20%B1%ED%CA%FD%BE%DD%D4%F5%C3%B4%D0%B4%C8%EBorancle 操作步骤如下: 准备数据:在excel中构造出需要的数据 2.将excel中的数据另存为文本文件(有制表符分隔的) 3.将新保存到文本文件中的数据导入到pl*sql中 在pl*sql中选择tools-->text impo

PowerDesigner如何把建好的表导入到数据库中,并且把注释也导入进去

第一次接触这个软件,经过自己的捣鼓和百度,终于可以顺利的导入数据库中了,好开森,希望可以帮助到更多人. 数据库(mysql)其实和sqlserver差不多,以16.5版本为例 1.选中一个PDM项目,DataBase->Configure Connections.. 2.点击圈住的红色部分,Add Data Source 3. 4. . 5. . 6. 7. . 注意:这个地方的Database是数据库中自己建的目标数据库的名字(用于导入表的数据库,16.5版本不会自动创建,12.5版本会自动创