|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- using CnasSynchronusClient;
- using CnasSynchrousModel;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Windows.Forms;
- using System.Xml.Serialization;
-
- namespace CNAS_BalanceClient
- {
- public partial class frmBalanceField : Form
- {
- SyncInstrumentItemInfo currentSyncItem = new SyncInstrumentItemInfo();
- //List<SyncParamasInfo> lstpramas = new List<SyncParamasInfo>();
- public List<SyncBalanceItem> syncBalanceItems = new List<SyncBalanceItem>();
- SyncBalanceItem currentBalanceItem = new SyncBalanceItem();
- DataBaseInfo targetDataBase = new DataBaseInfo();
- public frmBalanceField(List<SyncBalanceItem> syncBalanceItems, DataBaseInfo targetDataBase)
- {
- InitializeComponent();
-
- this.syncBalanceItems = syncBalanceItems;
- this.targetDataBase = targetDataBase;
-
-
- dgvMapping.AutoGenerateColumns = false;
- dgvMapping.RowHeadersVisible = false;
-
- dgvbalancefield.AutoGenerateColumns = false;
- dgvbalancefield.RowHeadersVisible = false;
-
- dgvCnas.AutoGenerateColumns = false;
- dgvCnas.RowHeadersVisible = false;
- }
-
- private void lstBalance_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (lstBalance.SelectedItem == null) return;
- string strCurrentSelect = lstBalance.SelectedItem.ToString();
- dgvMapping.DataSource = new BindingList<SyncParamasInfo>();
-
- //根据选中项加载数据
- dgvbalancefield.DataSource = new BindingList<BalanceField>(BindBalanceField(strCurrentSelect));
-
-
-
- //绑定映射数据
- var syncItems = syncBalanceItems.Where(s => s.Type == strCurrentSelect).ToList<SyncBalanceItem>();
- if (syncItems != null && syncItems.Count >= 1)
- {
- currentBalanceItem = syncItems[0];
-
- if (!string.IsNullOrWhiteSpace(currentBalanceItem.CnasInstrumentColumn))
- txtInstrumentColumn.Text = currentBalanceItem.CnasInstrumentColumn;
- else
- txtInstrumentColumn.Text = "";
-
- if (syncItems[0].syncParamasInfos!=null)
- dgvMapping.DataSource = new BindingList<SyncParamasInfo>(syncItems[0].syncParamasInfos);
- else
- dgvMapping.DataSource = new BindingList<SyncParamasInfo>();
- }
- else
- {
- currentBalanceItem = new SyncBalanceItem()
- {
- GUID=Guid.NewGuid().ToString(),
- Type = strCurrentSelect
- };
- syncBalanceItems.Add(currentBalanceItem);
- }
- }
-
- private List<BalanceField> BindBalanceField(string strItem)
- {
- List<BalanceField> balanceFields = new List<BalanceField>();
- switch (strItem)
- {
- case "全水分":
- balanceFields=InitinalBalanceField("1");
- break;
- case "水分":
- balanceFields=InitinalBalanceField("2");
- break;
- case "灰分":
- balanceFields=InitinalBalanceField("3");
- break;
- case "挥发分":
- balanceFields=InitinalBalanceField("4");
- break;
- }
- return balanceFields;
- }
-
-
- private List<BalanceField> InitinalBalanceField(string strValue)
- {
- List<BalanceField> balanceFields = new List<BalanceField>();
- //得到类的所有属性
- var lstProperties = new LaboratoryTest().GetType().GetProperties();
- foreach (var oProperty in lstProperties)
- {
- balanceFields.Add(new BalanceField() { FieldName = oProperty.Name, FieldType = oProperty.PropertyType });
-
- ////得到每一个属性的特性类集合
- //IList<CustomAttributeData> lstAttr = oProperty.GetCustomAttributesData();
- //foreach (var oAttr in lstAttr)
- //{
- // var lstAttrArgu = oAttr.NamedArguments;
- // foreach (CustomAttributeNamedArgument oAttrAru in lstAttrArgu)
- // {
- // //if (oAttrAru.MemberInfo.Name == "ApplyType"&& oAttrAru.TypedValue.Value.ToString().Contains(strValue))
- // {
- // balanceFields.Add(new BalanceField() { FieldName = oProperty.Name, FieldType = oProperty.GetType() });
- // }
- // }
- //}
- }
- return balanceFields;
- }
-
- private void frmBalanceField_Load(object sender, EventArgs e)
- {
- ////1.加载数据
- DataTable dtCNAS = CnasDataOperationFact.CnasDataOperation().GetAllCNASTablesName(targetDataBase);
- if (dtCNAS != null && dtCNAS.Rows.Count > 0)
- {
- List<string> lstCnasTables = new List<string>();
- foreach (DataRow dr in dtCNAS.Rows)
- {
- lstCnasTables.Add(dr["TABNAME"].ToString());
- }
-
- cbxCnas.DataSource = lstCnasTables;
- cbxCnas.ValueMember = "";
- }
-
- ////2.初始化天平端数据
- lstBalance.SelectedIndex = 0;
- }
-
- public class BalanceField
- {
- public string FieldName { get; set; }
-
- public Type FieldType { get; set; }
- }
-
- private void cbxCnas_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (cbxCnas.Text == null) return;
-
- string strTableName_Cnas = cbxCnas.Text.ToString();
- //从数据库中加载数据表结构
- //DataTable dtTableStruct = SQLDB2Helper.getDB2Table(string.Format("SELECT * FROM {0} Where 1=0", strTableName_Cnas));
-
- DataTable dtTableStruct = CnasDataOperationFact.CnasDataOperation().GetCNASTablesStruct(strTableName_Cnas, targetDataBase);
- if (dtTableStruct != null)
- {
- DataTable dtCnasShow = new DataTable();
- dtCnasShow.Columns.Add("CnasFieldName");
- dtCnasShow.Columns.Add("CnasDataType");
- foreach (DataColumn dc in dtTableStruct.Columns)
- {
- dtCnasShow.Rows.Add(new object[] { dc.ColumnName, dc.DataType });
- }
-
- dgvCnas.DataSource = dtCnasShow;
-
- //绑定数据
- cbxCNASColumn.DataSource = dtCnasShow.Copy();
- cbxCNASColumn.DisplayMember = "CnasFieldName";
- cbxCNASColumn.ValueMember = "CnasFieldName";
-
- if (dtTableStruct.Columns.Count > 0)
- {
- if (!string.IsNullOrWhiteSpace(currentSyncItem.CnasInstrumentColumn) && dtTableStruct.Columns.Contains(currentSyncItem.CnasInstrumentColumn))
- {
- cbxCNASColumn.Text = this.txtInstrumentColumn.Text = currentSyncItem.CnasInstrumentColumn;
- }
- else
- {
- cbxCNASColumn.Text = this.txtInstrumentColumn.Text = "";
- }
- }
- }
- }
-
- private void btnAddMapping_Click(object sender, EventArgs e)
- {
- if (currentBalanceItem.syncParamasInfos == null)
- currentBalanceItem.syncParamasInfos = new List<SyncParamasInfo>();
- SyncParamasInfo syncParamas = new SyncParamasInfo();
- //仪器表名和选中行
- syncParamas.SourceTable = lstBalance.SelectedItem.ToString();
- syncParamas.SourceField = dgvbalancefield.Rows[dgvbalancefield.CurrentCell.RowIndex].Cells[0].Value.ToString();
-
- //CNAS表名和选中行
- syncParamas.TargetTable = cbxCnas.SelectedValue.ToString().ToUpper();
- syncParamas.TargetField = dgvCnas.Rows[dgvCnas.CurrentCell.RowIndex].Cells[0].Value.ToString().ToUpper();
-
- //验证数据合法性
- SyncParamsOperation paramsOperation = new SyncParamsOperation();
- if (paramsOperation.CheckTableIfRepeat(currentBalanceItem.syncParamasInfos, syncParamas.SourceTable, syncParamas.TargetTable))
- {
- MessageBox.Show("已存在不同表单映射数据,无法添加!", "提示");
- return;
- }
- //if (paramsOperation.CheckSourceFieldRepeat(currentBalanceItem.syncParamasInfos, syncParamas.SourceTable, syncParamas.SourceField))
- //{
- // MessageBox.Show("天平端数据字段已分配,请重新选择!");
- // return;
- //}
- if (paramsOperation.CheckTargetFieldRepeat(currentBalanceItem.syncParamasInfos, syncParamas.TargetTable, syncParamas.TargetField))
- {
- MessageBox.Show("CNAS端数据字段已分配,请重新选择!", "提示");
- return;
- }
- if (paramsOperation.CheckTargetKeepField(syncParamas.TargetField))
- {
- MessageBox.Show("CNAS端数据字段为保留字段,请重新选择!", "提示");
- return;
- }
-
- //绑定数据
- currentBalanceItem.syncParamasInfos.Add(syncParamas);
- dgvMapping.DataSource = new BindingList<SyncParamasInfo>(currentBalanceItem.syncParamasInfos);
- //选中最后一行
- dgvMapping.CurrentCell = dgvMapping.Rows[dgvMapping.Rows.Count - 1].Cells[0];
- }
-
- private void btnDeleteMapping_Click(object sender, EventArgs e)
- {
- //当前选中项
- if (dgvMapping.CurrentCell == null) return;
- string strSourceField = dgvMapping.Rows[dgvMapping.CurrentCell.RowIndex].Cells["InstrumentField"].Value.ToString();
- string strTargetField = dgvMapping.Rows[dgvMapping.CurrentCell.RowIndex].Cells["CnasField"].Value.ToString();
-
- var lstDelItems = currentBalanceItem.syncParamasInfos.Where(s => s.SourceField == strSourceField && s.TargetField == strTargetField).ToList<SyncParamasInfo>();
- if (lstDelItems.Count > 0)
- {
- foreach (var item in lstDelItems)
- {
- currentBalanceItem.syncParamasInfos.Remove(item);
- }
-
- dgvMapping.DataSource = new BindingList<SyncParamasInfo>(currentBalanceItem.syncParamasInfos);
- }
- }
-
- private void btnOK_Click(object sender, EventArgs e)
- {
- if (!CheckIfHaveDateField())
- {
- if (MessageBox.Show("日期字段的缺失可能会导致后续不能准确数据传输。是否继续保存?", "",MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Cancel)
- return;
- }
- //将数据存储到本地
- if (FileOperation.SaveLocalBalanceData(syncBalanceItems))
- {
- this.DialogResult = DialogResult.OK;
- this.Close();
- }
- else
- {
- MessageBox.Show("保存配置失败!", "提示");
- }
- }
-
- private void dgvMapping_CellValueChanged(object sender, DataGridViewCellEventArgs e)
- {
- if (dgvMapping.CurrentCell == null) return;
- if (dgvMapping.CurrentCell.ColumnIndex == 2) //此时修改的主健列
- {
- string strSourceField = dgvMapping.Rows[dgvMapping.CurrentCell.RowIndex].Cells["InstrumentField"].Value.ToString();
- string strTargetField = dgvMapping.Rows[dgvMapping.CurrentCell.RowIndex].Cells["CnasField"].Value.ToString();
- string strPrimaryKey = dgvMapping.Rows[dgvMapping.CurrentCell.RowIndex].Cells["PrimaryKey"].Value.ToString();
-
- var lstDelItems = currentBalanceItem.syncParamasInfos.Where(s => s.SourceField == strSourceField && s.TargetField == strTargetField).ToList<SyncParamasInfo>();
- if (lstDelItems.Count > 0)
- {
- foreach (var item in lstDelItems)
- {
- item.IfPrimaryKey = strPrimaryKey.ToLower() == "true" ? true : false;
- }
- }
- }
- if (dgvMapping.CurrentCell.ColumnIndex == 3) //此时修改的是日期字段列
- {
- string strSourceField = dgvMapping.Rows[dgvMapping.CurrentCell.RowIndex].Cells["InstrumentField"].Value.ToString();
- string strTargetField = dgvMapping.Rows[dgvMapping.CurrentCell.RowIndex].Cells["CnasField"].Value.ToString();
- string strDateKey = dgvMapping.Rows[dgvMapping.CurrentCell.RowIndex].Cells["DateKey"].Value.ToString();
-
- var lstDelItems = currentBalanceItem.syncParamasInfos.Where(s => s.SourceField == strSourceField && s.TargetField == strTargetField).ToList<SyncParamasInfo>();
- if (lstDelItems.Count ==1)
- {
- if (strDateKey.ToLower() == "true")
- {
- //datagridview显示列
- foreach (DataGridViewRow dgvRow in dgvMapping.Rows)
- {
- if (dgvRow.Cells["DateKey"].Value.ToString().ToLower() == "true")
- dgvRow.Cells["DateKey"].Value = false;
- }
- //内存数据源
- foreach (var item in currentBalanceItem.syncParamasInfos)
- {
- if (item.IfDateField)
- item.IfDateField = false;
- }
- lstDelItems[0].IfDateField = true;
- }
- else
- {
- lstDelItems[0].IfDateField = false;
- }
- }
- }
- }
-
- private void lstBalance_DrawItem(object sender, DrawItemEventArgs e)
- {
- Brush myBrush = Brushes.Black;
- if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
- {
- myBrush = new SolidBrush(Color.FromArgb(0, 0, 255));//选中时背景颜色
- }
- else//没有选中时的背景颜色
- {
- myBrush = new SolidBrush(Color.White);
- }
- e.Graphics.FillRectangle(myBrush, e.Bounds);//填满矩形背景颜色
- e.Graphics.DrawRectangle(new Pen(new SolidBrush(e.ForeColor)), e.Bounds);
- e.DrawFocusRectangle();//焦点框
- StringFormat stringformat = StringFormat.GenericDefault;
- stringformat.LineAlignment = StringAlignment.Center;
- e.Graphics.DrawString(lstBalance.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds, stringformat);
- }
-
- private void dgvMapping_CurrentCellDirtyStateChanged(object sender, EventArgs e)
- {
- if (dgvMapping.IsCurrentCellDirty)
- {
- dgvMapping.CommitEdit(DataGridViewDataErrorContexts.Commit);
- }
- }
-
- private bool CheckIfHaveDateField()
- {
- bool bIfHave = true;
- foreach (var item in syncBalanceItems)
- {
- if (item.syncParamasInfos == null) continue;
- if (item.syncParamasInfos.Count <=0) continue;
- if (item.syncParamasInfos.Where(s => s.IfDateField == true).Count() != 1)
- {
- bIfHave = false;
- break;
- }
- }
- return bIfHave;
- }
-
- private void txtInstrumentColumn_DoubleClick(object sender, EventArgs e)
- {
- txtInstrumentColumn.Visible = false;
-
- cbxCNASColumn.Top = txtInstrumentColumn.Top;
- cbxCNASColumn.Height = txtInstrumentColumn.Height;
- cbxCNASColumn.Width = txtInstrumentColumn.Width;
- cbxCNASColumn.Location = txtInstrumentColumn.Location;
-
- cbxCNASColumn.Visible = true;
- }
-
- private void cbxCNASColumn_Leave(object sender, EventArgs e)
- {
- if (cbxCNASColumn.Visible)
- {
- txtInstrumentColumn.Visible = true;
- cbxCNASColumn.Visible = false;
- }
- }
-
- private void cbxCNASColumn_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (cbxCNASColumn.Visible)
- {
- cbxCNASColumn.Visible = false;
- txtInstrumentColumn.Visible = true;
-
- currentBalanceItem.CnasInstrumentColumn = txtInstrumentColumn.Text = cbxCNASColumn.Text;
- }
- }
-
- private void btnConditionMap_Click(object sender, EventArgs e)
- {
- frmConditionMap frmCNAS = new frmConditionMap(currentBalanceItem, targetDataBase);
- if (frmCNAS.ShowDialog() == DialogResult.OK)
- {
- this.currentBalanceItem = frmCNAS.currentBalanceItem;
- }
- }
- }
- }
|