コード例 #1
0
        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);
        }
コード例 #2
0
 public ArithmeticExpressionASTNode(BaseASTNode pLeftExpression, BaseASTNode pRightExpression,
                                    EnumOperatorType operatorType, BaseASTNode pNodeData)
 {
     this.pLeftExpreesion  = pLeftExpression;
     this.pRightExpression = pRightExpression;
     this.operatorType     = operatorType;
     this.PNodeData        = pNodeData;
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
ファイル: UpdateValue.cs プロジェクト: egman77/DBViewer
 public UpdateValueCollection(string tableName, string pkValue, EnumOperatorType status)
 {
     this.TableName = tableName;
     this.PKValue   = pkValue;
     this.Status    = status;
 }
コード例 #6
0
ファイル: UpdateValue.cs プロジェクト: egman77/DBViewer
        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);
            }
        }
コード例 #7
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="pPriority">演算優先順位</param>
 /// <param name="pType">演算子タイプ</param>
 public CalculatorOperatorBase(int pPriority, EnumOperatorType pType) : base(pPriority)
 {
     this.operatorType = pType;
 }