DataGridView 使用个人理解

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AGV.Monitor.Communication;

namespace AGV.Monitor.WinForm.Main.UI
{
    public partial class Car_Test : Form
    {
        #region 初始化位置及尺寸
        enum DgvSize : int
        {
            InitialWidth = 1119,
            InitialHeigh = 504,
            DefaultWidth = 10,
            DefaultHeigh = 10
        }
        enum DgvPosition : int
        {
            InitialTop = 20,
            InitialLeft = 6
        }
        enum DisplayTypeSekect : byte
        {
            CarTestType = 1,
            CarSimulateType = 2,
            defaultType = 3
        }

        byte showMark = 0;
        #endregion

        CommunicationServer communicationServer;

        public Car_Test()
        {
            InitializeComponent();
        }

        
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void Car_Test_Load(object sender, EventArgs e)
        {
            communicationServer = new CommunicationServer();

            //DgvCarTestDisplaySetting(dgvDeviceOperate);
            Size defaultSize = new Size((int)DgvSize.DefaultWidth, (int)DgvSize.DefaultHeigh);
            dgvDeviceOperate.Size = defaultSize;
            dgvCarSimulate.Size = defaultSize;

            dgvDeviceOperate.Left = (int)DgvPosition.InitialLeft;
            dgvDeviceOperate.Top = (int)DgvPosition.InitialTop;
            
            dgvCarSimulate.Visible = false;
            dgvCarSimulate.Enabled = false;

            dgvDeviceOperate.Visible = false;
            dgvDeviceOperate.Enabled = false;

            lblIp.Visible = false;
            txtDeviceIp.Visible = false;
            txtDeviceIp.Enabled = false;

            lblPort.Visible = false;
            txtDevicePort.Visible = false;
            txtDevicePort.Enabled = false;

            lblMac.Visible = false;
            txtDeviceMac.Visible = false;
            txtDeviceMac.Enabled = false;

            btnDeviceInfoAdd.Visible = false;
            btnDeviceInfoAdd.Enabled = false;

            gpbDeviceInfo.Visible = false;
            gpbDeviceOperate.Visible = false;


        }

        //carTest显示
        private void DgvCarTestDisplaySetting(DataGridView dgv)
        {
            //设置标题样式
            DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();
            columnHeaderStyle.BackColor = Color.Beige;
            columnHeaderStyle.Font = new Font("微软雅黑", 11, FontStyle.Regular);
            columnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgv.ColumnHeadersDefaultCellStyle = columnHeaderStyle;

            //设置其他单元格式
            DataGridViewCellStyle cellStyke = new DataGridViewCellStyle();
            cellStyke.BackColor = Color.Beige;
            cellStyke.Font = new Font("宋体", 10, FontStyle.Regular);
            cellStyke.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgv.DefaultCellStyle = cellStyke;

            dgv.AllowUserToAddRows = false;

            DataGridViewTextBoxColumn dgvtxtColumn = new DataGridViewTextBoxColumn();
            dgvtxtColumn.HeaderText = "序号";
            dgvtxtColumn.Name = "dgvtxtColumn";
            dgvtxtColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceNumColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceNumColumn.HeaderText = "设备ID";
            dgvtxtDeviceNumColumn.Name = "dgvtxtDeviceNumColumn";
            dgvtxtDeviceNumColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceNumColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceMacColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceMacColumn.HeaderText = "MAC";
            dgvtxtDeviceMacColumn.Name = "dgvtxtDeviceMacColumn";
            dgvtxtDeviceMacColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceMacColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceIpColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceIpColumn.HeaderText = "IP";
            dgvtxtDeviceIpColumn.Name = "dgvtxtDeviceIpColumn";
            dgvtxtDeviceIpColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceIpColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceConnectIpColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceConnectIpColumn.HeaderText = "连接地址";
            dgvtxtDeviceConnectIpColumn.Name = "dgvtxtDeviceConnectIpColumn";
            dgvtxtDeviceConnectIpColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceConnectIpColumn);

            DataGridViewComboBoxColumn dgvcboWrSelect = new DataGridViewComboBoxColumn();
            dgvcboWrSelect.HeaderText = "读写选择";
            dgvcboWrSelect.Name = "dgvcboWrSelect";
            dgvcboWrSelect.FlatStyle = FlatStyle.Popup;
            dgvcboWrSelect.Items.Add("Write");
            dgvcboWrSelect.Items.Add("Read");
            dgvcboWrSelect.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvcboWrSelect);

            DataGridViewTextBoxColumn dgvtxtDeviceOperateAddressColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceOperateAddressColumn.HeaderText = "操作地址";
            dgvtxtDeviceOperateAddressColumn.Name = "dgvtxtDeviceOperateAddressColumn";
            dgvtxtDeviceOperateAddressColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceOperateAddressColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceOperateAddressCountColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceOperateAddressCountColumn.HeaderText = "数量";
            dgvtxtDeviceOperateAddressCountColumn.Name = "dgvtxtDeviceOperateAddressCountColumn";
            dgvtxtDeviceOperateAddressCountColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceOperateAddressCountColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceWriteDataValueColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceWriteDataValueColumn.HeaderText = "待发送内容";
            dgvtxtDeviceWriteDataValueColumn.Name = "dgvtxtDeviceWriteDataValueColumn";
            dgvtxtDeviceWriteDataValueColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceWriteDataValueColumn);

            DataGridViewButtonColumn dgvbtnSend = new DataGridViewButtonColumn();
            dgvbtnSend.HeaderText = "发送";
            dgvbtnSend.Name = "dgvbtnSend";
            dgvbtnSend.FlatStyle = FlatStyle.Popup;
            dgvbtnSend.UseColumnTextForButtonValue = true;
            dgvbtnSend.Text = "Send";
            dgvbtnSend.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvbtnSend);

            DataGridViewTextBoxColumn dgvtxtDeviceResponseInfoColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceResponseInfoColumn.HeaderText = "应答信息";
            dgvtxtDeviceResponseInfoColumn.Name = "dgvtxtDeviceResponseInfoColumn";
            dgvtxtDeviceResponseInfoColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgv.Columns.Add(dgvtxtDeviceResponseInfoColumn);

            dgv.Columns[0].Visible = false;

        }

        //CarSimulate 显示
        private void DgvCarSimulateDisplaySetting(DataGridView dgv)
        {
            //设置标题样式
            DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();
            columnHeaderStyle.BackColor = Color.Beige;
            columnHeaderStyle.Font = new Font("微软雅黑", 11, FontStyle.Regular);
            columnHeaderStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgv.ColumnHeadersDefaultCellStyle = columnHeaderStyle;

            //设置其他单元格式
            DataGridViewCellStyle cellStyke = new DataGridViewCellStyle();
            cellStyke.BackColor = Color.Beige;
            cellStyke.Font = new Font("宋体", 10, FontStyle.Regular);
            cellStyke.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgv.DefaultCellStyle = cellStyke;

            dgv.AllowUserToAddRows = false;

            DataGridViewTextBoxColumn dgvtxtColumn = new DataGridViewTextBoxColumn();
            dgvtxtColumn.HeaderText = "序号";
            dgvtxtColumn.Name = "dgvtxtColumn";
            dgvtxtColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceNumColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceNumColumn.HeaderText = "设备ID";
            dgvtxtDeviceNumColumn.Name = "dgvtxtDeviceNumColumn";
            dgvtxtDeviceNumColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceNumColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceMacColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceMacColumn.HeaderText = "MAC";
            dgvtxtDeviceMacColumn.Name = "dgvtxtDeviceMacColumn";
            dgvtxtDeviceMacColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceMacColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceIpColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceIpColumn.HeaderText = "IP";
            dgvtxtDeviceIpColumn.Name = "dgvtxtDeviceIpColumn";
            dgvtxtDeviceIpColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceIpColumn);

            DataGridViewTextBoxColumn dgvtxtDeviceConnectIpColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceConnectIpColumn.HeaderText = "连接地址";
            dgvtxtDeviceConnectIpColumn.Name = "dgvtxtDeviceConnectIpColumn";
            dgvtxtDeviceConnectIpColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceConnectIpColumn);

            DataGridViewButtonColumn dgvbtnConnect = new DataGridViewButtonColumn();
            dgvbtnConnect.HeaderText = "连接";
            dgvbtnConnect.Name = "dgvbtnConnect";
            dgvbtnConnect.FlatStyle = FlatStyle.Popup;
            dgvbtnConnect.UseColumnTextForButtonValue = true;
            dgvbtnConnect.Text = "Connect";
            dgvbtnConnect.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvbtnConnect);

            DataGridViewTextBoxColumn dgvtxtStartSiteColumn = new DataGridViewTextBoxColumn();
            dgvtxtStartSiteColumn.HeaderText = "起始站点";
            dgvtxtStartSiteColumn.Name = "dgvtxtStartSiteColumn";
            dgvtxtStartSiteColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtStartSiteColumn);

            DataGridViewTextBoxColumn dgvtxtDestinationSiteColumn = new DataGridViewTextBoxColumn();
            dgvtxtDestinationSiteColumn.HeaderText = "目的站点";
            dgvtxtDestinationSiteColumn.Name = "dgvtxtDestinationSiteColumn";
            dgvtxtDestinationSiteColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDestinationSiteColumn);

            DataGridViewButtonColumn dgvbtnCarRun = new DataGridViewButtonColumn();
            dgvbtnCarRun.HeaderText = "Car启动";
            dgvbtnCarRun.Name = "dgvbtnCarRun";
            dgvbtnCarRun.FlatStyle = FlatStyle.Popup;
            dgvbtnCarRun.UseColumnTextForButtonValue = true;
            dgvbtnCarRun.Text = "Run";
            dgvbtnCarRun.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvbtnCarRun);

            DataGridViewComboBoxColumn dgvcboCarStatus = new DataGridViewComboBoxColumn();
            dgvcboCarStatus.HeaderText = "Car状态";
            dgvcboCarStatus.Name = "dgvcboCarStatus";
            dgvcboCarStatus.FlatStyle = FlatStyle.Popup;
            dgvcboCarStatus.Items.Add("检测到障碍物");
            dgvcboCarStatus.Items.Add("到站");
            dgvcboCarStatus.Items.Add("管制");
            dgvcboCarStatus.Items.Add("电量不足");
            dgvcboCarStatus.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvcboCarStatus);

            DataGridViewButtonColumn dgvbtnCarStatusSend = new DataGridViewButtonColumn();
            dgvbtnCarStatusSend.HeaderText = "Car状态发送";
            dgvbtnCarStatusSend.Name = "dgvbtnCarStatusSend";
            dgvbtnCarStatusSend.FlatStyle = FlatStyle.Popup;
            dgvbtnCarStatusSend.UseColumnTextForButtonValue = true;
            dgvbtnCarStatusSend.Text = "StatusSend";
            dgvbtnCarStatusSend.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvbtnCarStatusSend);

            DataGridViewButtonColumn dgvbtnCarTaskDisable = new DataGridViewButtonColumn();
            dgvbtnCarTaskDisable.HeaderText = "解除任务";
            dgvbtnCarTaskDisable.Name = "dgvbtnCarTaskDisable";
            dgvbtnCarTaskDisable.FlatStyle = FlatStyle.Popup;
            dgvbtnCarTaskDisable.UseColumnTextForButtonValue = true;
            dgvbtnCarTaskDisable.Text = "Disable";
            dgvbtnCarTaskDisable.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvbtnCarTaskDisable);

            DataGridViewTextBoxColumn dgvtxtDeviceBatteryPowerColumn = new DataGridViewTextBoxColumn();
            dgvtxtDeviceBatteryPowerColumn.HeaderText = "电量";
            dgvtxtDeviceBatteryPowerColumn.Name = "dgvtxtDeviceBatteryPowerColumn";
            dgvtxtDeviceBatteryPowerColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtDeviceBatteryPowerColumn);

            DataGridViewTextBoxColumn dgvtxtCarRunPathColumn = new DataGridViewTextBoxColumn();
            dgvtxtCarRunPathColumn.HeaderText = "运行路径";
            dgvtxtCarRunPathColumn.Name = "dgvtxtCarRunPathColumn";
            dgvtxtCarRunPathColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
            dgv.Columns.Add(dgvtxtCarRunPathColumn);

            dgv.Columns[0].Visible = false;
        }


        //下拉菜单立即响应
        private void dgvDeviceOperate_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            if(dgvDeviceOperate.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1)
            {
                SendKeys.Send("{F4}");
            }
        }

        private void dgvCarSimulate_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvCarSimulate.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && e.RowIndex != -1)
            {
                SendKeys.Send("{F4}");
            }
        }

        //添加一行新数据
        private void AddMsgToDgvShow(DataGridView dgv,string deviceIepStr,string serverIepStr, DisplayTypeSekect dts)
        {
            switch (dts)
            {
                case DisplayTypeSekect.CarTestType:
                    {
                        using (DataGridViewRow dgvAddRow = new DataGridViewRow())
                        {
                            int index = dgv.RowCount;
                            dgvAddRow.CreateCells(dgv);

                            //序号
                            dgvAddRow.Cells[0].Value = index + 1;
                            //设备ID
                            dgvAddRow.Cells[1].Value = "Car" + dgvAddRow.Cells[0].Value.ToString();
                            //MAC
                            dgvAddRow.Cells[2].Value = index + 1;
                            //IP
                            dgvAddRow.Cells[3].Value = index + 1;
                            //连接地址
                            dgvAddRow.Cells[4].Value = index + 1;
                            //操作地址
                            dgvAddRow.Cells[6].Value = index + 1;
                            //数量
                            dgvAddRow.Cells[7].Value = index + 1;
                            //待发送内容
                            dgvAddRow.Cells[8].Value = index + 1;
                            //应答信息
                            dgvAddRow.Cells[10].Value = index + 1;

                            dgv.Rows.Insert(index, dgvAddRow);
                        }
                        break;
                    }
                case DisplayTypeSekect.CarSimulateType:
                    {
                        break;
                    }
                case DisplayTypeSekect.defaultType:
                    {
                        break;
                    }
                default:break;
            }
        }

        //测试添加数据
        private void CarTestAddMsgToDgvShow()
        {
            string iep = txtDeviceIp.Text + "+" + txtDevicePort.Text;
            communicationServer.Connect(iep);
            AddMsgToDgvShow(dgvDeviceOperate, "111", "222", DisplayTypeSekect.CarTestType);
        }

        private void btnDeviceInfoAdd_Click(object sender, EventArgs e)
        {
            switch (showMark)
            {
                case 1:
                {   
                        string iep = txtDeviceIp.Text + "+" + txtDevicePort.Text;
                        communicationServer.Connect(iep);
                        AddMsgToDgvShow(dgvDeviceOperate, "111", "222", DisplayTypeSekect.CarTestType);
                        break;
                }
                case 2:
                    {
                        AddMsgToDgvShow(dgvDeviceOperate, "111", "222", DisplayTypeSekect.CarSimulateType);
                        break;
                    }
                case 3:
                    {
                        break;
                    }
                default:break;
            }
        }

        //重新绘制左侧固定列并显示序号
        private void dgvDeviceOperate_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            Rectangle rowHeaderBounds = new Rectangle(2, e.RowBounds.Top, this.dgvDeviceOperate.RowHeadersWidth - 2, e.RowBounds.Height - 1);
            using (Brush backBrush = new SolidBrush(SystemColors.Control))
            {
                e.Graphics.FillRectangle(backBrush, rowHeaderBounds);
            }
            if(e.RowIndex >=dgvDeviceOperate.FirstDisplayedScrollingRowIndex)
            {
                using (SolidBrush b = new SolidBrush(dgvDeviceOperate.RowHeadersDefaultCellStyle.ForeColor))
                {
                    int linen = 0;
                    linen = e.RowIndex + 1;
                    string line = linen.ToString();
                    e.Graphics.DrawString(line, e.InheritedRowStyle.Font, b, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);
                    SolidBrush n = new SolidBrush(Color.Red);
                }
            }
        }

        private void dgvCarSimulate_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            Rectangle rowHeaderBounds = new Rectangle(2, e.RowBounds.Top, this.dgvCarSimulate.RowHeadersWidth - 2, e.RowBounds.Height - 1);
            using (Brush backBrush = new SolidBrush(SystemColors.Control))
            {
                e.Graphics.FillRectangle(backBrush, rowHeaderBounds);
            }
            if (e.RowIndex >= dgvCarSimulate.FirstDisplayedScrollingRowIndex)
            {
                using (SolidBrush b = new SolidBrush(dgvCarSimulate.RowHeadersDefaultCellStyle.ForeColor))
                {
                    int linen = 0;
                    linen = e.RowIndex + 1;
                    string line = linen.ToString();
                    e.Graphics.DrawString(line, e.InheritedRowStyle.Font, b, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);
                    SolidBrush n = new SolidBrush(Color.Red);
                }
            }
        }

        //处理DGV中的按钮点击事件
        private void dgvDeviceOperate_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            string msg = string.Empty;

            //当表中无有效数据时 直接返回
            if(e.ColumnIndex <0 || e.RowIndex <0)
            {
                return;
            }

            //当点击到Send按钮时,产生点击事件
            if(dgvDeviceOperate.Columns[e.ColumnIndex].Name == "dgvbtnSend")
            {
                string sendMsg = string.Empty;
               // string 
            }
        }

        private void dgvCarSimulate_CellClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        //显示测试
        private void tlsbtnCartest_Click(object sender, EventArgs e)
        {
            showMark = 1;
            Size InitialSize = new Size((int)DgvSize.InitialWidth, (int)DgvSize.InitialHeigh);
            Size defaultSize = new Size((int)DgvSize.DefaultWidth, (int)DgvSize.DefaultHeigh);
            dgvDeviceOperate.Size = InitialSize;
            dgvCarSimulate.Size = defaultSize;

            dgvDeviceOperate.Left = (int)DgvPosition.InitialLeft;
            dgvDeviceOperate.Top = (int)DgvPosition.InitialTop;

            dgvCarSimulate.Visible = false;
            dgvCarSimulate.Enabled = false;

            dgvDeviceOperate.Visible = true;
            dgvDeviceOperate.Enabled = true;

            lblIp.Visible = true;
            txtDeviceIp.Visible = true;
            txtDeviceIp.Enabled = true;

            lblPort.Visible = true;
            txtDevicePort.Visible = true;
            txtDevicePort.Enabled = true;

            lblMac.Visible = true;
            txtDeviceMac.Visible = true;
            txtDeviceMac.Enabled = true;

            btnDeviceInfoAdd.Visible = true;
            btnDeviceInfoAdd.Enabled = true;

            gpbDeviceInfo.Visible = true;
            gpbDeviceOperate.Visible = true;

            DgvCarTestDisplaySetting(dgvDeviceOperate);
        }

        //显示模拟
        private void tlsbtnCarSimulate_Click(object sender, EventArgs e)
        {
            showMark = 2;
            Size InitialSize = new Size((int)DgvSize.InitialWidth, (int)DgvSize.InitialHeigh);
            Size defaultSize = new Size((int)DgvSize.DefaultWidth, (int)DgvSize.DefaultHeigh);
            dgvDeviceOperate.Size = defaultSize;
            dgvCarSimulate.Size = InitialSize;

            dgvDeviceOperate.Left = (int)DgvPosition.InitialLeft;
            dgvDeviceOperate.Top = (int)DgvPosition.InitialTop;

            dgvCarSimulate.Visible = true;
            dgvCarSimulate.Enabled = true;

            dgvDeviceOperate.Visible = false;
            dgvDeviceOperate.Enabled = false;

            lblIp.Visible = true;
            txtDeviceIp.Visible = true;
            txtDeviceIp.Enabled = true;

            lblPort.Visible = true;
            txtDevicePort.Visible = true;
            txtDevicePort.Enabled = true;

            lblMac.Visible = true;
            txtDeviceMac.Visible = true;
            txtDeviceMac.Enabled = true;

            btnDeviceInfoAdd.Visible = true;
            btnDeviceInfoAdd.Enabled = true;

            gpbDeviceInfo.Visible = true;
            gpbDeviceOperate.Visible = true;

            DgvCarTestDisplaySetting(dgvCarSimulate);
        }

        private void Car_Test_FormClosing(object sender, FormClosingEventArgs e)
        {
            showMark = 3;

            Size defaultSize = new Size((int)DgvSize.DefaultWidth, (int)DgvSize.DefaultHeigh);
            dgvDeviceOperate.Size = defaultSize;
            dgvCarSimulate.Size = defaultSize;

            dgvDeviceOperate.Left = (int)DgvPosition.InitialLeft;
            dgvDeviceOperate.Top = (int)DgvPosition.InitialTop;

            dgvCarSimulate.Visible = false;
            dgvCarSimulate.Enabled = false;

            dgvDeviceOperate.Visible = false;
            dgvDeviceOperate.Enabled = false;

            lblIp.Visible = false;
            txtDeviceIp.Visible = false;
            txtDeviceIp.Enabled = false;

            lblPort.Visible = false;
            txtDevicePort.Visible = false;
            txtDevicePort.Enabled = false;

            lblMac.Visible = false;
            txtDeviceMac.Visible = false;
            txtDeviceMac.Enabled = false;

            btnDeviceInfoAdd.Visible = false;
            btnDeviceInfoAdd.Enabled = false;

            gpbDeviceInfo.Visible = false;
            gpbDeviceOperate.Visible = false;
        }
    }
}

实现了动态增加行以及对于表格中的按钮的事件响应

实现了左边固定列显示行号。

下面是FInsTCP 命令的相关

/// <summary>
        /// 封装发送的数据帧
        /// </summary>
        /// <param name="CmdCode">标记发送类型</param>
        /// <param name="ServerNode">服务器节点</param>
        /// <param name="wrMark">标记Fins帧的读写类型</param>
        /// <param name="wrRegisterInfo">需要操作的寄存器的信息,包括地址功能码、起始字地址、起始位地址、个数</param>
        /// <param name="wrSendMsg">待写入的数据</param>
        //public AGVMessage(string beginChr, string packageID, string commandName, string body, string endChr)
        public AGVMessage(string CmdCode, string ServerNode,string wrMark,string wrRegisterInfo,string wrSendMsg)
        {
            #region 
            //this.BeginChr = beginChr;
            //this.PackageID = packageID;
            //this.CommandName = commandName;
            //this.EndChr = endChr;
            //this.Body = body;
            //this.PackageLength = (11 + body.Length).ToString().PadLeft(3, '0');
            //this.CheckSum = NetworkHelper.GetCheckSum(this.PackageLength + this.PackageID + this.CommandName + this.Body);
            //this.Data = this.BeginChr + this.PackageLength + this.PackageID + this.CommandName + this.Body + this.CheckSum + this.EndChr; 
            #endregion

            string localIp = GetLocalHostIp();           
            if(localIp != null)
            {
                string[] localIpSplit = localIp.Split('.');
                string firstStr = "80000200";
                string SecondStr = "0000";
                this.FinsHeader = "FINS";
                this.FinsServerNode = ServerNode;
                this.FinsClietNode = localIpSplit[3];
                this.FinsCmd = CmdCode;
                if (wrMark == "0101")//读指令
                {
                    //Fins读指令帧
                    this.FinsBody = firstStr + ServerNode + SecondStr + localIpSplit[3] + SecondStr + wrMark + wrRegisterInfo;
                    this.FinsPackageLength = (8 + this.FinsBody.Length).ToString().PadLeft(8,'0');
                    this.FinsData = FinsHeader + FinsPackageLength + FinsCmd + "00000000" + FinsBody;
                }
                else if(wrMark =="0102")//写指令
                {
                    this.FinsBody = firstStr + ServerNode + SecondStr + localIpSplit[3] + SecondStr + wrMark + wrRegisterInfo + wrSendMsg;
                    this.FinsPackageLength = (8 + this.FinsBody.Length).ToString().PadLeft(8, '0');
                    this.FinsData = FinsHeader + FinsPackageLength + FinsCmd + "00000000" + FinsBody;
                }
                
            }
        }

        public byte[] GetBytesByAGVMessage(string data)
        {
            if(data.Length %2 ==0)
            {
                List<byte> list = new List<byte>();
                for (int i =0;i<data.Length/2;i++)
                {
                    string singleWord = data.Substring(2 * i, 2);
                    byte lowByte;
                    byte highByte = SingleWordToDoubleBytes(singleWord, out lowByte);
                    list.Add(highByte);
                    list.Add(lowByte);
                }
                return list.ToArray();
            }
            else
            {
                byte[] defaultBytes = new byte[2] { 0,0};
                return defaultBytes;
            }
        }

        //获取网段
        public string GetNetSegmentByServer()
        {
            string serverIp = GetLocalHostIp();
            string returnStr = string.Empty;
            IPAddress ipAddress;
            if(IPAddress.TryParse(serverIp,out  ipAddress))
            {
                int i = serverIp.LastIndexOf(".");
                returnStr = serverIp.Substring(0, i);
                return returnStr;
            }
            return null;
        }
        //获取连接的地址
        public string GetConnectNetIp(string node)
        {
            string connectNetIp = string.Empty;
            return GetNetSegmentByServer() + node;
        }

        /// <summary>
        /// 获取本地IP地址
        /// </summary>
        /// <returns>获取的IP地址</returns>
        private string  GetLocalHostIp()
        {
            try
            {
                string serverName = Dns.GetHostName();
                return NetworkHelper.GetIpByHostName(serverName);
            }
            catch
            {
                return string.Empty;
            }
        }

        /// <summary>
        /// 拆分单字字符串为双字节
        /// </summary>
        /// <param name="singleWord">单字字符串</param>
        /// <param name="lowByte">地位字节</param>
        /// <returns>高位字节数</returns>
        private static byte SingleWordToDoubleBytes(string singleWord, out byte lowByte)
        {
            int r;
            byte highByte;
            if(int.TryParse(singleWord,out r) ==true)
            {
                highByte = Convert.ToByte((r >> 8) & 0xff);
                lowByte = Convert.ToByte(r & 0x00ff);
            }
            else
            {
                highByte = default(byte);
                lowByte = default(byte);
            }
            return highByte;
        }

        /// <summary>
        /// 将双字节数据整合为单字字符串
        /// </summary>
        /// <param name="bytehigh">高位字节</param>
        /// <param name="bytelow">低位字节</param>
        /// <returns>单字字符串</returns>
        private static string DoubleBytesToSingleWord(byte bytehigh,byte bytelow)
        {
            int r = (bytehigh << 8) + bytelow;
            string str = Convert.ToString(r);
            return str;
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值