// 添加新列
        public void AddNewRow(CEntityWaterFlowMap entity)
        {
            // 记录超过1000条,或者时间超过1分钟,就将当前的数据写入数据库
            m_mutexDataTable.WaitOne(); //等待互斥量
            DataRow row = m_tableDataAdded.NewRow();

            //row[CN_StationID] = entity.StationID;
            //row[CN_WaterStage] = entity.WaterStage;
            //row[CN_WaterFlow] = entity.WaterFlow;
            row[CN_StationID] = entity.StationID;
            row[CN_BGTM]      = entity.BGTM.ToString(CDBParams.GetInstance().DBDateTimeFormat);
            row[CN_PTNO]      = entity.PTNO;
            row[CN_ZR]        = entity.ZR;
            row[CN_Q1]        = entity.Q1;
            row[CN_Q2]        = entity.Q2;
            row[CN_Q3]        = entity.Q3;
            row[CN_Q4]        = entity.Q4;
            row[CN_Q5]        = entity.Q5;
            row[CN_Q6]        = entity.Q6;
            row[CN_currQ]     = entity.currQ;
            m_tableDataAdded.Rows.Add(row);
            if (m_tableDataAdded.Rows.Count >= CDBParams.GetInstance().AddBufferMax)
            {
                // 如果超过最大值,写入数据库
                Task task = new Task(() => { AddDataToDB(); });
                task.Start();
            }
            else
            {
                // 没有超过缓存最大值,开启定时器进行检测,多次调用Start()会导致重新计数
                m_addTimer.Start();
            }
            m_mutexDataTable.ReleaseMutex();
        }
        public bool DeleteLine(CEntityWaterFlowMap Entity)
        {
            // 删除多行数据
            StringBuilder sql = new StringBuilder();
            int           currentBatchCount = 0;

            //for (int i = 0; i < Entity.Count; i++)
            //{
            ++currentBatchCount;
            //   sql.AppendFormat("delete from {0} where {1}={2} and {3}='{4}';",
            sql.AppendFormat("delete from {0} where {1}={2};",
                             CT_TableName,
                             CN_StationID, Entity.StationID
                             //CN_BGTM, Entity.BGTM
                             );
            if (currentBatchCount >= CDBParams.GetInstance().UpdateBufferMax)
            {
                // 更新数据库
                if (!this.ExecuteSQLCommand(sql.ToString()))
                {
                    return(false);
                }
                sql.Clear(); //清除以前的所有命令
                currentBatchCount = 0;
            }
            //} // end of for
            // 如何考虑线程同异步
            return(ExecuteSQLCommand(sql.ToString()));
        }
 /// <summary>
 /// 获取更新的和新增的数据记录
 /// </summary>
 /// <param name="listUpdated"></param>
 /// <param name="listAdded"></param>
 /// <returns></returns>
 private bool GetUpdatedData(out List <CEntityWaterFlowMap> listUpdated,
                             out List <CEntityWaterFlowMap> listAdded)
 {
     // 标记为删除的就不需要添加的修改或者添加的记录中了
     listUpdated = new List <CEntityWaterFlowMap>();
     listAdded   = new List <CEntityWaterFlowMap>();
     try
     {
         this.Invoke((Action) delegate { Enabled = false; });
         List <int> listEditRows = new List <int>();
         foreach (int item in base.m_listEditedRows)
         {
             if (!m_listMaskedDeletedRows.Contains(item))
             {
                 listEditRows.Add(item);
             }
         }
         // 将去重后的项赋给编辑项
         base.m_listEditedRows = listEditRows;
         for (int i = 0; i < base.m_listEditedRows.Count; ++i)
         {
             CEntityWaterFlowMap wfmap = new CEntityWaterFlowMap();
             wfmap.StationID = base.Rows[m_listEditedRows[i]].Cells[CS_StationId].Value.ToString();
             wfmap.BGTM      = DateTime.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_BGTM].Value.ToString());
             wfmap.PTNO      = int.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_PTNO].Value.ToString());
             wfmap.ZR        = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_ZR].Value.ToString());
             wfmap.Q1        = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q1].Value.ToString());
             wfmap.Q2        = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q2].Value.ToString());
             wfmap.Q3        = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q3].Value.ToString());
             wfmap.Q4        = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q4].Value.ToString());
             wfmap.Q5        = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q5].Value.ToString());
             wfmap.Q6        = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_Q6].Value.ToString());
             wfmap.currQ     = Decimal.Parse(base.Rows[m_listEditedRows[i]].Cells[CS_currQ].Value.ToString());
             // wfmap.StationID = m_strStationId; //使用默认的站点ID
             //if (wfmap.RecordId == -1)
             //{
             // 添加的新记录
             // listAdded.Add(wfmap);
             //}
             //else
             //{
             //    // 更新以前的记录
             listUpdated.Add(wfmap);
             //}
         }
         m_listEditedRows.Clear();   //清空此次记录,标记为所有的都为未修改
         return(true);
     }
     catch (System.Exception ex)
     {
         // 获取失败
         Debug.WriteLine(ex.ToString());
         return(false);
     }
     finally
     {
         this.Invoke((Action) delegate { Enabled = true; });
     }
 }
        public void DoDelete()
        {
            if (this.IsCurrentCellInEditMode)
            {
                //MessageBox.Show("请完成当前的编辑");
                this.EndEdit();
                //return false;
            }
            if (base.m_listMaskedDeletedRows.Count <= 0)
            {
                MessageBox.Show("没有标记为删除的列,无需删除");
                return;
            }
            try
            {
                // 获取数据
                for (int i = 0; i < base.m_listMaskedDeletedRows.Count; ++i)
                {
                    //// -1表示新添加的用户
                    //long recordId = long.Parse(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_StationId].Value.ToString());
                    string              stationid = base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_StationId].Value.ToString();
                    DateTime            bgtm      = DateTime.Parse(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_BGTM].Value.ToString());
                    int                 ptno      = int.Parse(base.Rows[m_listMaskedDeletedRows[i]].Cells[CS_PTNO].Value.ToString());
                    CEntityWaterFlowMap tmp       = new CEntityWaterFlowMap();
                    tmp.StationID = stationid;
                    tmp.BGTM      = bgtm;
                    tmp.PTNO      = ptno;
                    // 并且从编辑项中减去这一行
                    m_listEditedRows.Remove(m_listMaskedDeletedRows[i]);
                    m_listDeleteByUser.Add(tmp);
                    //if (recordId != -1)
                    //{
                    //    m_listDoDeletedRows.Add(recordId);
                    //}
                }
                // 将某些行标记为不可见
                for (int i = 0; i < base.m_listMaskedDeletedRows.Count; ++i)
                {
                    //base.Rows[i].Visible = false;
                    base.DeleteRowData(m_listMaskedDeletedRows[i]);
                }

                m_proxyWaterFlowMap.DeleteRange(m_listDeleteByUser);
                //   MessageBox.Show("删除成功!");
            }
#pragma warning disable CS0168 // 声明了变量“e”,但从未使用过
            catch (Exception e)
#pragma warning restore CS0168 // 声明了变量“e”,但从未使用过
            {
                MessageBox.Show("删除失败!");
            }
            m_listMaskedDeletedRows.Clear(); //清空
            base.UpdateDataToUI();
            MessageBox.Show("删除成功!");
        }
        public List <CEntityWaterFlowMap> QueryMapsByStationId(string stationId)
        {
            // 根据站点ID,查询当前站点的水位流量关系
            List <CEntityWaterFlowMap> results = new List <CEntityWaterFlowMap>();
            string sql = string.Format("select * from {0} where {1} = '{2}' order by BGTM , PTNO", CT_TableName, CN_StationID, stationId);

            try
            {
                SqlDataAdapter adapter      = new SqlDataAdapter(sql, CDBManager.GetInstacne().GetConnection());
                DataTable      dataTableTmp = new DataTable();
                adapter.Fill(dataTableTmp);
                for (int i = 0; i < dataTableTmp.Rows.Count; ++i)
                {
                    CEntityWaterFlowMap entity = new CEntityWaterFlowMap();
                    //entity.StationID = dataTableTmp.Rows[i][CN_StationID].ToString().Trim();
                    //entity.WaterFlow = decimal.Parse(dataTableTmp.Rows[i][CN_WaterFlow].ToString());
                    //entity.WaterStage = decimal.Parse(dataTableTmp.Rows[i][CN_WaterStage].ToString());
                    //entity.RecordId = long.Parse(dataTableTmp.Rows[i][CN_RecordID].ToString());
                    entity.StationID = dataTableTmp.Rows[i][CN_StationID].ToString().Trim();
                    entity.BGTM      = Convert.ToDateTime(dataTableTmp.Rows[i][CN_BGTM].ToString());
                    entity.PTNO      = int.Parse(dataTableTmp.Rows[i][CN_PTNO].ToString());
                    entity.ZR        = Decimal.Parse(dataTableTmp.Rows[i][CN_ZR].ToString());

                    entity.Q1 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q1].ToString());
                    entity.Q2 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q2].ToString());
                    entity.Q3 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q3].ToString());
                    entity.Q4 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q4].ToString());
                    entity.Q5 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q5].ToString());
                    entity.Q6 = Decimal.Parse(dataTableTmp.Rows[i][CN_Q6].ToString());

                    entity.currQ = Decimal.Parse(dataTableTmp.Rows[i][CN_currQ].ToString());
                    // entity.RecordId = long.Parse(dataTableTmp.Rows[i][CN_RecordID].ToString());
                    results.Add(entity);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
            return(results);
        }
Esempio n. 6
0
        /// <summary>
        /// 处理单行数据
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        private bool DealWithLineData(string str, int lineNumber, ref string strErroInfo, ref string stationidstr)
        {
            //if (str.StartsWith("(") && str.EndsWith(")"))
            //{
            // 按照逗号分隔每个数值,第一个是站号,第二个是水位,第三个是流量
            //str = str.Substring(1, str.Length - 2);
            string[] results = str.Split(',');
            if (11 == results.Length)
            {
                try
                {
                    // 刚好11个的话,正好
                    string stationId = results[0].Trim();
                    //BGTM
                    DateTime timeTmp = DateTime.Parse(results[1].Trim());

                    if (lineNumber == 1)
                    {
                        lastTime = timeTmp;

                        CEntityWaterFlowMap entity1 = new CEntityWaterFlowMap();
                        entity1.StationID = stationId;
                        entity1.BGTM      = timeTmp;
                        m_proxyWaterFlowMap.DeleteLine(entity1);
                        stationidstr = stationId;
                    }
                    else
                    {
                        if (lastTime != timeTmp)
                        {
                            strErroInfo = string.Format("行:{0} 时间数据错误", lineNumber);
                            return(false);
                        }
                        if (stationidstr != stationId)
                        {
                            strErroInfo = string.Format("行:{0} 站号不一致", lineNumber);
                            return(false);
                        }
                    }

                    //PTNO
                    int ptno = int.Parse(results[2].Trim());
                    if (ptno != lineNumber)
                    {
                        strErroInfo = string.Format("行:{0} 点序列数据错误", lineNumber);
                        return(false);
                    }
                    decimal q1 = -1, q2 = -1, q3 = -1, q4 = -1, q5 = -1, q6 = -1;
                    int     count = 0;
                    // ZR
                    decimal zr = decimal.Parse(results[3].Trim());

                    //Q1
                    if (results[4].Trim() != "")
                    {
                        q1 = decimal.Parse(results[4].Trim());
                        count++;
                    }
                    if (results[5].Trim() != "")
                    {
                        q2 = decimal.Parse(results[5].Trim());
                        count++;
                    }
                    //Q3
                    if (results[6].Trim() != "")
                    {
                        q3 = decimal.Parse(results[6].Trim());
                        count++;
                    }
                    //Q4
                    if (results[7].Trim() != "")
                    {
                        q4 = decimal.Parse(results[7].Trim());
                        count++;
                    }
                    //Q5
                    if (results[8].Trim() != "")
                    {
                        q5 = decimal.Parse(results[8].Trim());
                        count++;
                    }
                    //Q6
                    if (results[9].Trim() != "")
                    {
                        q6 = decimal.Parse(results[9].Trim());
                        count++;
                    }
                    //CURRQ
                    int currQ = int.Parse(results[10].Trim());
                    if (currQ > count)
                    {
                        strErroInfo = string.Format("行:{0} 流量数据错误", lineNumber);
                        return(false);
                    }
                    if (lineNumber == 1)
                    {
                        lastCurrQ = currQ;
                    }
                    else
                    {
                        if (lastCurrQ != currQ)
                        {
                            strErroInfo = string.Format("行:{0} 流量数据错误", lineNumber);
                            return(false);
                        }
                    }
                    //Decimal waterStage = Decimal.Parse(results[1]);
                    //Decimal waterFlow = Decimal.Parse(results[2]);
                    if (null == CDBDataMgr.Instance.GetStationById(stationId))
                    {
                        strErroInfo = string.Format("行:{0} 未知站点\"{2}\"", lineNumber, stationId);
                        return(false);
                    }
                    CEntityWaterFlowMap entity = new CEntityWaterFlowMap();
                    entity.StationID = stationId;
                    entity.BGTM      = timeTmp;
                    entity.PTNO      = ptno;
                    entity.ZR        = zr;
                    entity.Q1        = q1;
                    entity.Q2        = q2;
                    entity.Q3        = q3;
                    entity.Q4        = q4;
                    entity.Q5        = q5;
                    entity.Q6        = q6;

                    //entity.Q2 = q2;
                    //entity.Q3 = q3;
                    //entity.Q4 = q4;
                    //entity.Q5 = q5;
                    //entity.Q6 = q6;
                    entity.currQ = currQ;
                    m_listImport.Add(entity);
                    //entity.WaterStage = waterStage;
                    //entity.WaterFlow = waterFlow;
                    entity.RecordId = -1;
                    // 写入内存,如果之间不编辑,就直接保存,这个ModifiedData就有用了
                    if (m_mapModifiedData.ContainsKey(stationId))
                    {
                        m_mapModifiedData[stationId].listAdded.Add(entity);
                    }
                    else
                    {
                        // 新建一个
                        CDataGridViewWaterFlowMap.SModifiedData data = new CDataGridViewWaterFlowMap.SModifiedData();
                        data.listAdded   = new List <CEntityWaterFlowMap>();
                        data.listUpdated = new List <CEntityWaterFlowMap>();
                        data.listDeleted = new List <long>();
                        data.listAdded.Add(entity);
                        m_mapModifiedData.Add(stationId, data);
                    }
                    // 写入表格,伪装成点击按钮添加的结果
                    m_mapStationWaterFlow[stationId].Add(entity);
                    if (m_mapStationDGVStatus.ContainsKey(stationId))
                    {
                        // 添加到最后一个
                        m_mapStationDGVStatus[stationId].listEditedRows.Add(m_mapStationWaterFlow[stationId].Count - 1);
                    }
                    else
                    {
                        // 新建一个表格状态
                        CDataGridViewWaterFlowMap.SStatus status = new CDataGridViewWaterFlowMap.SStatus();
                        status.listDoDeletes      = new List <long>();
                        status.listEditedRows     = new List <int>();
                        status.listMarkDeleteRows = new List <int>();
                        status.listEditedRows.Add(m_mapStationWaterFlow[stationId].Count - 1);
                        m_mapStationDGVStatus.Add(stationId, status);
                    }
                    return(true);
                }
                catch (System.Exception ex)
                {
                    Debug.WriteLine(ex.ToString());
                    strErroInfo = string.Format("行:{0} 数据格式错误", lineNumber);
                    return(false);
                }
            }
            else
            {
                strErroInfo = string.Format("行:{0} 数据格式错误", lineNumber);
                return(false);
            }

            //}
            //else
            //{
            //    // 格式不对
            //    strErroInfo = (string.Format("行:{0} 开始结束符号\"(\"\")\"格式错误", lineNumber));
            //    return false;
            //}
        }