public void SetData(DataRow[] rows, int maxCols) { UpdateValueManager data = new UpdateValueManager(); for (int i = 0; i < rows.Length; i += 2) { DataRow titleRow = rows[i]; DataRow dataRow = rows[i + 1]; EnumOperatorType status = (EnumOperatorType)Enum.Parse(typeof(EnumOperatorType), Util.ToString(titleRow["status"])); string tableName = Util.ToString(titleRow["tablename"]); string key = Util.ToString(titleRow["PKValue"]); data.AddData(key, tableName, status, titleRow, dataRow, maxCols); } DataTable table = new DataTable(); table.Columns.Add("SeqNo", typeof(string)); table.Columns.Add("TableName", typeof(string)); table.Columns.Add("status", typeof(string)); table.Columns.Add("PKValue", typeof(string)); m_FixColumnCount = table.Columns.Count; data.FillToDataTable(table); this.dataGridView1.SetData(m_FixColumnCount, table); }
public ArithmeticExpressionASTNode(BaseASTNode pLeftExpression, BaseASTNode pRightExpression, EnumOperatorType operatorType, BaseASTNode pNodeData) { this.pLeftExpreesion = pLeftExpression; this.pRightExpression = pRightExpression; this.operatorType = operatorType; this.PNodeData = pNodeData; }
private DataTable CalcData(DataTable orginalData) { DataTable table = new DataTable(); table.Columns.Add("SeqNo", typeof(string)); table.Columns.Add("RecDate", typeof(string)); table.Columns.Add("TableName", typeof(string)); table.Columns.Add("status", typeof(string)); table.Columns.Add("PKValue", typeof(string)); m_FixColumnCount = table.Columns.Count; int updateRowCount = 0; for (int i = 0; i < orginalData.Rows.Count; i++) { DataRow row = orginalData.Rows[i]; EnumOperatorType status = (EnumOperatorType)Util.ToInt(row["status"]); EnumTableType tableType = (EnumTableType)Util.ToInt(row["tabletype"]); //处理更新 if (status == EnumOperatorType.Update && tableType == EnumTableType.Deleted) { updateRowCount = 0; //更新的数据,delete已经处理过了,继续循环 continue; } //处理新增或删除 if (status == EnumOperatorType.New || status == EnumOperatorType.Delete) { CreateNewOrDeleteRowData(table, m_FixColumnCount, row, status); } else { if (updateRowCount == 0) { updateRowCount = GetUpdateRowCount(orginalData, updateRowCount, i); } DataRow oldRow = orginalData.Rows[i + updateRowCount]; CreateUpdateRowData(table, m_FixColumnCount, row, oldRow); } } return(table); }
/// <summary> /// 创建新行或删除行 /// </summary> /// <param name="table"></param> /// <param name="fixColumnsCount"></param> /// <param name="row"></param> /// <param name="status"></param> private void CreateNewOrDeleteRowData(DataTable table, int fixColumnsCount, DataRow row, EnumOperatorType status) { string data = Util.ToString(row["Data"]); Dictionary <string, string> dicData = GetData(data); EnsureTableColumn(table, fixColumnsCount, dicData.Keys.Count); DataRow titleRow = table.NewRow(); DataRow valueRow = table.NewRow(); titleRow["RecDate"] = GetDisplayDate(Util.ToDateTime(row["RecDate"])); titleRow["status"] = status.ToString(); titleRow["TableName"] = row["TableName"]; titleRow["PKValue"] = row["PK"]; titleRow["SeqNo"] = table.Rows.Count / 2 + 1; int k = 0; foreach (KeyValuePair <string, string> keyValue in dicData) { titleRow["F" + k.ToString()] = keyValue.Key; valueRow["F" + k.ToString()] = keyValue.Value; k++; } table.Rows.Add(titleRow); table.Rows.Add(valueRow); }
public UpdateValueCollection(string tableName, string pkValue, EnumOperatorType status) { this.TableName = tableName; this.PKValue = pkValue; this.Status = status; }
public void AddData(string pkValue, string tableName, EnumOperatorType status, DataRow titleRow, DataRow dataRow, int maxCols) { string newKey = tableName + "|" + pkValue; if (this.ContainsKey(newKey)) { UpdateValueCollection c = this[newKey]; if (status == EnumOperatorType.Delete) { if (c.Status == EnumOperatorType.New) { //新规的数据,删除掉,则不需要计算差分 this.Remove(newKey); } else if (c.Status == EnumOperatorType.Delete) { //删除的数据,再次删除,无视 //DoNothing } else /*if (c.Status == EnumOperatorType.Update)*/ { //修改的数据,删除掉,表示数据删除了 c.Status = EnumOperatorType.Delete; } } else if (status == EnumOperatorType.New) { if (c.Status == EnumOperatorType.Delete) { //删除的数据,再次新规,认为是更新 c.Status = EnumOperatorType.Update; c.SetInsertedData(titleRow, dataRow, maxCols); } else { //异常数据 throw new Exception("新规数据已经存在."); } } else /*if (status == EnumOperatorType.Update)*/ { if (c.Status == EnumOperatorType.New) { //新规的数据,再次修改,仍然认为是新规 //只保存新的数据 c.SetUpdateData(titleRow, dataRow, maxCols, true); } else if (c.Status == EnumOperatorType.Update) { //修正的数据,再次修改,仍然是修改 //只保存新的数据 c.SetUpdateData(titleRow, dataRow, maxCols, false); } else { //删除的数据,再次修改,异常数据 throw new Exception("数据已经被删除,不能修改."); } } } else { UpdateValueCollection c; switch (status) { case EnumOperatorType.New: c = UpdateValueCollection.CreateInsertedData(pkValue, tableName, titleRow, dataRow, maxCols); break; case EnumOperatorType.Delete: c = UpdateValueCollection.CreateDeletedData(pkValue, tableName, titleRow, dataRow, maxCols); break; case EnumOperatorType.Update: c = UpdateValueCollection.CreateUpdateData(pkValue, tableName, titleRow, dataRow, maxCols); break; default: throw new Exception("错误的操作状态." + status.ToString()); } this.Add(newKey, c); } }
/// <summary> /// コンストラクタ /// </summary> /// <param name="pPriority">演算優先順位</param> /// <param name="pType">演算子タイプ</param> public CalculatorOperatorBase(int pPriority, EnumOperatorType pType) : base(pPriority) { this.operatorType = pType; }