/// <summary>
        /// 生成端口的信道协议与数据协议配置
        /// </summary>
        private void GenaratePortXMLConfig()
        {
            // 标记为删除的就不需要添加到结果集中了
            m_listPortConfig = new List <CPortProtocolConfig>();
            // 获取修改了的所有数据
            for (int i = 0; i < m_dataTable.Rows.Count; ++i)
            {
                if (!m_listMaskedDeletedRows.Contains(i))
                {
                    // 不包含才需要判断
                    CPortProtocolConfig config = new CPortProtocolConfig();
                    config.PortNumber          = int.Parse(m_dataTable.Rows[i][CS_PortNumber].ToString());
                    config.ProtocolChannelName = m_dataTable.Rows[i][CS_ProtocolChannel].ToString();
                    if (config.ProtocolChannelName == CS_None)
                    {
                        config.ProtocolChannelName = ""; //为空
                    }

                    config.ProtocolDataName = m_dataTable.Rows[i][CS_ProtocolData].ToString();
                    if (config.ProtocolDataName == CS_None)
                    {
                        config.ProtocolDataName = ""; //为空
                    }
                    m_listPortConfig.Add(config);
                }// end of if
            }
        }
        /// <summary>
        /// 生成m_listPortConfig,并清空状态m_listEditedRows, m_listMaskedDeletedRows
        /// </summary>
        private void GeneratePortConfig()
        {
            // 标记为删除的就不需要添加到结果集中了
            m_listPortConfig = new List <CPortProtocolConfig>();
            // 获取修改了的所有数据
            for (int i = 0; i < m_dataTable.Rows.Count; ++i)
            {
                if (!m_listMaskedDeletedRows.Contains(i))
                {
                    // 不包含才需要判断
                    CPortProtocolConfig config = new CPortProtocolConfig();
                    config.PortNumber          = int.Parse(m_dataTable.Rows[i][CS_PortNumber].ToString());
                    config.ProtocolChannelName = m_dataTable.Rows[i][CS_ProtocolChannel].ToString();
                    if (CS_UDPorTCP_TCP == m_dataTable.Rows[i][CS_UDPorTCP].ToString())
                    {
                        // 配置默认通讯方式为TCP
                        config.BTcpOrUdp = true;
                    }
                    else
                    {
                        config.BTcpOrUdp = false;
                    }
                    config.ProtocolDataName = m_dataTable.Rows[i][CS_ProtocolData].ToString();
                    if (config.ProtocolDataName == CS_None)
                    {
                        config.ProtocolDataName = ""; //空数据协议
                    }

                    if (CS_StartType_Auto == m_dataTable.Rows[i][CS_StartType].ToString())
                    {
                        // 自动启动
                        config.BAutoStart = true;
                    }
                    else
                    {
                        config.BAutoStart = false;
                    }
                    if (CS_Status_Enabled == m_dataTable.Rows[i][CS_CurrentStatus].ToString())
                    {
                        // 启动状态
                        config.BStartOrNot = true;
                    }
                    else
                    {
                        config.BStartOrNot = false;
                    }
                    m_listPortConfig.Add(config);
                }// end of if
            }
            m_listEditedRows.Clear();
            m_listMaskedDeletedRows.Clear();
        }
        private void SetPorts(IList <CEntitySerialPort> ports)
        {
            base.m_dataTable.Rows.Clear();
            base.m_dataTableBak.Rows.Clear();
            int        iActualPortCount = 0;
            string     strMessageInfo   = "";
            bool       _bDoDelete       = false; //是否需要修改数据库,默认为false
            List <int> _listDoDelete    = new List <int>();

            foreach (var item in ports)
            {
                if (!m_listActualPortNumber.Contains(item.PortNumber))
                {
                    _bDoDelete = true;
                    _listDoDelete.Add(item.PortNumber); //删除列表
                    strMessageInfo += string.Format("数据库中配置的COM{0}不存在,自动删除\r\n", item.PortNumber);
                    continue;
                }

                // 获取数据协议与信道协议的配置
                CPortProtocolConfig config = GetPortConfig(item.PortNumber);
                if (config == null)
                {
                    config = new CPortProtocolConfig();
                    config.ProtocolChannelName = CS_None;
                    config.ProtocolDataName    = CS_None;
                }
                else
                {
                    if (config.ProtocolDataName == null || config.ProtocolDataName.Equals(""))
                    {
                        config.ProtocolDataName = CS_None;
                    }
                    if (config.ProtocolChannelName == null || config.ProtocolChannelName.Equals(""))
                    {
                        config.ProtocolChannelName = CS_None;
                    }
                }

                base.AddRow(new string[]
                {
                    "False",
                    item.PortNumber.ToString(),
                    CEnumHelper.SerialTransTypeToUIStr(item.TransType),
                    config.ProtocolChannelName,
                    config.ProtocolDataName,
                    item.Baudrate.ToString(),
                    item.DataBit.ToString(),
                    item.StopBit.ToString(),
                    CEnumHelper.PortParityTypeToUIStr(item.ParityType),
                    CEnumHelper.SerialPortStreamTypeToUIStr(item.Stream),
                    item.Break.Value ? CS_Break_Enabled : CS_Break_Disabled,
                    item.SwitchSatus.Value ? CS_SwitchStatus_Open : CS_SwitchStatus_Close,
                    "1",
                    item.PortNumber.ToString()
                }, EDataState.ENormal);
                iActualPortCount += 1;
            }
            UpdatePortsCount(iActualPortCount);
            if (!strMessageInfo.Equals(""))
            {
                MessageBox.Show(strMessageInfo);
                if (_bDoDelete)
                {
                    m_porxy.DeleteRange(_listDoDelete);
                    // 通知其他界面更新消息
                    CDBDataMgr.Instance.UpdateAllSerialPort();
                }
            }
        }