using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DBFactory;
using Microsoft.VisualBasic;
using System.Resources;
using System.Collections;

namespace SystemConfig
{
    public partial class FrmDeviceEdit : Form
    {
        bool IfUpdate = false;
        string CommonSql = "SELECT  T_Base_Device.F_DeviceIndex AS 设备索引, " +
                  " T_Base_Device.F_DeviceName AS 设备名称, " +
                  " T_Base_Device.F_DeviceKindIndex AS 设备类型索引, " +
                  " T_Base_Device_Kind.F_DeviceKindName AS 设备类型名称, " +
                  " T_Base_Device.F_CommType AS 通讯接口方式, " +
                  " T_Base_Device.F_DBWAddress AS DBW1区开始地址, " +
                  " T_Base_Device.F_DBWSendLength AS 发送字数," +
                  " T_Base_Device.F_DBWGetLength AS 接收字数, " +
                  " T_Base_Device.F_SerialPort AS 串口编号, " +
                  " T_Base_Device.F_CommSettings AS 通讯参数设置," +
                  " T_Base_Device.F_LocalIP AS 本地IP地址, " +
                  " T_Base_Device.F_LocalPort AS 本地端口," +
                  " T_Base_Device.F_RemoteIP AS 远程IP地址, " +
                  " T_Base_Device.F_RemotePort AS 远程端口,F_LockedState AS 设备状态," +
                  " F_EndNode AS 是终端节点,F_WaitPallet AS 可以停盘, F_DeviceVisual AS 动画显示," +
                  " F_Picture AS 图片源名称,F_ControlName AS 监控界面上的图形控件名称, " +
                  " T_Base_Device.F_BindingDevice AS 捆绑设备索引,F_NeedOptimize AS 需要优化调度," +
                  " F_CollectPut AS 需要积放,f_createlock as 禁用自动回收JIT空桶,T_Base_Device.F_DBW2Address AS DBW2区开始地址 " +
                  " FROM  T_Base_Device,T_Base_Device_Kind ";
        private bool _laneIndex = false;

        public bool LaneIndex
        {
            get { return _laneIndex; }
            set { _laneIndex = value; }
        }
        private bool _laneGateDeviceIndex = false;

        public bool LaneGateDeviceIndex
        {
            get { return _laneGateDeviceIndex; }
            set { _laneGateDeviceIndex = value; }
        }
        private bool _isSelected = false;

        public bool IsSelected
        {
            get { return _isSelected; }
            set { _isSelected = value; }
        }
        private static FrmDeviceEdit _formInstance;

        public static FrmDeviceEdit FormInstance
        {
            get 
            {
                if (_formInstance == null)
                {
                    _formInstance = new FrmDeviceEdit();
                    
                }
                return _formInstance;
            }
            set { FrmDeviceEdit._formInstance = value; }
        }
        DBOperator dbo = CStaticClass.dbo;
        
        public FrmDeviceEdit()
        {
            InitializeComponent();
            _formInstance = this;
            dbo.Open();
        }

        private void FrmDeviceEdit_Load(object sender, EventArgs e)
        {
            this.tabControl1.SelectTab("tabPage2");
            if (_isSelected == true)
            {
                btSelectOK.Visible = true;
            }
            else
                btSelectOK.Visible = false;

            DataSet ds= dbo.ExceSQL("select * from T_BASE_CommType");
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count > 0)
            {
                
                this.cbCommType.DataSource = ds.Tables[0].DefaultView;
                this.cbCommType.ValueMember = "F_CommType";
                this.cbCommType.DisplayMember = "F_CommType";
            }
            this.cbCommType.Text = "";
            cbPicture.Items.Clear();
            ResourceManager rm = new ResourceManager("SystemConfig.Properties.Resources", this.GetType().Assembly);
            ResourceSet rs=rm.GetResourceSet(System.Globalization.CultureInfo.CurrentCulture,true,true);

            IDictionaryEnumerator en = rs.GetEnumerator();
            

            // Goes through the enumerator, printing out the key and value pairs.
            while (en.MoveNext())
            {
                if ((en.Key.ToString().IndexOf("Err") < 0) && (en.Key.ToString().IndexOf("Goods") < 0))
                {
                    cbPicture.Items.Add(en.Key);
                }
              
            }
            rs.Close();

            
            ///////////////////绑定探物光电
            DataView dv4 = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceName, F_DeviceKindIndex FROM T_Base_Device Where F_DeviceKindIndex=18 order by F_DeviceName").Tables[0].DefaultView;
            //按钮盒
            DataView dv3 = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceName, F_DeviceKindIndex FROM T_Base_Device Where F_DeviceKindIndex=14 order by F_DeviceName").Tables[0].DefaultView;
            DataView dv2 = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceName, F_DeviceKindIndex FROM T_Base_Device Where F_DeviceKindIndex=14 order by F_DeviceName").Tables[0].DefaultView;
            //容器类型检测
            DataView dv1 = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceName, F_DeviceKindIndex FROM T_Base_Device Where F_DeviceKindIndex=18 order by F_DeviceName").Tables[0].DefaultView;
            if (dv4.Count > 0)
            {
                this.cbBindingDeviceIndex.ValueMember = "F_DeviceIndex";
                this.cbBindingDeviceIndex.DisplayMember = "F_DeviceName";
                this.cbBindingDeviceIndex.DataSource = dv4;
                this.cbPauseWeighButton.ValueMember = "F_DeviceIndex";
                this.cbPauseWeighButton.DisplayMember = "F_DeviceName";
                this.cbPauseWeighButton.DataSource = dv3;
                this.cbLoopButton.ValueMember = "F_DeviceIndex";
                this.cbLoopButton.DisplayMember = "F_DeviceName";
                this.cbLoopButton.DataSource = dv2;
                this.cbContainerType.ValueMember = "F_DeviceIndex";
                this.cbContainerType.DisplayMember = "F_DeviceName";
                this.cbContainerType.DataSource = dv1;

            }
            this.cbBindingDeviceIndex.SelectedValue = 0;
            this.cbPauseWeighButton.SelectedValue = 0;
            this.cbLoopButton.SelectedValue = 0;
            this.cbContainerType.SelectedValue = 0;
            
        }

        private void cbCommType_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (this.cbCommType.SelectedValue.ToString())
            {
                case "SimensSerialPort":
                    this.gbSerialPort.Visible =true;
                    this.gbCp5611.Visible = false;
                    this.gbSockects.Visible = false;
                    break;
                case "SimensCP5611":
                    this.gbSerialPort.Visible = false;
                    this.gbSockects.Visible = false;
                    this.gbCp5611.Visible = true;
                    break;
                case "Symbol3204":
                    this.gbSerialPort.Visible = true;
                    this.gbCp5611.Visible = false;
                    this.gbSockects.Visible = false;
                    break;
                case "SocketsUDP":
                    this.gbSerialPort.Visible = false;
                    this.gbCp5611.Visible = false;
                    this.gbSockects.Visible = true;
                    break;
                case "SocketsTCPIP":
                    this.gbSerialPort.Visible = false;
                    this.gbCp5611.Visible = false;
                    this.gbSockects.Visible = true;
                    break;
                case "SocketsTCPIPServer":
                    this.gbSerialPort.Visible = false;
                    this.gbCp5611.Visible = false;
                    this.gbSockects.Visible = true;
                    break;
                default:
                    break;
            }
           
        }

        private void btQuery_Click(object sender, EventArgs e)
        {
            if (tbContent.Text.Trim() == "") return;
            try
            {
                string df = "";

                switch (this.cbField.Text)
                {
                    case "设备索引":
                        df = "F_DeviceIndex";
                        break;
                    case "设备名称":
                        df = "F_DeviceName";
                        break;
                    case "设备类型索引":
                        df = "T_Base_Device.F_DeviceKindIndex";
                        break;
                    case "设备类型名称":
                        df = "F_DeviceKindName";
                        break;
                    case "通讯接口类型":
                        df = "F_CommType";
                        break;
                    default:
                        return;
                }
                string sql = CommonSql + "  WHERE " +
                   " T_Base_Device.F_DeviceKindIndex =  T_Base_Device_Kind.F_DeviceKindIndex " +
                   " and  " + df + "= '" + this.tbContent.Text + "' order by T_Base_Device.F_DeviceIndex";
                DataSet ds = dbo.ExceSQL(sql);
                //if (ds.Tables[0].DefaultView.Count > 0)
                //{
                    this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
                //}
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void btNullQuery_Click(object sender, EventArgs e)
        {
            this.cbField.Text = "";
            this.tbContent.Text = "";

        }

        private void btNull_Click(object sender, EventArgs e)
        {
            this.tbDeviceIndex.Text = "";
            this.tbDeviceKindIndex.Text = "";
            this.tbDeviceName.Text = "";
            this.cbCommType.Text = "";
            this.tbAddress.Text = "";
            this.tbCommSettings.Text = "";
            this.tbGetLength.Text = "";
            this.tbPort.Text = "";
            this.tbSendLength.Text = "";
            this.tblocalIP.Text = "";
            this.tblocalport.Text = "";
            this.tbremoteIP.Text = "";
            this.tbremoteport.Text = "";
        }

        private void btBack_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btSave_Click(object sender , EventArgs e)
        {
            try
            {
                #region 条件检查
                
                if (MessageBox.Show("您确认要保存设备信息吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
                {
                    return;
                }
                string sql = "";
                string sqlUpdate = "";
                int LockedState, devvisual;
                string endnode, waitp, pic, ctrolname, NeedOptimize, CollectPut,CreateLock;
                this.tbCommSettings.Text.Replace(',', ',');
                
                if (Information.IsNumeric(this.tbDeviceIndex.Text) == false)
                {
                    MessageBox.Show("设备索引只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    tbDeviceIndex.Focus();
                    return;
                }
                if (Information.IsNumeric(this.tbDeviceKindIndex.Text) == false)
                {
                    MessageBox.Show("设备类型索引只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    tbDeviceKindIndex.Focus();
                    return;
                }
                if (this.tbDeviceName.Text.Trim().Length == 0)
                {
                    MessageBox.Show("设备名称不允许是空值!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    tbDeviceName.Focus();
                    return;
                }
                if (this.cbCommType.Text.Trim().Length == 0)
                {
                    MessageBox.Show("通讯接口类型不允许是空值!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    cbCommType.Focus();
                    return;
                }
                
                if (cbLockedState.Text == "0:空闲")
                {
                    LockedState = 0;
                }
                else if (cbLockedState.Text == "-1:停用")
                {
                    LockedState = -1;
                }
                else
                {
                    if (Information.IsNumeric(cbLockedState.Text) != true)
                    {
                        MessageBox.Show("只能是"0:空闲","-1:停用"或者是整型的设备指令索引!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        cbLockedState.Focus();
                        return;
                    }
                    else
                    {
                        LockedState = Convert.ToInt32(cbLockedState.Text.Trim());
                    }
                    
                }
                if (chbDeviceVisual.Checked == true)
                {
                    devvisual = 1;
                }
                else
                {
                    devvisual = 0;
                }
                if (this.chbEndNode.Checked == true)
                {
                    endnode  = "1";
                }
                else
                {
                    endnode  = "0";
                }
                if (chbWaitPallet.Checked == true)
                {
                    waitp  = "1";
                }
                else
                {
                    waitp  = "0";
                }
                if (chbNeedOptimize.Checked == true)
                {
                    NeedOptimize = "1";
                }
                else
                {
                    NeedOptimize = "0";
                }
                if (chbCollectPut.Checked == true)
                {
                    CollectPut = "1";
                }
                else
                {
                    CollectPut = "0";
                }
                if (cbPicture.Text.Trim() == "")
                {
                    pic = null;
                }
                else
                {
                    pic = cbPicture.Text.Trim();
                }
                if (tbControlName.Text.Trim() == "")
                {
                    ctrolname= null;
                }
                else
                {
                    ctrolname = tbControlName.Text.Trim();
                }
                if (chbCreateLock.Checked == true)
                {
                    CreateLock = "1";
                }
                else
                {
                    CreateLock = "0";
                }
                #endregion

                #region 以太网模式
                
                
                if ((this.cbCommType.SelectedValue.ToString() == "SocketsUDP") || (this.cbCommType.SelectedValue.ToString() == "SocketsTCPIP") || (this.cbCommType.SelectedValue.ToString() == "SocketsTCPIPServer"))
                {
                    if (Information.IsNumeric(this.tblocalport.Text) == false)
                    {
                        MessageBox.Show("本地通讯端口只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        tblocalport.Focus();
                        return;
                    }
                    char[] cc = new char[1] { '.' };
                    string [] split=this.tblocalIP.Text.Split(cc);
                    for (int i=0;i<=3;i++)
                    {
                        if (Information.IsNumeric(split[i]) == false)
                        {
                            MessageBox.Show("本地Ip地址只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            tblocalIP.Focus();
                            return;
                        }
                    }
                    if (Information.IsNumeric(this.tbremoteport.Text) == false)
                    {
                        MessageBox.Show("远程通讯端口只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        tbremoteport.Focus();
                        return;
                    }
                    split = this.tbremoteIP.Text.Split(cc);
                    for (int i = 0; i <= 3; i++)
                    {
                        if (Information.IsNumeric(split[i]) == false)
                        {
                            MessageBox.Show("远程Ip地址只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            tbremoteIP.Focus();
                            return;
                        }
                    }

                    sql = "insert into T_Base_Device(F_DeviceIndex,F_DeviceKindIndex,F_DeviceName," +
                    "F_CommType,F_LocalIP,F_LocalPort,F_RemoteIP,F_RemotePort,F_LockedState,F_EndNode,F_WaitPallet,F_DeviceVisual,F_Picture,F_ControlName,F_NeedOptimize,F_CollectPut,f_createlock ) " +
                    "values(" + Convert.ToInt32(tbDeviceIndex.Text) + "," + Convert.ToInt32(tbDeviceKindIndex.Text) +
                    ",'" + tbDeviceName.Text + "','" + cbCommType.SelectedValue.ToString() + "','" + this.tblocalIP.Text +
                    "'," + Convert.ToInt32(this.tblocalport.Text) + ",'" + (this.tbremoteIP.Text) + "'," + Convert.ToInt32(this.tbremoteport.Text) + ","+
                    LockedState + ",'" + endnode + "','" + waitp + "'," + devvisual + ",'" + pic + "','" + ctrolname + "','" + NeedOptimize + "','" + CollectPut + "','"+ CreateLock  +"')";
                }
                #endregion

                #region 自由口
                
                
                else if ((this.cbCommType.SelectedValue.ToString() == "SimensSerialPort") || (this.cbCommType.SelectedValue.ToString() == "Symbol3204"))
                {
                    if (Information.IsNumeric(this.tbPort.Text) == false)
                    {
                        MessageBox.Show("串口编号只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        tbPort.Focus();
                        return;
                    }
                    if (this.tbCommSettings.Text.Trim().Length == 0)
                    {
                        MessageBox.Show("通讯参数设置不允许是空值!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        tbCommSettings.Focus();
                        return;
                    }

                    
                    sql = "insert into T_Base_Device(F_DeviceIndex,F_DeviceKindIndex,F_DeviceName," +
                    "F_CommType,F_SerialPort,F_CommSettings,F_LockedState,F_EndNode,F_WaitPallet,F_DeviceVisual,F_Picture,F_ControlName,F_NeedOptimize,F_CollectPut,f_createlock ) " +
                    "values(" + Convert.ToInt32(tbDeviceIndex.Text) + "," + Convert.ToInt32(tbDeviceKindIndex.Text) +
                    ",'" + tbDeviceName.Text + "','" + cbCommType.SelectedValue.ToString() + "'," + Convert.ToInt32(this.tbPort.Text) +
                    ",'" + this.tbCommSettings.Text + "'," +
                    LockedState + ",'" + endnode + "','" + waitp + "'," + devvisual + ",'" + pic + "','" + ctrolname + "','" + NeedOptimize + "','" + CollectPut + "','"+CreateLock  +"')"; ;
                }
                #endregion

                #region SimensCP5611
                
                
                else if (this.cbCommType.SelectedValue.ToString() == "SimensCP5611")
                {
                    if (Information.IsNumeric(this.tbAddress.Text) == false)
                    {
                        MessageBox.Show("DBW1区起始地址只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    if (Information.IsNumeric(this.tbAddress2.Text) == false)
                    {
                        MessageBox.Show("DBW2区起始地址只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    if (Information.IsNumeric(this.tbGetLength.Text) == false)
                    {
                        double a, b, c;
                        char[] cc = new char[1] { '/' };
                        string[] sp;
                        if (this.tbGetLength.Text.IndexOf('/') > 0)
                        {
                            sp = this.tbGetLength.Text.Split(cc);
                            a = Convert.ToDouble(sp[0]);
                            b = Convert.ToDouble(sp[1]);
                            c = a / b;
                            this.tbGetLength.Text = c.ToString();
                        }
                        else
                        {
                            MessageBox.Show("接收字数只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            return;
                        }
                    }
                    if (Information.IsNumeric(this.tbSendLength.Text) == false)
                    {
                        double a, b, c;
                        char[] cc = new char[1] { '/' };
                        string[] sp;
                        if (this.tbSendLength.Text.IndexOf('/') > 0)
                        {
                            sp = this.tbSendLength.Text.Split(cc);
                            a = Convert.ToDouble(sp[0]);
                            b = Convert.ToDouble(sp[1]);
                            c = a / b;
                            this.tbSendLength.Text = c.ToString();
                        }
                        else
                        {
                            MessageBox.Show("发送字数只能是数字类型!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            return;
                    }
                        
                    }
                    sql = "insert into T_Base_Device(F_DeviceIndex,F_DeviceKindIndex,F_DeviceName," +
                    "F_CommType,F_DBWAddress,F_DBWSendLength,F_DBW2Address,F_DBWGetLength,F_LockedState,F_EndNode,F_WaitPallet,F_DeviceVisual,F_Picture,F_ControlName,F_NeedOptimize,F_CollectPut,f_createlock ) " +
                    "values(" + Convert.ToInt32(tbDeviceIndex.Text) + "," + Convert.ToInt32(tbDeviceKindIndex.Text) +
                    ",'" + tbDeviceName.Text + "','" + cbCommType.SelectedValue + "'," + Convert.ToInt32(this.tbAddress.Text) +
                    "," + Convert.ToDouble(this.tbSendLength.Text) + "," + Convert.ToInt32(this.tbAddress2.Text) +"," + Convert.ToDouble(this.tbGetLength.Text) + "," +
                    LockedState + ",'" + endnode + "','" + waitp + "'," + devvisual + ",'" + pic + "','" + ctrolname + "','" + NeedOptimize + "','" + CollectPut + "','"+ CreateLock  +"')";
                }
                #endregion

                #region 虚拟类接口


                else //if ((this.cbCommType.SelectedValue.ToString() == "-"))
                {
                    sql = "insert into T_Base_Device(F_DeviceIndex,F_DeviceKindIndex,F_DeviceName," +
                    " F_CommType,F_LockedState,F_EndNode,F_WaitPallet,F_DeviceVisual,F_Picture,F_ControlName,F_NeedOptimize,F_CollectPut,f_createlock) " +
                    "values(" + Convert.ToInt32(tbDeviceIndex.Text) + "," + Convert.ToInt32(tbDeviceKindIndex.Text) +
                    ",'" + tbDeviceName.Text + "','" + cbCommType.SelectedValue + "'," + LockedState + ",'" + endnode + "','" + waitp + "'," +
                    devvisual + ",'" + pic + "','" + ctrolname + "','" + NeedOptimize + "','" + CollectPut + "','" + CreateLock + "')"; ;
                }
                #endregion

                #region 数据显示
                
                
                DataSet ds = dbo.ExceSQL("SELECT F_DeviceKindIndex, F_GoodsMoveKindIndex," +
                    " F_DeviceKindName FROM T_Base_Device_Kind where F_DeviceKindIndex=" + Convert.ToInt32(this.tbDeviceKindIndex.Text));
                if (ds.Tables[0].DefaultView.Count <= 0)
                {
                    MessageBox.Show("设备类型索引在数据库中不存在!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                ds.Clear();
                
                string strsql = CommonSql + " WHERE " +
                   " T_Base_Device.F_DeviceKindIndex =  T_Base_Device_Kind.F_DeviceKindIndex " +
                   " and  F_DeviceIndex =  " + Convert.ToInt32(this.tbDeviceIndex.Text);
                #endregion

                #region 修改设备信息


                if (IfUpdate == true)
                {
                    int addr = 0, addr2 = 0, sport = 0, lport = 0, rport = 0;
                    double slen=0, glen=0;
                    string lip = null, rip = null;
                    if (tbAddress.Text.Length > 0)
                        addr =Convert.ToInt32(tbAddress.Text);
                    if (tbPort.Text.Length > 0)
                        sport = Convert.ToInt32(tbPort.Text);
                    if (tbSendLength.Text.Length > 0)
                        slen = Convert.ToDouble(tbSendLength.Text );
                    if (tbAddress2.Text.Length > 0)
                        addr2 = Convert.ToInt32(tbAddress2.Text);
                    if (tbGetLength.Text.Length > 0)
                        glen = Convert.ToDouble(tbGetLength.Text);
                    if (tblocalIP.Text.Length > 0)
                        lip = tblocalIP.Text ;
                    if (tblocalport.Text.Length > 0)
                        lport = Convert.ToInt32(tblocalport.Text);
                    if (tbremoteIP.Text.Length > 0)
                        rip = tbremoteIP.Text;
                    if (tbremoteport.Text.Length > 0)
                        rport = Convert.ToInt32(tbremoteport.Text);
                    sqlUpdate = "update T_Base_Device set F_DeviceKindIndex="+ tbDeviceKindIndex.Text
                        + ", F_DeviceName='" + tbDeviceName.Text + "',F_CommType='"+ cbCommType.Text
                        + "',F_DBWAddress=" + addr + ",F_DBWSendLength="+ slen
                        + ",F_DBW2Address=" + addr2 + ",F_DBWGetLength=" + glen + ",F_SerialPort=" + sport
                        + ",F_LocalIP='" + lip + "',F_LocalPort=" + lport
                        + ",F_RemoteIP='" + rip + "',F_RemotePort=" + rport
                        + ", F_CommSettings='" + tbCommSettings.Text
                        + "',F_LockedState ="+LockedState +", F_EndNode ='"+endnode 
                        +"', F_WaitPallet ='"+waitp +"', F_DeviceVisual ="+devvisual 
                        +", F_Picture ='"+pic +"', F_ControlName ='"+ ctrolname
                        + "',F_NeedOptimize='" + NeedOptimize + "',F_CollectPut='" + CollectPut + "',f_createlock ='"+ CreateLock 
                        + "' where F_DeviceIndex=" + Convert.ToInt32(tbDeviceIndex.Text);
                    ds = dbo.ExceSQL(sqlUpdate);
                    MessageBox.Show("设备信息修改成功!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                     
                    IfUpdate = false;
                }
                #endregion

                else
                {
                    //判断是否存在
                    ds = dbo.ExceSQL(strsql);
                    if (ds.Tables[0].DefaultView.Count > 0)
                    {
                        MessageBox.Show("设备索引在数据库中已经存在!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }
                    ds.Clear();
                    ds = dbo.ExceSQL(sql);
                    MessageBox.Show("设备信息录入成功!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);

                }
                

                ds.Clear();
                ds = dbo.ExceSQL(strsql);
                this.dataGridView1.DataSource = ds.Tables[0].DefaultView;


            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void tsmEdit_Click(object sender, EventArgs e)
        {
            if (dataGridView1.RowCount <= 0)
            {
                return;
            }

            this.tabControl1.SelectTab("tabPage1");
            this.tbDeviceIndex.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString()+ "";
            this.tbDeviceName.Text = this.dataGridView1.CurrentRow.Cells[1].Value.ToString() + "";
            this.tbDeviceKindIndex.Text = this.dataGridView1.CurrentRow.Cells[2].Value.ToString() + "";
            //this.cbCommType.SelectedValue = this.dataGridView1.CurrentRow.Cells[4].Value.ToString() + "";
            this.cbCommType.Text = this.dataGridView1.CurrentRow.Cells[4].Value.ToString() + "";
            cbCommType_SelectedIndexChanged(sender, e);
            if (this.dataGridView1.CurrentRow.Cells[4].Value.ToString() + "" == "")
            {
                this.cbCommType.Text = "-";
            }
            this.tbAddress.Text = this.dataGridView1.CurrentRow.Cells[5].Value.ToString() + "";
            this.tbSendLength.Text = this.dataGridView1.CurrentRow.Cells[6].Value.ToString() + "";
            this.tbGetLength.Text = this.dataGridView1.CurrentRow.Cells[7].Value.ToString() + "";
            this.tbPort.Text = this.dataGridView1.CurrentRow.Cells[8].Value.ToString() + "";
            this.tbCommSettings.Text = this.dataGridView1.CurrentRow.Cells[9].Value.ToString() + "";
            this.tblocalIP.Text = this.dataGridView1.CurrentRow.Cells[10].Value.ToString() + "";
            this.tblocalport.Text = this.dataGridView1.CurrentRow.Cells[11].Value.ToString() + "";
            this.tbremoteIP.Text = this.dataGridView1.CurrentRow.Cells[12].Value.ToString() + "";
            this.tbremoteport.Text = this.dataGridView1.CurrentRow.Cells[13].Value.ToString() + "";
            if(this.dataGridView1.CurrentRow.Cells[14].Value.ToString() + ""=="0")
            {
                this.cbLockedState.Text = "0:空闲";
            }
            else if (this.dataGridView1.CurrentRow.Cells[14].Value.ToString() + "" == "-1")
            {
                this.cbLockedState.Text  = "-1:停用";
            }
            else
            {
                this.cbLockedState.Text = this.dataGridView1.CurrentRow.Cells[14].Value.ToString() + "";
            }
            if (this.dataGridView1.CurrentRow.Cells[15].Value.ToString() + "" == "1")
            {
                this.chbEndNode.Checked = true;
            }
            else
            {
                this.chbEndNode.Checked = false;
            }
            if (this.dataGridView1.CurrentRow.Cells[16].Value.ToString() + "" == "1")
            {
                this.chbWaitPallet.Checked = true;
            }
            else
            {
                this.chbWaitPallet.Checked = false;
            }
            if (this.dataGridView1.CurrentRow.Cells[17].Value.ToString() + "" == "1")
            {
                this.chbDeviceVisual.Checked = true;
            }
            else
            {
                this.chbDeviceVisual.Checked = false;
            }
            this.tbControlName.Text = this.dataGridView1.CurrentRow.Cells[19].Value.ToString() + "";
            this.cbPicture.Text = this.dataGridView1.CurrentRow.Cells[18].Value.ToString() + "";
            if (this.dataGridView1.CurrentRow.Cells[21].Value.ToString() + "" == "1")
            {
                this.chbNeedOptimize.Checked = true;
            }
            else
            {
                this.chbNeedOptimize.Checked = false;
            }
            if (this.dataGridView1.CurrentRow.Cells[22].Value.ToString() + "" == "1")
            {
                this.chbCollectPut.Checked = true;
            }
            else
            {
                this.chbCollectPut.Checked = false;
            }
            if (this.dataGridView1.CurrentRow.Cells[23].Value.ToString() + "" == "1")
            {
                this.chbCreateLock.Checked = true;
            }
            else
            {
                this.chbCreateLock.Checked = false;
            }
            this.tbAddress2.Text = this.dataGridView1.CurrentRow.Cells[24].Value.ToString() + "";
            IfUpdate = true;
        }

        private void tsmDel_Click(object sender, EventArgs e)
        {
            if (dataGridView1.RowCount <= 0)
            {
                return;
            }
            if (MessageBox.Show("您确认要删除选中行的“设备索引:" + this.dataGridView1.CurrentRow.Cells[0].Value.ToString() + "”信息吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
            {
                return;
            }
            dbo.ExceSQL("delete from T_Base_Device  where F_DeviceIndex =" + Convert.ToInt32(this.dataGridView1.CurrentRow.Cells[0].Value));
            button2_Click(sender, e);
        }

        private void btDeviceKind_Click(object sender, EventArgs e)
        {
            FrmDeviceKindEdit.FormInstance.IsSelected = true; 
            FrmDeviceKindEdit.FormInstance.ShowDialog();
        }

        private void btSelectOK_Click(object sender, EventArgs e)
        {
            if (_laneGateDeviceIndex==true)
                FrmLaneGateEdit.FormInstance.tbLaneGateDeviceIndex.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();
            else if (_laneIndex==true)
                FrmLaneGateEdit.FormInstance.tbLaneIndex.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IfUpdate = false;
        }

        private void cbLockedState_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void chbDeviceVisual_CheckedChanged(object sender, EventArgs e)
        {
            if (chbDeviceVisual.Checked == true)
            {
                lblctrolname.Visible = true;
                lblpic.Visible = true;
                cbPicture.Visible = true;
                tbControlName.Visible = true;
                pbPicture.Visible = true;
            }
            else
            {
                lblctrolname.Visible = false;
                lblpic.Visible = false;
                cbPicture.Visible = false;
                tbControlName.Visible = false;
                pbPicture.Visible = false;
                tbControlName.Text = "";
                cbPicture.Text = "";
            }
        }

        private void cbPicture_SelectedIndexChanged(object sender, EventArgs e)
        {
            ResourceManager rm = new ResourceManager("SystemConfig.Properties.Resources", this.GetType().Assembly);
            
            pbPicture.BackgroundImage= (System.Drawing.Image)rm.GetObject(cbPicture.Text.Trim());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string sql = CommonSql + "  WHERE " +
                   " T_Base_Device.F_DeviceKindIndex =  T_Base_Device_Kind.F_DeviceKindIndex  order by T_Base_Device.F_DeviceIndex";
            DataSet ds = dbo.ExceSQL(sql);
           this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
           
        }

        private void button20_Click(object sender, EventArgs e)
        {
            if (cbBindingDeviceIndex.SelectedValue.ToString() == "")
            {
                return;
            }
            else
            {
                string litem;
                litem = cbBindingDeviceIndex.Text.Trim() + "=" + cbBindingDeviceIndex.SelectedValue.ToString();
                for (int i = 0; i < listBox1.Items.Count; i++)
                {
                    if (litem == listBox1.Items[i].ToString())
                    {
                        return;
                    }
                }
                this.listBox1.Items.Add(litem);
            }
        }

        private void button19_Click(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex < 0)
            {
                return;
            }
            this.listBox1.Items.RemoveAt(listBox1.SelectedIndex);
        }

        private void button28_Click(object sender, EventArgs e)
        {
            if (listBox1.SelectedIndex < 0)
            {
                return;
            }
            else
            {
                string item = listBox1.SelectedItem.ToString();
                int idx = listBox1.SelectedIndex - 1;
                if (idx < 0)
                {
                    return;
                }
                listBox1.Items.RemoveAt(listBox1.SelectedIndex);
                listBox1.Items.Insert(idx, item);
                listBox1.SelectedIndex = idx;
            }
        }

        private void button27_Click(object sender, EventArgs e)
        {
            if ((listBox1.SelectedIndex >= listBox1.Items.Count) || (listBox1.SelectedIndex < 0))
            {
                return;
            }
            else
            {
                string item = listBox1.SelectedItem.ToString();
                int idx = listBox1.SelectedIndex + 1;
                if ((idx >= listBox1.Items.Count) || (idx < 0))
                {
                    return;
                }
                listBox1.Items.RemoveAt(listBox1.SelectedIndex);
                listBox1.Items.Insert(idx, item);
                listBox1.SelectedIndex = idx;
            }
        }

        private void button18_Click(object sender, EventArgs e)
        {
            this.tbDeviceIndex1.Text = "";
            this.cbBindingDeviceIndex.Text = "";
            this.listBox1.Text = "";

        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (dataGridView1.RowCount <= 0)
            {
                return;
            }
            this.tabControl1.SelectTab("tabPage3");
            this.tbDeviceIndex1.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString() + "";
            char[] cc = new char[1] { ';' };

            string[] split;

            string sql;

            if (this.dataGridView1.CurrentRow.Cells[20].Value.ToString() + "" == "")
            {
                listBox1.Items.Clear();
                return;
            }
            DataSet ds = dbo.ExceSQL("SELECT * FROM  T_Base_Device where F_DeviceIndex=" + Convert.ToInt32(this.tbDeviceIndex1.Text.Trim()));
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count > 0)
            {
                if (dv[0]["F_BindingDevice"] == DBNull.Value)
                {
                    listBox1.Items.Clear();
                    return;
                }
                //listBox1
                listBox1.Items.Clear();
                split = dv[0]["F_BindingDevice"].ToString().Split(cc);
                for (int i = split.GetLowerBound(0); i <= split.GetUpperBound(0); i++)
                {
                    sql = "SELECT F_DeviceIndex,F_DeviceName FROM T_Base_Device Where  F_DeviceIndex=" + Convert.ToInt32(split[i]);
                    DataSet ds2 = dbo.ExceSQL(sql);
                    DataView dv2 = ds2.Tables[0].DefaultView;
                    if (dv2.Count <= 0)
                    {
                        MessageBox.Show("捆绑设备索引在设备表不存在!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    else
                    {
                        listBox1.Items.Add(dv2[0]["F_DeviceName"].ToString() + "=" + dv2[0]["F_DeviceIndex"].ToString());
                    }
                }
            }
            else
            {
                this.listBox1.Items.Clear();

            }

            IfUpdate = true;
        }

        private void button17_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("您确认要保存捆绑设备信息吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
            {
                return;
            }
            if (Information.IsNumeric(this.tbDeviceIndex1.Text) == false)
            {
                MessageBox.Show("主设备索引只允许输入数字!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbDeviceIndex1.Focus();
                return;
            }
            DataSet ds = dbo.ExceSQL("SELECT * FROM  T_Base_Device where F_DeviceIndex=" + Convert.ToInt32(this.tbDeviceIndex1.Text.Trim()));
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count <= 0)
            {
                MessageBox.Show("主设备索引在数据库中不存在!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbDeviceIndex1.Focus();
                return;
            }
            ds.Clear();
            dv.Dispose();
            string bindingdevice="";
            char[] dh = new char[1] { '='};
            string[] sp;
            if (listBox1.Items.Count > 0)
            {
                for (int i = 0; i < listBox1.Items.Count; i++)
                {
                    sp = listBox1.Items[i].ToString().Split(dh);
                    bindingdevice = bindingdevice + ";" + sp[1];
                }
                bindingdevice = bindingdevice.Substring(1);
            }
            else
            {
                bindingdevice = null;
            }
            dbo.ExceSQL("update t_base_device set f_bindingdevice='"+ bindingdevice +"' where F_DeviceIndex=" + Convert.ToInt32(this.tbDeviceIndex1.Text.Trim()));
            string sql = CommonSql + "  WHERE " +
                   " T_Base_Device.F_DeviceKindIndex =  T_Base_Device_Kind.F_DeviceKindIndex and F_DeviceIndex=" + Convert.ToInt32(this.tbDeviceIndex1.Text.Trim());
            ds = dbo.ExceSQL(sql);
            this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
            MessageBox.Show("捆绑设备信息保存成功!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {//WIA的请求暂停称料按钮信息维护
            if (dataGridView1.RowCount <= 0)
            {
                return;
            }
            this.tabControl1.SelectTab("tabPage5");
            this.tbDeviceIndex3.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString() + "";
           
            DataView dv= dbo.ExceSQL("SELECT f_pause FROM  T_Base_Device where f_pause is not NULL and F_DeviceIndex=" + Convert.ToInt32(this.tbDeviceIndex3.Text.Trim())).Tables[0].DefaultView;
            if (dv.Count > 0)
            {
                this.cbPauseWeighButton.SelectedValue = dv[0]["f_pause"];

            }
            else
            {
                this.cbPauseWeighButton.SelectedValue = 0;
            }
            

            IfUpdate = true;
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {//JIT的开车到空位的请求按钮信息维护
            if (dataGridView1.RowCount <= 0)
            {
                return;
            }
            this.tabControl1.SelectTab("tabPage4");
            this.tbDeviceIndex2.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString() + "";

            DataSet ds = dbo.ExceSQL("SELECT f_loop  FROM  T_Base_Device where f_loop  is not NULL and F_DeviceIndex=" + Convert.ToInt32(this.tbDeviceIndex2.Text.Trim()));
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count > 0)
            {
                this.cbLoopButton.SelectedValue = Convert.ToInt32(dv[0]["f_loop"]);
            }
            else
            {
                this.cbLoopButton.SelectedValue = 0;
            }
            IfUpdate = true;
        }

        private void toolStripMenuItem4_Click(object sender, EventArgs e)
        {//JIT/WIA容器类型检测光电信息维护
            if (dataGridView1.RowCount <= 0)
            {
                return;
            }
            this.tabControl1.SelectTab("tabPage6");
            this.tbDeviceIndex4.Text = this.dataGridView1.CurrentRow.Cells[0].Value.ToString() + "";

            DataSet ds = dbo.ExceSQL("SELECT f_containertype FROM  T_Base_Device where f_containertype is not NULL and F_DeviceIndex=" + Convert.ToInt32(this.tbDeviceIndex4.Text.Trim()));
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count > 0)
            {
                this.cbContainerType.SelectedValue = dv[0]["f_containertype"];
            }
            else
            {
                this.cbContainerType.SelectedValue = 0;
            }
            IfUpdate = true;
        }

        private void btSaveJITLoop_Click(object sender, EventArgs e)
        {
            string devIndex = this.tbDeviceIndex2.Text ;
            if (MessageBox.Show("您确认要保存JIT的开车到空位的请求按钮信息吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
            {
                return;
            }
            if (Information.IsNumeric(devIndex) == false)
            {
                MessageBox.Show("主设备索引只允许输入数字!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbDeviceIndex2.Focus();
                return;
            }
            DataSet ds = dbo.ExceSQL("SELECT F_DeviceIndex FROM  T_Base_Device where F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim()));
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count <= 0)
            {
                MessageBox.Show("主设备索引在数据库中不存在!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbDeviceIndex2.Focus();
                return;
            }
            ds.Clear();
            dv.Dispose();
            string bindingdevice = this.cbLoopButton.SelectedValue.ToString();
            dbo.ExceSQL("update t_base_device set f_loop ='" + bindingdevice + "' where F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim()));
            string sql = CommonSql + "  WHERE " +
                   " T_Base_Device.F_DeviceKindIndex =  T_Base_Device_Kind.F_DeviceKindIndex and F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim());
            ds = dbo.ExceSQL(sql);
            this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
            MessageBox.Show("JIT的开车到空位的请求按钮信息保存成功!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btSaveWIAPause_Click(object sender, EventArgs e)
        {
            string devIndex = this.tbDeviceIndex3.Text ;
            if (MessageBox.Show("您确认要保存WIA暂停称料的请求按钮信息吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
            {
                return;
            }
            if (Information.IsNumeric(devIndex) == false)
            {
                MessageBox.Show("主设备索引只允许输入数字!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbDeviceIndex3.Focus();
                return;
            }
            DataSet ds = dbo.ExceSQL("SELECT F_DeviceIndex FROM  T_Base_Device where F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim()));
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count <= 0)
            {
                MessageBox.Show("主设备索引在数据库中不存在!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbDeviceIndex3.Focus();
                return;
            }
            ds.Clear();
            dv.Dispose();
            string bindingdevice = this.cbPauseWeighButton.SelectedValue.ToString();
            dbo.ExceSQL("update t_base_device set f_pause  ='" + bindingdevice + "' where F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim()));
            string sql = CommonSql + "  WHERE " +
                   " T_Base_Device.F_DeviceKindIndex =  T_Base_Device_Kind.F_DeviceKindIndex and F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim());
            ds = dbo.ExceSQL(sql);
            this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
            MessageBox.Show("WIA暂停称料的请求按钮信息保存成功!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
        
        }

        private void btSaveContainer_Click(object sender, EventArgs e)
        {
            string devIndex = this.tbDeviceIndex4.Text;
            if (MessageBox.Show("您确认要保存JIT/WIA容器类型检测光电信息吗?", "操作提示:", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
            {
                return;
            }
            if (Information.IsNumeric(devIndex) == false)
            {
                MessageBox.Show("主设备索引只允许输入数字!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbDeviceIndex4.Focus();
                return;
            }
            DataSet ds = dbo.ExceSQL("SELECT F_DeviceIndex FROM  T_Base_Device where F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim()));
            DataView dv = ds.Tables[0].DefaultView;
            if (dv.Count <= 0)
            {
                MessageBox.Show("主设备索引在数据库中不存在!", "误操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                tbDeviceIndex4.Focus();
                return;
            }
            ds.Clear();
            dv.Dispose();
            string bindingdevice = this.cbContainerType.SelectedValue.ToString();
            dbo.ExceSQL("update t_base_device set f_containertype  ='" + bindingdevice + "' where F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim()));
            string sql = CommonSql + "  WHERE " +
                   " T_Base_Device.F_DeviceKindIndex =  T_Base_Device_Kind.F_DeviceKindIndex and F_DeviceIndex=" + Convert.ToInt32(devIndex.Trim());
            ds = dbo.ExceSQL(sql);
            this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
            MessageBox.Show("JIT/WIA容器类型检测光电信息保存成功!", "操作提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
        
        }

        private void cbLoopButton_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void cbPauseWeighButton_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        

    }
}