442 lines
22 KiB
C#
442 lines
22 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Project.Dialog
|
|
{
|
|
public partial class fImp : Form
|
|
{
|
|
DataTable dt;
|
|
public fImp(DataTable dt_, string title, string[] collist)
|
|
{
|
|
InitializeComponent();
|
|
this.dt = dt_;
|
|
foreach (var col in collist)
|
|
{
|
|
var uc = new UserControl1();
|
|
uc.label1.Text = col;
|
|
uc.numericUpDown1.Value = 0;
|
|
uc.Size = new Size(163, 29);
|
|
uc.numericUpDown1.Tag = col;
|
|
uc.numericUpDown1.ValueChanged += NumericUpDown1_ValueChanged;
|
|
uc.numericUpDown1.BackColor = Color.LightGray;
|
|
this.flowLayoutPanel1.Controls.Add(uc);
|
|
}
|
|
this.Text = "Excel Import(" + title + ")";
|
|
}
|
|
|
|
private void NumericUpDown1_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
//값에 따라서 색상을 달리한다.
|
|
var ctl = sender as NumericUpDown;
|
|
var col = ctl.Tag.ToString();
|
|
if (ctl.Value == 0)
|
|
ctl.BackColor = Color.LightGray;
|
|
else
|
|
ctl.BackColor = Color.Lime;
|
|
UpdateColName();
|
|
}
|
|
|
|
void UpdateColName()
|
|
{
|
|
//reset name
|
|
for (int i = 1; i <= this.listView1.Columns.Count; i++)
|
|
listView1.Columns[i - 1].Text = "COL" + i.ToString();
|
|
|
|
//remap name
|
|
foreach (UserControl1 ctl in this.flowLayoutPanel1.Controls)
|
|
{
|
|
var colname = ctl.label1.Text;
|
|
var colNo = (int)ctl.numericUpDown1.Value;
|
|
if (colNo < 1) continue;
|
|
listView1.Columns[colNo - 1].Text = colname;
|
|
}
|
|
}
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
{
|
|
var od = new OpenFileDialog();
|
|
od.RestoreDirectory = true;
|
|
if (od.ShowDialog() == DialogResult.OK)
|
|
{
|
|
this.textBox1.Text = od.FileName;
|
|
btPreView.PerformClick();
|
|
}
|
|
}
|
|
|
|
private void button2_Click(object sender, EventArgs e)
|
|
{
|
|
var fn = this.textBox1.Text.Trim();
|
|
var ext = System.IO.Path.GetExtension(fn);
|
|
libxl.Book book;
|
|
|
|
if (ext == "xls") book = new libxl.BinBook();
|
|
else book = new libxl.XmlBook();
|
|
|
|
//Amkor Technology/windows-242f240302c3e50d6cb1686ba2q4k0o9
|
|
book.setKey("Amkor Technology", "windows-242f240302c3e50d6cb1686ba2q4k0o9");
|
|
book.load(fn);
|
|
var sheet = book.getSheet((int)numericUpDown3.Value);
|
|
var cols = sheet.lastCol();
|
|
var rows = sheet.lastRow();
|
|
if (numericUpDown1.Value < 1) numericUpDown1.Value = 0;
|
|
|
|
if(numericUpDown2.Value > rows) this.numericUpDown2.Value = rows;
|
|
else if(numericUpDown2.Value < 1) this.numericUpDown2.Value = rows;
|
|
|
|
var sn = (int)numericUpDown1.Value;
|
|
var en = (int)numericUpDown2.Value;
|
|
|
|
if (sn < 1)
|
|
{
|
|
MessageBox.Show("Start row number must be greater than 0");
|
|
return;
|
|
}
|
|
if (en < sn)
|
|
{
|
|
MessageBox.Show("End row number must be greater than start number");
|
|
return;
|
|
}
|
|
|
|
this.listView1.Columns.Clear();
|
|
for (int i = 1; i <= cols; i++)
|
|
{
|
|
this.listView1.Columns.Add("col" + i.ToString());
|
|
}
|
|
|
|
var previewcnt = 20;
|
|
this.listView1.Items.Clear();
|
|
var maxrow = Math.Min(previewcnt, en);
|
|
for (int i = sn; i <= maxrow; i++)
|
|
{
|
|
var data0 = sheet.readStr(i - 1, 0);
|
|
var lv = this.listView1.Items.Add(data0);
|
|
for (int j = 1; j < cols; j++)
|
|
{
|
|
var data1 = sheet.readStr(i - 1, j);
|
|
lv.SubItems.Add(data1.ToString());
|
|
}
|
|
}
|
|
this.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
|
|
lbMsg.Text = $"Preview displays up to {previewcnt} items";
|
|
}
|
|
|
|
private void numericUpDown2_ValueChanged(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void label3_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void fImp_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
void AddData(DataSet1.Component_Reel_SIDConvDataTable dt2, string v_101, string v_103, string v_106, string v_108, string v_103_2, ref int cntI, ref int cntE)
|
|
{
|
|
var newdr = dt2.NewComponent_Reel_SIDConvRow();
|
|
if (string.IsNullOrEmpty(v_101) == false) newdr.M101 = v_101;
|
|
if (string.IsNullOrEmpty(v_103) == false) newdr.M103 = v_103;
|
|
if (string.IsNullOrEmpty(v_106) == false) newdr.M106 = v_106;
|
|
if (string.IsNullOrEmpty(v_108) == false) newdr.M108 = v_108;
|
|
if (string.IsNullOrEmpty(v_103_2) == false) newdr.M103_2 = v_103_2;
|
|
dt2.AddComponent_Reel_SIDConvRow(newdr);
|
|
cntI += 1;
|
|
}
|
|
|
|
void UpdateData(DataSet1.Component_Reel_SIDConvDataTable dt2,
|
|
List<DataSet1.Component_Reel_SIDConvRow> list,
|
|
string mainValue, string column,
|
|
string v_101, string v_103, string v_106, string v_108, string v_103_2, ref int cntI, ref int cntE)
|
|
{
|
|
//데이터를 업데이트해준다.
|
|
foreach (var item in list)
|
|
{
|
|
//103값이 있는경우 처리해야한다
|
|
if (string.IsNullOrEmpty(mainValue) == false)
|
|
{
|
|
//값이 비어있다면 기록하고 없다면 추가한다.
|
|
if (item[column] == null || string.IsNullOrEmpty(item[column].ToString()))
|
|
{
|
|
item[column] = mainValue;
|
|
item.EndEdit();
|
|
cntE += 1;
|
|
}
|
|
else if (item[column].ToString() != mainValue)
|
|
AddData(dt2, v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void tbUpdate_Click(object sender, EventArgs e)
|
|
{
|
|
//자료등록메세지
|
|
var dlg = MessageBox.Show(string.Format("Do you want to register {0} records?", this.numericUpDown2.Value), "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
|
if (dlg == DialogResult.Yes)
|
|
{
|
|
//먼저 컬럼 목록을 가져온다
|
|
Dictionary<string, int> collist = new Dictionary<string, int>();
|
|
foreach (UserControl1 uc in this.flowLayoutPanel1.Controls)
|
|
{
|
|
var col = uc.label1.Text;
|
|
var no = (int)uc.numericUpDown1.Value;
|
|
if (no == 0) continue;
|
|
if (collist.Where(t => t.Value == no).Any())
|
|
{
|
|
MessageBox.Show(string.Format("Column {0} is already assigned", no));
|
|
return;
|
|
}
|
|
collist.Add(col, no);
|
|
}
|
|
|
|
if (collist.Count < 1)
|
|
{
|
|
MessageBox.Show("No columns have been assigned");
|
|
return;
|
|
}
|
|
|
|
|
|
var fn = this.textBox1.Text.Trim();
|
|
var ext = System.IO.Path.GetExtension(fn);
|
|
libxl.Book book;
|
|
if (ext == "xls") book = new libxl.BinBook();
|
|
else book = new libxl.XmlBook();
|
|
|
|
//Amkor Technology/windows-242f240302c3e50d6cb1686ba2q4k0o9
|
|
book.setKey("Amkor Technology", "windows-242f240302c3e50d6cb1686ba2q4k0o9");
|
|
book.load(fn);
|
|
var sheet = book.getSheet((int)numericUpDown3.Value);
|
|
|
|
var sn = (int)numericUpDown1.Value;
|
|
var en = (int)numericUpDown2.Value;
|
|
this.prb1.Value = 0;
|
|
this.prb1.Maximum = en;
|
|
var cntI = 0;
|
|
var cntSkip = 0;
|
|
var cntD = 0;
|
|
var cntE = 0;
|
|
for (int i = sn; i <= en; i++)
|
|
{
|
|
this.prb1.Value = i;
|
|
this.lbMsg.Text = string.Format("{0}/{1} Added:{2},SKIP:{3},Duplicate:{4}", i, en, cntI, cntSkip, cntD);
|
|
if (i % 10 == 0) Application.DoEvents();
|
|
|
|
Dictionary<string, string> datalist = new Dictionary<string, string>();
|
|
foreach (var coldata in collist)
|
|
{
|
|
var colname = coldata.Key;
|
|
var colno = coldata.Value;
|
|
|
|
var data0 = sheet.readStr(i - 1, colno - 1);
|
|
datalist.Add(colname, data0);
|
|
}
|
|
|
|
//데이터를 다 기록했다 이중 기준값인 SID
|
|
if (dt is DataSet1.Component_Reel_SIDInfoDataTable)
|
|
{
|
|
//sid 열의 값을 취한다.
|
|
if (datalist.Where(t => t.Key == "SID").Any() == false) continue;
|
|
var sid = datalist.Where(t => t.Key == "SID").First().Value;
|
|
|
|
var custcode = datalist.Where(t => t.Key == "CustCode").First().Value;
|
|
if (custcode == null) custcode = string.Empty;
|
|
else custcode = custcode.PadLeft(4, '0');
|
|
|
|
var partno = datalist.Where(t => t.Key == "PartNo").First().Value;
|
|
if (partno == null) partno = string.Empty;
|
|
|
|
|
|
partno = partno.Trim();
|
|
custcode = custcode.Trim();
|
|
sid = sid.Trim();
|
|
|
|
var tata = new DataSet1TableAdapters.Component_Reel_SIDInfoTableAdapter();
|
|
|
|
//이 sid 값이 있는지 체크한다.
|
|
var cnt = tata.CheckData(sid, custcode, partno);
|
|
//var dt2 = dt as DataSet1.Component_Reel_SIDInfoDataTable;
|
|
//var sidlist = dt2.Where(t => t.SID == sid && t.PartNo == partno && t.CustCode == custcode);
|
|
if(cnt == 0)
|
|
{
|
|
//없다면 추가해준다.
|
|
//var newdr = dt2.NewComponent_Reel_SIDInfoRow();
|
|
//newdr.SID = sid;
|
|
//newdr.PartNo = partno;
|
|
//newdr.CustCode = custcode;
|
|
//newdr.Remark = "신규추가" + DateTime.Now.ToShortTimeString();
|
|
//dt2.AddComponent_Reel_SIDInfoRow(newdr);
|
|
cntI += 1;
|
|
|
|
tata.Insert(sid, custcode, string.Empty, string.Empty, partno, string.Empty, DateTime.Now.ToString());
|
|
//Boolean bInsert = false;
|
|
//foreach (var item in datalist)
|
|
//{
|
|
// if (string.IsNullOrEmpty(item.Value) == false)
|
|
// {
|
|
// if (item.Key.ToLower() == "custcode")
|
|
// {
|
|
// var itemvalue = item.Value.ToString();
|
|
// itemvalue = itemvalue.PadLeft(4, '0');
|
|
// newdr[item.Key] = itemvalue;
|
|
// }
|
|
// else
|
|
// {
|
|
// newdr[item.Key] = item.Value;
|
|
// }
|
|
// if (item.Key.ToUpper() != "SID") bInsert = true;
|
|
// }
|
|
|
|
//}
|
|
//if (bInsert)
|
|
//{
|
|
// newdr.Remark = "신규추가" + DateTime.Now.ToShortTimeString();
|
|
// dt2.AddComponent_Reel_SIDInfoRow(newdr);
|
|
// cntI += 1;
|
|
//}
|
|
//else newdr.Delete();
|
|
}
|
|
else
|
|
{
|
|
//여러개가 잇다면 모두 처리해준다.
|
|
//foreach (var dr in sidlist)
|
|
//{
|
|
// Boolean update = false;
|
|
// foreach (var item in datalist)
|
|
// {
|
|
// var itemvalue = item.Value.Trim();
|
|
// if (string.IsNullOrEmpty(itemvalue)) continue;
|
|
// if (item.Key.ToLower() == "custcode")
|
|
// {
|
|
// itemvalue = itemvalue.PadLeft(4, '0');
|
|
// }
|
|
// var curValue = dr[item.Key];
|
|
// if (curValue == null)
|
|
// {
|
|
// dr[item.Key] = item.Value;
|
|
// update = true;
|
|
// }
|
|
// else if (curValue.ToString() != itemvalue)
|
|
// {
|
|
// dr["remark"] = string.Format("[{2}] {0}->{1}", curValue, itemvalue, item.Key);
|
|
// dr[item.Key] = itemvalue;
|
|
// update = true;
|
|
// }
|
|
// }
|
|
// if (update) cntSkip += 1;
|
|
//}
|
|
}
|
|
|
|
}
|
|
else if (dt is DataSet1.Component_Reel_SIDConvDataTable)
|
|
{
|
|
var dt2 = dt as DataSet1.Component_Reel_SIDConvDataTable;
|
|
|
|
var v_101 = string.Empty;
|
|
var v_103 = string.Empty;
|
|
var v_103_2 = string.Empty;
|
|
var v_106 = string.Empty;
|
|
var v_108 = string.Empty;
|
|
|
|
var d_101 = datalist.Where(t => t.Key == "M101").FirstOrDefault();
|
|
var d_103 = datalist.Where(t => t.Key == "M103").FirstOrDefault();
|
|
var d_106 = datalist.Where(t => t.Key == "M106").FirstOrDefault();
|
|
var d_108 = datalist.Where(t => t.Key == "M108").FirstOrDefault();
|
|
var d_103_2 = datalist.Where(t => t.Key == "M103_2").FirstOrDefault();
|
|
|
|
if (d_101.Key != null) v_101 = d_101.Value.Trim();
|
|
if (d_103.Key != null) v_103 = d_103.Value.Trim();
|
|
if (d_106.Key != null) v_106 = d_106.Value.Trim();
|
|
if (d_108.Key != null) v_108 = d_108.Value.Trim();
|
|
if (d_103_2.Key != null) v_103_2 = d_103_2.Value.Trim();
|
|
|
|
|
|
//101값이 있다면?
|
|
if (string.IsNullOrEmpty(v_101) == false)
|
|
{
|
|
var list = dt2.Where(t => t.M101 == v_101).ToList();
|
|
if (list.Any() == false) AddData(dt2, v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //값이 없으니 추가 해야 한다
|
|
else
|
|
{
|
|
UpdateData(dt2, list, v_103, "M103", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_106, "M106", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_108, "M108", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_103_2, "M103_2", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
}
|
|
}
|
|
|
|
//103값이 있다면?
|
|
if (string.IsNullOrEmpty(v_103) == false)
|
|
{
|
|
var list = dt2.Where(t => t.M103 == v_103).ToList();
|
|
if (list.Any() == false) AddData(dt2, v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //값이 없으니 추가 해야 한다
|
|
else
|
|
{
|
|
UpdateData(dt2, list, v_101, "M101", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_106, "M106", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_108, "M108", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_103_2, "M103_2", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
}
|
|
}
|
|
//106값이 있다면?
|
|
if (string.IsNullOrEmpty(v_106) == false)
|
|
{
|
|
var list = dt2.Where(t => t.M106 == v_106).ToList();
|
|
if (list.Any() == false) AddData(dt2, v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //값이 없으니 추가 해야 한다
|
|
else
|
|
{
|
|
UpdateData(dt2, list, v_101, "M101", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_103, "M103", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_108, "M108", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_103_2, "M103_2", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
}
|
|
}
|
|
//108값이 있다면?
|
|
if (string.IsNullOrEmpty(v_108) == false)
|
|
{
|
|
var list = dt2.Where(t => t.M108 == v_108).ToList();
|
|
if (list.Any() == false) AddData(dt2, v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //값이 없으니 추가 해야 한다
|
|
else
|
|
{
|
|
UpdateData(dt2, list, v_101, "M101", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_103, "M103", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_106, "M106", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_103_2, "M103_2", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
}
|
|
}
|
|
//103_2값이 있다면?
|
|
if (string.IsNullOrEmpty(v_103_2) == false)
|
|
{
|
|
var list = dt2.Where(t => t.M103_2 == v_103_2).ToList();
|
|
if (list.Any() == false) AddData(dt2, v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //값이 없으니 추가 해야 한다
|
|
else
|
|
{
|
|
UpdateData(dt2, list, v_101, "M101", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_103, "M103", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_106, "M106", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
UpdateData(dt2, list, v_108, "M108", v_101, v_103, v_106, v_108, v_103_2, ref cntI, ref cntE); //데이터를 업데이트해준다.
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
this.listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
|
|
lbMsg.Text = string.Format("The following amounts of data have been changed\n" +
|
|
"Added:{0},Duplicate:{1},SKIP:{2}\n" +
|
|
"Click 'Save' on the main screen to apply changes", cntI, cntD, cntSkip);
|
|
MessageBox.Show(lbMsg.Text);
|
|
if (cntI > 0 || cntD > 0) DialogResult = DialogResult.OK;
|
|
}
|
|
}
|
|
}
|
|
}
|