#pragma warning disable IDE1006 // 명명 스타일 using AR; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace Project.Dialog { public partial class Model_Motion_Desc : Form { public string Value = string.Empty; short axisIndex = 0; eAxis axis = eAxis.Z_THETA;// Color sbBackColor = Color.FromArgb(200, 200, 200); DataSet1 ds; public Model_Motion_Desc(DataSet1 ds_) { InitializeComponent(); this.ds = ds_; //this.bs.Filter = string.Empty; //this.bsPos.Filter = string.Empty; this.bs.DataSource = ds_; this.bsPos.DataSource = ds_; //this.bs.DataMember = string.Empty; //this.bsPos.DataMember = string.Empty; if (System.Diagnostics.Debugger.IsAttached == false) { // fb = new Dialog.fBlurPanel(); //fb.Show(); } this.KeyPreview = true; this.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Escape) this.Close(); }; this.StartPosition = FormStartPosition.CenterScreen; this.FormClosed += __Closed; var axlist = Enum.GetNames(typeof(eAxis)); var axvalues = Enum.GetValues(typeof(eAxis)); var preValueList = new List(); //모터설정값을 보고 해당 모터의 목록을 표시한다. //사용하지 않는 축은 표시하지 않는다 for (int i = 0; i < PUB.system.MotaxisCount; i++) { var axis = (eAxis)i; var axisname = (eAxisName)i; var axTitle = axisname.ToString();// axis.ToString(); if (PUB.system_mot.UseAxis(i) == false) continue;// axTitle = "Disable"; if (axTitle.Equals(i.ToString())) axTitle = "(No Name)"; this.dvMot.Rows.Add( new string[] { i.ToString(), axTitle, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty }); } } private void __Load(object sender, EventArgs e) { this.Show(); ////'Application.DoEvents(); //this.ds1.Clear(); //this.ds1.MCModel.Merge(Pub.mdm.dataSet.MCModel); //this.ds1.MCModel.AcceptChanges(); //this.ds1.MCModel.TableNewRow += Model_TableNewRow; this.bs.Filter = "isnull(title,'') <> ''"; this.bsPos.Filter = "isnull(title,'') = '' and isnull(motindex,-1) = -1"; this.tmDisplay.Start(); //button7.Enabled = !Pub.mot.HasHomeSetOff; //dispal current if (PUB.Result.isSetmModel) { arLabel18.Text = PUB.Result.mModel.Title; //find data var datas = this.ds1.MCModel.Select("", this.bs.Sort); for (int i = 0; i < datas.Length; i++) { if (datas[i]["Title"].ToString() == PUB.Result.mModel.Title) { this.bs.Position = i; break; } } } else arLabel18.Text = "--"; if (this.ds1.MCModel.Rows.Count < 1) { var newdr = this.ds1.MCModel.NewMCModelRow(); newdr.Title = "Default"; newdr.pidx = -1; newdr.PosIndex = -1; newdr.idx = ds1.MCModel.Rows.Count + 1; this.ds1.MCModel.AddMCModelRow(newdr); } PUB.log.RaiseMsg += log_RaiseMsg; refreshtreen(); } private void __Closed(object sender, FormClosedEventArgs e) { //if (fb != null) fb.Dispose(); this.tmDisplay.Enabled = false; } void log_RaiseMsg(DateTime LogTime, string TypeStr, string Message) { } private void tmDisplay_Tick(object sender, EventArgs e) { //this.lbMotPos.Text = $"X:{Pub.mot.GetActPos((int)eAxis.X1_TOP}"; //tabControl4.TabPages[0].Text = $"({axisIndex}) JOG"; if (PUB.joypad != null && PUB.joypad.IsOpen) this.Text = "MODEL(MOTION) SETTING - JOYSTICK GROUP:" + PUB.Result.JoystickAxisGroup.ToString(); else this.Text = "MODEL(MOTION) SETTING"; if (PUB.mot.IsInit == false) { //if (groupBox3.Enabled == true) groupBox3.Enabled = false; } else { //if (groupBox3.Enabled == false) groupBox3.Enabled = true; //각축별 기본 상태를 표시해준다. dvMot.SuspendLayout(); for (int r = 0; r < dvMot.RowCount; r++) // 오류수정 2111221 { var row = this.dvMot.Rows[r]; var axis = int.Parse(row.Cells[0].Value.ToString()); row.Cells[0].Style.BackColor = PUB.mot.IsServOn(axis) ? Color.Lime : Color.Tomato; row.Cells[2].Value = $"{PUB.mot.GetCmdPos(axis)}"; row.Cells[3].Value = $"{PUB.mot.GetActPos(axis)}"; row.Cells[4].Style.BackColor = PUB.mot.IsOrg(axis) ? Color.SkyBlue : Color.Gray; row.Cells[5].Style.BackColor = PUB.mot.IsLimitN(axis) ? Color.Red : Color.Gray; row.Cells[6].Style.BackColor = PUB.mot.IsLimitP(axis) ? Color.Red : Color.Gray; row.Cells[7].Style.BackColor = PUB.mot.IsInp(axis) ? Color.SkyBlue : Color.Gray; row.Cells[8].Style.BackColor = PUB.mot.IsServAlarm(axis) ? Color.Red : Color.Gray; row.Cells[9].Style.BackColor = PUB.mot.IsHomeSet(axis) ? Color.Green : Color.Gray; } dvMot.ResumeLayout(); } // this.tblFG.Invalidate(); } private void dv_DataError(object sender, DataGridViewDataErrorEventArgs e) { } void ChangeCurrentPosition(int Axis, NumericUpDown valueCtl) { valueCtl.Value = (decimal)PUB.mot.GetActPos(Axis); } /// /// 상단목록에서 모션을 선택한 경우 /// /// /// private void MotAxisSelect(int axisindex) { RefreshMotorPosition(); } private void bs_CurrentChanged_1(object sender, EventArgs e) { //BindingData(); } void RefreshMotorPosition() { var drv = this.bs.Current as DataRowView; if (drv == null) return; if (dvMot.SelectedCells.Count < 1) return; var dr = drv.Row as DataSet1.MCModelRow; //var rowindex = dvMot.SelectedCells[0].RowIndex; //var row = dvMot.Rows[rowindex]; //var axisIndex = short.Parse(row.Cells[0].Value.ToString()); //var axis = (eAxis)this.axisIndex; //var axisTitle = row.Cells[1].Value.ToString(); { //위치정보 표시 bsPos.Filter = string.Format("pidx={0} and motindex = {1}", dr.idx, this.axisIndex); ////(위치정보) 데이터수량이 맞지 않으면 재 생성한다 //string[] list = null; //Array val = null; //Type axType = null; //var axis = (eAxis)axisIndex; //if (axis == eAxis.X2_FRT || axis == eAxis.X3_RER) axType = typeof(eX2SHTLoc); //else if (axis == eAxis.X1_TOP) axType = typeof(eX1TOPLoc); //else if (axis == eAxis.Y1_PIK) axType = typeof(eY1PIKLoc); //else if (axis == eAxis.Y2_PRECLEAN) axType = typeof(eY2BRSLoc); //else if (axis == eAxis.Y3_LASER) axType = typeof(eY3LSRLoc); //else if (axis == eAxis.Y4_VIS) axType = typeof(eY4VISLoc); //전용으로바꿔야함 //else if (axis == eAxis.Z1_PIK) axType = typeof(eZ1PIKLoc); //else if (axis == eAxis.Z2_PRECLEAN) axType = typeof(eZ2BRSLoc); //else if (axis == eAxis.Z3_LASER) axType = typeof(eZ3LSRLoc); //else if (axis == eAxis.Z4_VISION) axType = typeof(eZ4VISLoc);//전용으로바꿔야함 //else if (axis == eAxis.L_REAR || axis == eAxis.L_FRNT) axType = typeof(eLDLoc); //else if (axis == eAxis.UR_NG || axis == eAxis.UR_OK || axis == eAxis.UF_NG || axis == eAxis.UF_OK) axType = typeof(eUDLoc); //if (axType == null) //{ // Util.MsgE("지정한 축에 대한 위치정보가 지정되지 않았습니다"); // return; //} //list = Enum.GetNames(axType); //val = Enum.GetValues(axType); //var sb = new System.Text.StringBuilder(); //var cntI = 0; //var cntE = 0; //var cntD = 0; ////posidx == -1인 데이터는 모두 소거한다 //var dellist = ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.PosIndex == -1).ToList(); //메인목록은 남겨둔다 //cntD += dellist.Count(); //foreach (var item in dellist) // item.Delete(); //ds1.MCModel.AcceptChanges(); ////모든데이터의 체크상태를 off한다. //var alllist = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex); //foreach (var item in alllist) // item.Check = false; //ds1.MCModel.AcceptChanges(); //for (int i = 0; i < list.Length; i++) //{ // var arrTitle = list[i]; // var vv = val.GetValue(i); // var arrIndex = (byte)vv;// ((eAxis)(val.GetValue(i))); // if (arrIndex < 50) continue; //여기는 예약된 위치값이므로 사용하지 않는다 // var targetem = Enum.Parse(axType, vv.ToString()); // //이 값이 데이터가 없다면 추가하고, 있다면 이름을 검사해서 결과를 안내한다 // var pDr = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.PosIndex == arrIndex && t.MotIndex == axisIndex).FirstOrDefault(); // if (pDr == null) // { // //cntI += 1; // //var newdr = this.ds1.MCModel.NewMCModelRow(); // //if (ds1.MCModel.Rows.Count == 0) newdr.idx = 1; // //else newdr.idx = ds1.MCModel.Max(t => t.idx) + 1; // //newdr.pidx = dr.idx; // //newdr.MotIndex = this.axisIndex; // //newdr.PosIndex = (short)arrIndex; // //newdr.PosTitle = arrTitle; // //newdr.Position = 0.0; // //newdr.Speed = 50; // //newdr.SpeedAcc = 100; // //newdr.Check = true; // //newdr.Description = targetem.DescriptionAttr(); // //newdr.Category = targetem.CategoryAttr(); // //this.ds1.MCModel.AddMCModelRow(newdr); // //newdr.EndEdit(); // //sb.AppendLine("항목 추가 : " + arrTitle); // } // else // { // //이름이 다르다면 추가해준다. // //if (pDr.PosTitle != arrTitle) // //{ // // sb.AppendLine("(위치)항목 변경 : " + pDr.PosTitle + " => " + arrTitle); // // cntE += 1; // // pDr.PosTitle = arrTitle; // //} // ////pDr.Description = targetem.DescriptionAttr(); // ////pDr.Category = targetem.CategoryAttr(); // //pDr.EndEdit(); // pDr.Check = true; // } //} ////미사용개체 삭제한다 ////var NotUseList = this.ds1.MCModel.Where(t => t.pidx == dr.idx && t.MotIndex == this.axisIndex && t.Check == false).ToList(); ////cntD += NotUseList.Count(); ////foreach (var item in NotUseList) //// item.Delete(); //ds1.MCModel.AcceptChanges(); //if (cntI > 0) sb.AppendLine("추가수량 : " + cntI.ToString()); //if (cntE > 0) sb.AppendLine("변경수량 : " + cntE.ToString()); //if (cntD > 0) sb.AppendLine("삭제수량 : " + cntD.ToString()); ////최종 확정 //this.ds1.MCModel.AcceptChanges(); //if (sb.Length > 0) //{ // Util.MsgI(sb.ToString()); //} } } private void chkJogMoveForce_Click(object sender, EventArgs e) { } private void btAdd_Click(object sender, EventArgs e) { var newdr = this.ds1.MCModel.NewMCModelRow();// this.bs.AddNew() as DataRowView; newdr["Title"] = DateTime.Now.ToShortDateString(); newdr["pidx"] = -1; newdr.PosIndex = -1; newdr["idx"] = this.ds1.MCModel.Rows.Count + 1; this.ds1.MCModel.AddMCModelRow(newdr); this.bs.Position = this.bs.Count - 1; //모터축을 자동 선택해줌 //radClick_MotAxisSelect(this.flowLayoutPanel1.Controls[0], null); } private void btDel_Click(object sender, EventArgs e) { var drv = this.bs.Current as DataRowView; if (drv == null) return; var dlg = UTIL.MsgQ("현재 선택된 자료를 삭제하시겠습니까?"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; bs.RemoveCurrent(); this.ds1.MCModel.AcceptChanges(); } private void btSave_Click(object sender, EventArgs e) { //button - save this.dv.Focus(); this.Validate(); this.bs.EndEdit(); this.bsPos.EndEdit(); this.Validate(); this.DialogResult = DialogResult.OK; } private void button2_Click(object sender, EventArgs e) { //select this.Invalidate(); this.bs.EndEdit(); var drv = this.bs.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; if (dr.Title == "") return; this.Value = dr.Title; DialogResult = System.Windows.Forms.DialogResult.OK; } private void button6_Click(object sender, EventArgs e) { //적용 this.bs.EndEdit(); this.bsPos.EndEdit(); this.Validate(); var drv = this.bs.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; this.Value = dr.Title; PUB.Result.mModel.ReadValue(dr.Title, this.ds1.MCModel); if (PUB.Result.mModel.isSet) { PUB.log.AddAT("모션모델선택완료 : " + PUB.Result.mModel.Title); } else UTIL.MsgE("적용 실패\n\n대상 모델 명이 없습니다"); } private void button4_Click(object sender, EventArgs e) { var drv = this.bs.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; var dlg = UTIL.MsgQ(string.Format("다음 모델 정보를 복사하시겠습니까?\n\n모델명 : {0}", dr.Title)); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var newdr = this.ds1.MCModel.NewMCModelRow(); UTIL.CopyData(dr, newdr); newdr.Title += "-copy-"; newdr.idx = this.ds1.MCModel.OrderByDescending(t => t.idx).FirstOrDefault().idx + 1; newdr.EndEdit(); this.ds1.MCModel.AddMCModelRow(newdr); if (this.bs.Count > 0) this.bs.Position = this.bs.Count - 1; } private void arDatagridView2_CellClick(object sender, DataGridViewCellEventArgs e) { //position click var dv = sender as DataGridView; var col = this.dvPosition.Columns[e.ColumnIndex]; var colName = col.Name.ToLower(); if (colName == "btgo") { if (PUB.mot.HasHomeSetOff) { UTIL.MsgE("모션의 홈이 완료되지 않았습니다\n메인화면에서 '장치초기화'를 진행 하세요"); return; } //현재값으로 모터를 이동 //현재위치값으로 설정 var cell = dv.Rows[e.RowIndex].Cells["btpos"]; var value = (double)cell.Value; var drv = this.bsPos.Current as DataRowView; var drParent = drv.Row as DataSet1.MCModelRow; //일반 속도값을 찾는다 //var speedDr = drParent.Speed;// this.ds1.MCModel.Where(t => t.pidx == drParent.idx && t.MotIndex == axisIndex && t.PosIndex == -1 && t.SpdIndex == (int)eAxisSpeed.Normal).FirstOrDefault(); var speed = drParent.Speed;// speedDr.Speed;// (double)this.nudJogVel.Value; var acc = drParent.SpeedAcc;// speedDr.SpeedAcc;// ; (double)nudAcc.Value; var relative = false; //if (ctl.motCommand == arFrame.Control.MotCommandButton.eCommand.RelativeMove) // relative = true; var msg = string.Format("모션의 위치를 변경 하시겠습니까\n" + "축 : {0}\n" + "현재위치 : {1}\n" + "대상위치 : {2}\n" + "이동속도 : {3}(가속도:{4})\n" + "이동 시 충돌 가능성이 있는지 반드시 확인 하세요", axis, PUB.mot.GetActPos(axisIndex), value, speed, acc); if (UTIL.MsgQ(msg) != System.Windows.Forms.DialogResult.Yes) return; var chkJogMoveForce = true; if (!MOT.Move(axis, value, speed, acc, relative, !chkJogMoveForce, !chkJogMoveForce)) PUB.log.AddE("MOT:MOVE_:" + axis.ToString() + ",Msg=" + PUB.mot.ErrorMessage); } else if (colName == "btset") { if (PUB.mot.HasHomeSetOff) { UTIL.MsgE("모션의 홈이 완료되지 않았습니다\n메인화면에서 '장치초기화'를 진행 하세요"); return; } //현재위치값으로 설정 var cell = dv.Rows[e.RowIndex].Cells["btpos"]; var value = (double)cell.Value; var nValue = Math.Round(PUB.mot.GetCmdPos(this.axisIndex), 4); //소수점4자리에서 반올림처리한다 210414 var msg1 = string.Format("모션의 설정값을 변경 하시겠습니까\n" + "축 : {0}\n" + "변경전 : {1}\n" + "변경후 : {2}\n" + "변경 후 '저장'을 눌러야 영구 기록 됩니다", this.axis, value, nValue); if (UTIL.MsgQ(msg1) != System.Windows.Forms.DialogResult.Yes) return; cell.Value = nValue; } else if (colName == "btpos") { //현재값 변경 팝업 var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex]; var value = (double)cell.Value; value = PUB.ChangeValuePopup(value, "위치 입력"); cell.Value = value; } else if (colName == "btspeed") { //현재값 변경 팝업 var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex]; var value = (double)cell.Value; value = PUB.ChangeValuePopup(value, "속도 입력"); cell.Value = value; } else if (colName == "btacc") { //현재값 변경 팝업 var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex]; var value = (double)cell.Value; value = PUB.ChangeValuePopup(value, "가속도 입력"); cell.Value = value; } else if (colName == "btdcc") { //현재값 변경 팝업 var cell = dv.Rows[e.RowIndex].Cells[e.ColumnIndex]; if (cell.Value.ToString().isEmpty()) cell.Value = "0"; var value = (double)cell.Value; value = PUB.ChangeValuePopup(value, "감속도 입력"); cell.Value = value; } } private void toolStripButton1_Click(object sender, EventArgs e) { var dlg = UTIL.MsgQ("모든 이동좌표의 속도를 일괄 변경하시겠습니까?"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var value = PUB.ChangeValuePopup(100.0, "일괄 속도 변경"); for (int i = 0; i < this.bsPos.Count; i++) { this.bsPos.Position = i; var drv = this.bsPos.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; dr.Speed = value; dr.EndEdit(); } } private void toolStripButton2_Click_2(object sender, EventArgs e) { var dlg = UTIL.MsgQ("모든 이동좌표의 가(감)속도를 일괄 변경하시겠습니까?"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var value = PUB.ChangeValuePopup(100.0, "일괄 가(감)속도 변경"); for (int i = 0; i < this.bsPos.Count; i++) { this.bsPos.Position = i; var drv = this.bsPos.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; dr.SpeedAcc = value; dr.EndEdit(); } } private void toolStripButton3_Click_1(object sender, EventArgs e) { var dlg = UTIL.MsgQ("모든 이동좌표의 감속도를 일괄 변경하시겠습니까?"); if (dlg != System.Windows.Forms.DialogResult.Yes) return; var value = PUB.ChangeValuePopup(0, "일괄 감속도 변경"); for (int i = 0; i < this.bsPos.Count; i++) { this.bsPos.Position = i; var drv = this.bsPos.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; dr.SpeedDcc = value; dr.EndEdit(); } } private void dvMot_SelectionChanged(object sender, EventArgs e) { if (dvMot.SelectedRows.Count < 1) { Console.WriteLine("no selecte"); this.axisIndex = -1; this.axis = (eAxis)axisIndex; } else { var selrow = dvMot.SelectedRows[0]; this.axisIndex = short.Parse(selrow.Cells["dvc_axis"].Value.ToString()); this.axis = (eAxis)axisIndex; MotAxisSelect(this.axisIndex); Console.WriteLine($"select indx {axisIndex}"); } } private void toolStripButton5_Click(object sender, EventArgs e) { this.Validate(); this.bs.EndEdit(); this.bsPos.EndEdit(); //using (var f = new Dialog.Motion_MoveToGroup(this.ds,arLabel18.Text)) //{ // if (f.ShowDialog() == DialogResult.OK) // { // this.bs.EndEdit(); // this.bsPos.EndEdit(); // } //} } void refreshtreen() { //모든데이터를 가져와서 트리뷰를 처리한다. var cat = this.ds.MCModel.GroupBy(t => t.Category).ToList(); var catorders = cat.OrderBy(t => t.Key).ToList(); //var cnt = 0; this.treeView1.Nodes.Clear(); foreach (var item in catorders) { if (item.Key.isEmpty()) continue; var catenames = item.Key.Split(','); foreach (var catename in catenames) { var grpname = catename.Split('|')[0]; if (catename.Split('|').Length < 2) continue; var itemname = catename.Split('|')[1]; if (treeView1.Nodes.ContainsKey(grpname) == false) { var nd = treeView1.Nodes.Add(grpname, grpname); nd.Nodes.Add(itemname); } else { if (itemname.StartsWith("F01"))// == "F01_FSOCKET_BTM") { } var nd = treeView1.Nodes[grpname]; if (nd.Nodes.ContainsKey(itemname) == false) { var snd = nd.Nodes.Add(itemname, itemname); if (itemname.StartsWith("R")) snd.ForeColor = Color.Blue; else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta; } else { var snd = nd.Nodes[itemname]; if (itemname.StartsWith("R")) snd.ForeColor = Color.Blue; else if (itemname.StartsWith("T")) snd.ForeColor = Color.Magenta; } } } } treeView1.ExpandAll(); if (treeView1.Nodes.Count > 0) treeView1.SelectedNode = this.treeView1.Nodes[0]; } void refreshlist() { this.listView1.Clear(); this.listView1.FullRowSelect = true; this.listView1.View = View.Details; this.listView1.Columns.Add("item"); this.listView1.Columns[0].Width = (int)(this.listView1.Width - listView1.Width * 0.1f); this.listView1.GridLines = true; this.listView1.AllowDrop = true; var drv = this.bsPos.Current as DataRowView; if (drv == null) return; var dr = drv.Row as DataSet1.MCModelRow; if (dr.Category.isEmpty()) return; var catelist = dr.Category.Split(','); List cats = new List(); foreach (var cate in catelist) { if (cate.isEmpty()) continue; if (cats.Contains(cate) == false) cats.Add(cate); } foreach (var cate in cats.OrderBy(t=>t)) { if (this.listView1.Items.ContainsKey(cate) == false) { var lv = this.listView1.Items.Add(cate, cate, 0); } else { //이미 있다. } } } private void bsPos_CurrentChanged(object sender, EventArgs e) { //포지션데이터가 움직이면 처리한다. refreshlist(); } private void toolStripButton1_Click_1(object sender, EventArgs e) { //트립에서 선택된 아이템을 추가한다. var tn = this.treeView1.SelectedNode; if (tn == null) return; if (tn.Level != 1) { if (tn.Nodes.Count < 1) { UTIL.MsgE("하위 항목이 없습니다"); return; } var dlg = UTIL.MsgQ($"{tn.Nodes.Count}건의 자료를 모두 추가 할까요?"); if (dlg != DialogResult.Yes) return; var ucnt = 0; foreach (TreeNode node in tn.Nodes) { var value = node.Parent.Text + "|" + node.Text; if (this.listView1.Items.ContainsKey(value) == false) { this.listView1.Items.Add(value); ucnt += 1; } } UTIL.MsgI($"{ucnt}건의 아이템이 추가 되었습니다"); //현재목록을 리스트로 만들고 업데이트한.ㄷ var drv = this.bsPos.Current as DataRowView; var dr = drv.Row as DataSet1.MCModelRow; List items = new List(); foreach (ListViewItem item in listView1.Items) items.Add(item.SubItems[0].Text); dr.Category = string.Join(",", items); dr.EndEdit(); } else { var value = tn.Parent.Text + "|" + tn.Text; if (this.listView1.Items.ContainsKey(value) == false) { this.listView1.Items.Add(value); //현재목록을 리스트로 만들고 업데이트한.ㄷ var drv = this.bsPos.Current as DataRowView; var dr = drv.Row as DataSet1.MCModelRow; List items = new List(); foreach (ListViewItem item in listView1.Items) items.Add(item.SubItems[0].Text); dr.Category = string.Join(",", items); dr.EndEdit(); } else UTIL.MsgE("이미 존재하는 항목 입니다."); } } private void toolStripButton2_Click(object sender, EventArgs e) { //선택된 항목을 삭제한다. if (this.listView1.FocusedItem == null) return; this.listView1.Items.Remove(this.listView1.FocusedItem); //현재목록을 리스트로 만들고 업데이트한.ㄷ var drv = this.bsPos.Current as DataRowView; var dr = drv.Row as DataSet1.MCModelRow; List items = new List(); foreach (ListViewItem item in listView1.Items) items.Add(item.SubItems[0].Text); dr.Category = string.Join(",", items); dr.EndEdit(); } private void toolStripButton3_Click(object sender, EventArgs e) { refreshlist(); } private void toolStripButton4_Click(object sender, EventArgs e) { //현재선택된 아이템의 데이터를 표시한다. var tn = this.treeView1.SelectedNode; if (tn == null) return; if (tn.Level == 0) { bsPos.Filter = $"Category like '%{tn.Text}|%'"; } else { bsPos.Filter = $"Category like '%{tn.Parent.Text}|{tn.Text}%'"; } } private void toolStripButton6_Click(object sender, EventArgs e) { } private void toolStripButton7_Click(object sender, EventArgs e) { refreshtreen(); } private void toolStripButton8_Click(object sender, EventArgs e) { var tn = treeView1.SelectedNode; if (tn == null) return; var old = tn.Text.Trim(); var f = new AR.Dialog.fInput("입력",tn.Text); if (f.ShowDialog() != DialogResult.OK) return; if (f.ValueString.isEmpty()) return; var targetidx = tn.Level; foreach (DataSet1.MCModelRow dr in this.ds.MCModel.Rows) { if (dr.RowState == DataRowState.Deleted || dr.RowState == DataRowState.Detached) continue; if (dr.Category.isEmpty()) continue; var cats = dr.Category.Split(','); List items = new List(); foreach (var cat in cats) { if (cat.isEmpty()) continue; var buffer = cat.Split('|'); if (targetidx == 0) { buffer[targetidx] = buffer[targetidx].Replace(old, f.ValueString); } else { //1번의 경우 변경을 하려면 0번이 일치해야한다. if (buffer[0] == tn.Parent.Text) { buffer[targetidx] = buffer[targetidx].Replace(old, f.ValueString); } } items.Add(string.Join("|", buffer)); } dr.Category = string.Join(",", items.ToArray()); dr.EndEdit(); } refreshtreen(); } private void toolStripButton9_Click(object sender, EventArgs e) { dvPosition.AutoResizeColumns(); } } }