C#做的一个窗体解析DBC文件,实现了编辑修改

public partial class Form1 : Form
    {
        string fName = "";//DBC文件路径
        private string fileName = "";//新建文件的路径
        private StringBuilder preBO_ = new StringBuilder();//第一条BO_前的所有内容
        private StringBuilder postSG_ = new StringBuilder();//最后一条SG_后的所有内容
        private bool flag = false;//标记表格内容是否被修改过
        private string firstMessage;//第一条BO_包含的内容
        private string lastSignal;//最后一条SG_包含的内容
        private string contextBefEdit;//保存修改前的文本内容(一行)
        private string contextAftEdit;//保存修改后的文本内容(一行)
        private List<Signal> signalList;//保存signal的信息
        private List<Message> messageList;//保存message的信息
        private int currentRow;//当前选中的message所在的行
        private DataSet MyDBCData = new DataSet();
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 存放Message信息
        /// </summary>
        public class Message
        {
            public string Name { set; get; }
            public long Id { set; get; }//Message_Id
            public string Type { set; get; } = "扩展帧";
            public byte Size { set; get; }
            public string Transmitter { set; get; } = "Vector__XXX";//发送者 默认为 Vector__XXX(代表没有发送者)
            public int PrimaryId { set; get; } //主键ID
        }


        /// <summary>
        /// 存放Signal信息
        /// </summary>
        public class Signal
        {
            public long Id { set; get; }//Message_Id
            public string Name { set; get; }//名称
            public string Mold { set; get; } = "signal";
            public byte Order { set; get; }//格式
            public string Type { set; get; }//值类型
            public int StartBit { set; get; }//起始位
            public byte Size { set; get; }//长度
            public double Factor { set; get; }//因子
            public double Offset { set; get; }//偏移量
            public double Maxinum { set; get; }//最大
            public double Mininum { set; get; }//最小
            public string Unit { set; get; }//单位
            public string Receiver { set; get; } = "Vector_xxx";//接收者
            public string Multiplexer { set; get; }//模式
            public int PrimaryId { set; get; }//主键ID
        }
        /// <summary>
        /// 打开DBC文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                fileName = "";
                fName = openFileDialog1.FileName;        //获取DBC文件路径
                label1.Text = fName;                            //显示到窗体
                DBCFileParser MyDBC = new DBCFileParser();      //例化DBC解析
                MyDBC.DBCFileAnalytically(fName, ref MyDBCData);//调用DBC解析
                messageList = GetMessage();
                signalList = GetSignal();
                BingMessage();
                Message message = messageList[0];
                firstMessage = "BO_ " + message.Id + " " + message.Name + ": " + message.Size + " " + message.Transmitter;
                SetLastSignal();
                SetContext();
                GetFallowSignal();
            }
        }


        /// <summary>
        /// 保存文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            if (fileName != null && fileName != "")
            {
                preBO_.Clear();
                postSG_.Clear();
                SetPreBo();
                SaveDBCFile(fileName);
            }
            else if (fName != null && fName != "")
            {
                SaveDBCFile(fName);
            }
            label1.Text = "已保存";
        }
        /// <summary>
        /// 保存文件并退出窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            button2_Click(sender, e);
            this.Close();
        }
        /// <summary>
        /// 退出窗口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }


        /// <summary>
        /// 新建DBC文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            BuildDBCFile();
        }


        private void treeView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            dataGridView1.DataSource = MyDBCData.Tables[treeView1.SelectedNode.Text].DefaultView;
        }


        /// <summary>
        /// 点击单元行促发显示signal的方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            AddNewGrid(messageList);
            label1.Text = fName == null ? fileName : fName;
            if (currentRow == dataGridView1.CurrentCell.RowIndex)//当前行的行号和点击行的行号相同则停止方法
            {
                return;
            }
            GetFallowSignal();
        }


        /// <summary>
        /// 开始编辑Message
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            contextBefEdit = dataGridView1.CurrentCell.Value == null ? "" : dataGridView1.CurrentCell.Value.ToString();
        }
        /// <summary>
        /// 结束编辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            Validate();
        }


        /// <summary>
        /// 数据错误
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            MessageBox.Show("错误的Message数据");
            dataGridView1.CancelEdit();
        }
        /// <summary>
        /// 点击signal的最后一项时添加空白格
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView2_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            AddNewGrid(GetCurrentSignal());
        }


        /// <summary>
        /// 开始编辑Signal
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView2_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            label1.Text = fName == null ? fileName : fName;
            int i = dataGridView1.CurrentCell.RowIndex;
            contextBefEdit = dataGridView2.CurrentCell.Value == null ? "" : dataGridView2.CurrentCell.Value.ToString();
            dataGridView2.CurrentCell.Value = contextBefEdit.Trim();
            if (dataGridView1.Rows[i].Cells["Id"].Value.ToString().Length < 10)
            {
                MessageBox.Show("请先完成message的信息");
            }
        }
        /// <summary>
        /// 结束编辑Signal
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            contextAftEdit = dataGridView2.CurrentCell.Value == null ? "" : dataGridView2.CurrentCell.Value.ToString().Trim();
            if (contextBefEdit == contextAftEdit)
            {
                return;
            }
            int i = dataGridView2.CurrentCell.RowIndex;
            int PrimaryId = Convert.ToInt32(dataGridView2.Rows[i].Cells["PrimaryId"].Value);
            foreach (Signal signal in signalList)
            {
                if (PrimaryId == signal.PrimaryId)
                {
                    signal.Factor = Convert.ToDouble(dataGridView2.Rows[i].Cells["Factor"].Value);
                    signal.Offset = Convert.ToDouble(dataGridView2.Rows[i].Cells["Offset"].Value);
                    signal.StartBit = Convert.ToInt32(dataGridView2.Rows[i].Cells["StartBit"].Value);
                    signal.Size = Convert.ToByte(dataGridView2.Rows[i].Cells["Size"].Value);
                    signal.Order = Convert.ToByte(dataGridView2.Rows[i].Cells["Order"].Value);
                    signal.Type = Convert.ToString(dataGridView2.Rows[i].Cells["Type"].Value);
                    signal.Mininum = Convert.ToDouble(dataGridView2.Rows[i].Cells["Mininum"].Value);
                    signal.Maxinum = Convert.ToDouble(dataGridView2.Rows[i].Cells["Maxinum"].Value);
                    signal.Name = Convert.ToString(dataGridView2.Rows[i].Cells["Name"].Value);
                    signal.Unit = Convert.ToString(dataGridView2.Rows[i].Cells["Unit"].Value);
                    signal.Multiplexer = dataGridView2.Rows[i].Cells["Multiplexer"] == null ? "" : " " + dataGridView2.Rows[i].Cells["Multiplexer"].Value;
                    signal.Multiplexer = dataGridView2.Rows[i].Cells["Multiplexer"].Value.ToString().Trim() == "" ? "" : dataGridView2.Rows[i].Cells["Multiplexer"].Value.ToString();
                    //signal.Receiver = Convert.ToString(dataGridView2.Rows[i].Cells["Receiver"].Value);
                }
            }
            flag = true;
        }
        /// <summary>
        /// 数据错误
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView2_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            MessageBox.Show("错误的Signal数据");
            dataGridView2.CancelEdit();
        }


        /// <summary>
        /// 点击Message的表格后显示对应的Signal的内容
        /// </summary>
        /// <param name="signalList">所有signal的集合</param>
        public void GetFallowSignal()
        {
            List<Signal> list = new List<Signal>();
            currentRow = dataGridView1.CurrentCell.RowIndex;//获取当前行行号
            long id = Convert.ToInt64(dataGridView1.Rows[currentRow].Cells["id"].Value);//获取当前行的MessageId
            foreach (Signal signal in signalList)
            {
                if (id == signal.Id)
                {
                    Signal s = new Signal()
                    {
                        Id = signal.Id,
                        Multiplexer = signal.Multiplexer,
                        StartBit = signal.StartBit,
                        Size = signal.Size,
                        Name = signal.Name,
                        Order = signal.Order,
                        Type = signal.Type,
                        Offset = signal.Offset,
                        Mininum = signal.Mininum,
                        Maxinum = signal.Maxinum,
                        Unit = signal.Unit,
                        Receiver = signal.Receiver,
                        Factor = signal.Factor
                    };
                    list.Add(signal);
                }
            }
            int k = signalList.Count;
            int j = list.Count;
            if (j < 10)
            {
                for (int i = j; i < 10; i++)
                {
                    list.Add(new Signal() { Id = id, PrimaryId = k, Type = "+" });
                    signalList.Add(new Signal() { Id = id, PrimaryId = k, Type = "+" });
                    k++;
                }
            }
            BingSignal(list);
        }


        /// <summary>
        /// 填充 lastSignal
        /// </summary>
        private void SetLastSignal()
        {
            int i = messageList.Count - 1;
            int j = signalList.Count - 1;
            if (i < 0 || j < 0)
            {
                lastSignal = "";
                return;
            }
            if (messageList[i].Id == signalList[j].Id)
            {
                if (signalList[j].Unit == "m/s")
                {
                    lastSignal = "SG_ " + signalList[j].Name + signalList[j].Multiplexer + " : " + signalList[j].StartBit + "|"
                        + signalList[j].Size + "@" + signalList[j].Order + signalList[j].Type + " (" + signalList[j].Factor + ","
                        + signalList[j].Offset + ") [" + signalList[j].Mininum + "|" + signalList[j].Maxinum + "] \""
                        + signalList[j].Unit + "? " + signalList[j].Receiver;
                }
                else
                {
                    lastSignal = "SG_ " + signalList[j].Name + signalList[j].Multiplexer + " : " + signalList[j].StartBit + "|"
                        + signalList[j].Size + "@" + signalList[j].Order + signalList[j].Type + " (" + signalList[j].Factor + ","
                        + signalList[j].Offset + ") [" + signalList[j].Mininum + "|" + signalList[j].Maxinum + "] \""
                        + signalList[j].Unit + "\" " + signalList[j].Receiver;
                }
            }
            else
            {
                lastSignal = "BO_ " + messageList[i].Id + " " + messageList[i].Name + ": "
                                + messageList[i].Size + " " + messageList[i].Transmitter;
            }
        }


        /// <summary>
        /// 绑定Message数据源
        /// </summary>
        private void BingMessage()
        {
            //dataGridView1.Columns.Add("Name", "条目名称");
            //dataGridView1.Columns.Add("Id", "CAN_ID");
            //dataGridView1.Columns.Add("Size", "DLC");
            dataGridView1.Columns.Add("Type", "类型");
            //dataGridView1.Columns.Add("Transmitter", "发送者");
            //dataGridView1.Columns.Add("PrimaryId", "PrimaryId");
            dataGridView1.DataSource = null;//清空数据源
            dataGridView1.DataSource = messageList;//绑定数据源list并修改列名
            dataGridView1.Columns["PrimaryId"].Visible = false;
            dataGridView1.Columns["name"].HeaderText = "条目名称";
            dataGridView1.Columns["Id"].HeaderText = "CAN_ID";
            dataGridView1.Columns["Size"].HeaderText = "DLC";//大小端
            dataGridView1.Columns["Type"].HeaderText = "类型";
            dataGridView1.Columns["Transmitter"].HeaderText = "发送者";




        }


        /// <summary>
        /// 绑定Signal数据源
        /// </summary>
        private void BingSignal(IList list)
        {
            dataGridView2.DataSource = null;//清空数据源
            dataGridView2.DataSource = list;//绑定数据源list并修改列名
            dataGridView2.Columns["PrimaryId"].Visible = false;
            dataGridView2.Columns["name"].HeaderText = "型号名称";
            dataGridView2.Columns["mold"].HeaderText = "类型";
            dataGridView2.Columns["order"].HeaderText = "格式";//大小端
            dataGridView2.Columns["Type"].HeaderText = "模式";
            dataGridView2.Columns["startBit"].HeaderText = "起始位";
            dataGridView2.Columns["size"].HeaderText = "长度";
            dataGridView2.Columns["factor"].HeaderText = "因子";
            dataGridView2.Columns["offset"].HeaderText = "偏移";
            dataGridView2.Columns["maxinum"].HeaderText = "最大值";
            dataGridView2.Columns["mininum"].HeaderText = "最小值";
            dataGridView2.Columns["unit"].HeaderText = "单位";
            dataGridView2.Columns["multiplexer"].HeaderText = "备注";
            dataGridView2.Columns["mold"].ReadOnly = true;
        }




        /// <summary>
        /// 获取Message的集合
        /// </summary>
        /// <returns></returns>
        private List<Message> GetMessage()
        {
            dataGridView1.DataSource = MyDBCData.Tables["Message"].DefaultView;
            List<Message> messageList = new List<Message>();
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                Message message = new Message()
                {
                    PrimaryId = i,
                    Id = Convert.ToInt64(dataGridView1.Rows[i].Cells["Message_ID"].Value),
                    Size = Convert.ToByte(dataGridView1.Rows[i].Cells["Message_Size"].Value),
                    Name = (string)dataGridView1.Rows[i].Cells["Message_Name"].Value,
                    Transmitter = (string)dataGridView1.Rows[i].Cells["Message_Transmitter"].Value
                };
                //将不是空白行的项添加到集合中
                if (message.Id != 0)
                {
                    messageList.Add(message);
                }
            }
            return messageList;
        }


        /// <summary>
        /// 获取Signal的集合
        /// </summary>
        /// <returns></returns>
        private List<Signal> GetSignal()
        {
            dataGridView2.DataSource = MyDBCData.Tables["Signal"].DefaultView;
            List<Signal> signalList = new List<Signal>();
            for (int i = 0; i < dataGridView2.RowCount; i++)
            {
                Signal signal = new Signal()
                {
                    //转换得到的数据并添加到signal中
                    //signal.flag = 0L;
                    PrimaryId = i,
                    Id = Convert.ToInt64(dataGridView2.Rows[i].Cells["Message_ID"].Value),
                    Factor = Convert.ToDouble(dataGridView2.Rows[i].Cells["Signal_Factor"].Value),
                    Offset = Convert.ToDouble(dataGridView2.Rows[i].Cells["Signal_Offset"].Value),
                    StartBit = Convert.ToInt32(dataGridView2.Rows[i].Cells["Signal_Start_Bit"].Value),
                    Size = Convert.ToByte(dataGridView2.Rows[i].Cells["Signal_Size"].Value),
                    Order = Convert.ToByte(dataGridView2.Rows[i].Cells["Signal_Byte_Order"].Value),
                    Type = Convert.ToString(dataGridView2.Rows[i].Cells["Signal_Value_Type"].Value),
                    Mininum = Convert.ToDouble(dataGridView2.Rows[i].Cells["Signal_Minimum"].Value),
                    Maxinum = Convert.ToDouble(dataGridView2.Rows[i].Cells["Signal_Maximum"].Value),
                    Name = Convert.ToString(dataGridView2.Rows[i].Cells["Signal_Name"].Value),
                    Unit = Convert.ToString(dataGridView2.Rows[i].Cells["Signal_Unit"].Value),
                    Multiplexer = dataGridView2.Rows[i].Cells["Signal_Multiplexer_Indicator"] == null ? "" : "" + dataGridView2.Rows[i].Cells["Signal_Multiplexer_Indicator"].Value,
                    Receiver = Convert.ToString(dataGridView2.Rows[i].Cells["Signal_Receiver"].Value)
                };


                //添加到集合中并删除空白项
                if (signal.Id != 0)
                {
                    signalList.Add(signal);
                }
            }
            return signalList;
        }
        /// <summary>
        /// 保存DBC文件
        /// </summary>
        /// <param name="fileName"></param>
        private void SaveDBCFile(string fileName)
        {
            if (!flag)
            {
                return;
            }
            StreamWriter writer = new StreamWriter(fileName);
            StringBuilder DBCContext = new StringBuilder();
            DBCContext.Append(preBO_);
            foreach (Message message in messageList)
            {
                if (message.Id < 0)
                {
                    continue;
                }
                string context = "";
                context = "BO_ " + message.Id + " " + message.Name + ": " + message.Size + " " + message.Transmitter;
                DBCContext.Append(context + "\n");
                foreach (Signal signal in signalList)
                {
                    if (signal.Name == null || signal.Name == "")
                    {
                        continue;
                    }
                    if (signal.Id == message.Id)
                    {
                        if (signal.Unit == "m/s")
                        {
                            context = " SG_ " + signal.Name + signal.Multiplexer + " : " + signal.StartBit + "|"
                                + signal.Size + "@" + signal.Order + signal.Type + " (" + signal.Factor + ","
                                + signal.Offset + ") [" + signal.Mininum + "|" + signal.Maxinum + "] \""
                                + signal.Unit + "? " + signal.Receiver;
                        }
                        else
                        {
                            context = " SG_ " + signal.Name + signal.Multiplexer + " : " + signal.StartBit + "|"
                                + signal.Size + "@" + signal.Order + signal.Type + " (" + signal.Factor + ","
                                + signal.Offset + ") [" + signal.Mininum + "|" + signal.Maxinum + "] \""
                                + signal.Unit + "\" " + signal.Receiver;
                        }
                        DBCContext.Append(context + "\n");
                    }
                }
                if (message != messageList[messageList.Count - 1])
                {
                    DBCContext.Append("\n");
                }
            }
            DBCContext.Append(postSG_);
            writer.Write(DBCContext);
            writer.Close();
            flag = false;
        }
        /// <summary>
        /// 创建DBC文件
        /// </summary>
        private void BuildDBCFile()
        {
            fName = "";
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.FileName = "test";
            saveFileDialog1.InitialDirectory = Environment.CurrentDirectory;//默认目录
            saveFileDialog1.Filter = "DBC文件(*.dbc)|*.dbc";//可以保存的格式
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                fileName = saveFileDialog1.FileName;
                messageList = new List<Message>();
                signalList = new List<Signal>();
                for (int i = 0; i < 10; i++)
                {
                    messageList.Add(new Message() { Id = -i, PrimaryId = i });
                }
                BingMessage();
                BingSignal(signalList);
                GetFallowSignal();
            }
        }


        /// <summary>
        /// 设置preBO_和 postSG_
        /// </summary>
        private void SetContext()
        {
            StreamReader reader = new StreamReader(new FileStream(fName, FileMode.Open, FileAccess.Read));
            string lastMessage = "BO_ " + messageList[messageList.Count - 1].Id + " " + messageList[messageList.Count - 1].Name +
                ": " + messageList[messageList.Count - 1].Size + " " + messageList[messageList.Count - 1].Transmitter;
            string context = "";
            while ((context = reader.ReadLine()) != null)
            {
                if (firstMessage.Equals(context.Trim()))
                {
                    break;
                }
                preBO_.Append(context + "\n");


            }
            bool flag = false;//标记是否为最后一条message信息
            while ((context = reader.ReadLine()) != null)
            {
                if (lastMessage.Equals(context.Trim()))
                {
                    flag = true;
                }
                if (lastSignal.Equals(context.Trim()) && flag)
                {
                    break;
                }


            }
            postSG_.Append(reader.ReadToEnd());
            reader.Close();
        }
        /// <summary>
        /// 获得当前datagridview2 的Signal信息
        /// </summary>
        private List<Signal> GetCurrentSignal()
        {
            List<Signal> list = new List<Signal>();
            for (int i = 0; i < dataGridView2.RowCount; i++)
            {
                Signal signal = new Signal()
                {
                    //转换得到的数据并添加到signal中
                    //signal.flag = 0L;
                    PrimaryId = Convert.ToInt32(dataGridView2.Rows[i].Cells["PrimaryId"].Value),
                    Id = Convert.ToInt64(dataGridView1.Rows[currentRow].Cells["id"].Value),
                    Factor = Convert.ToDouble(dataGridView2.Rows[i].Cells["Factor"].Value),
                    Offset = Convert.ToDouble(dataGridView2.Rows[i].Cells["Offset"].Value),
                    StartBit = Convert.ToInt32(dataGridView2.Rows[i].Cells["StartBit"].Value),
                    Size = Convert.ToByte(dataGridView2.Rows[i].Cells["Size"].Value),
                    Order = Convert.ToByte(dataGridView2.Rows[i].Cells["Order"].Value),
                    Type = Convert.ToString(dataGridView2.Rows[i].Cells["Type"].Value),
                    Mininum = Convert.ToDouble(dataGridView2.Rows[i].Cells["Mininum"].Value),
                    Maxinum = Convert.ToDouble(dataGridView2.Rows[i].Cells["Maxinum"].Value),
                    Name = (string)dataGridView2.Rows[i].Cells["Name"].Value,
                    Unit = (string)dataGridView2.Rows[i].Cells["Unit"].Value,
                    Multiplexer = dataGridView2.Rows[i].Cells["Multiplexer"] == null ? "" : "" + dataGridView2.Rows[i].Cells["Multiplexer"].Value,
                    Receiver = (string)dataGridView2.Rows[i].Cells["Receiver"].Value
                };
                list.Add(signal);
            }
            return list;
        }
        /// <summary>
        /// 添加新行
        /// </summary>
        /// <param name="list"></param>
        private void AddNewGrid(IList list)
        {
            int i = 0;
            int c = 0;
            int count = list.Count;
            if (list is List<Message>)
            {
                i = dataGridView1.CurrentCell.RowIndex;
                c = dataGridView1.CurrentCell.ColumnIndex;
                int k = messageList.Count;
                if (i == count - 1)
                {
                    for (int j = count; j < count + 10; j++)
                    {
                        list.Add(new Message() { Id = -j, PrimaryId = j });
                    }
                    BingMessage();
                    dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[c];
                }
            }
            else if (list is List<Signal>)
            {
                i = dataGridView2.CurrentCell.RowIndex;
                c = dataGridView2.CurrentCell.ColumnIndex;
                int k = signalList.Count;
                if (i == count - 1)
                {
                    for (int j = count; j < count + 10; j++)
                    {
                        list.Add(new Signal() { Id = Convert.ToInt64(dataGridView1.Rows[currentRow].Cells["Id"].Value), PrimaryId = k });
                        signalList.Add(new Signal() { Id = Convert.ToInt64(dataGridView1.Rows[currentRow].Cells["Id"].Value), PrimaryId = k });
                        k++;
                    }
                    BingSignal(list);
                    dataGridView2.CurrentCell = dataGridView2.Rows[i].Cells[c];
                }
            }
        }


        /// <summary>
        /// 结束编辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Validate()
        {
            contextAftEdit = dataGridView1.CurrentCell.Value == null ? "" : dataGridView1.CurrentCell.Value.ToString();
            if (contextBefEdit == contextAftEdit)
            {
                return;
            }
            int i = dataGridView1.CurrentCell.RowIndex;
            int PrimaryId = Convert.ToInt32(dataGridView1.Rows[i].Cells["PrimaryId"].Value);
            long id = Convert.ToInt64(dataGridView1.Rows[i].Cells["Id"].Value);
            int HeaderIndex = dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex].Index;
            
            if (HeaderIndex == 1)//如果修改项为CAN_ID 修改对应的signal并显示
            {
                try
                {
                    uint validateId = Convert.ToUInt32(id);
                }
                catch
                {
                    MessageBox.Show("Id的数据超出范围");
                    dataGridView1.CurrentCell.Value = contextBefEdit;
                    return;
                }
                foreach (Signal signal in signalList)
                {
                    if (signal.Id.ToString() == contextBefEdit)
                    {
                        signal.Id = Convert.ToInt64(contextAftEdit);
                    }
                }
                GetFallowSignal();
                foreach (Message message in messageList)
                {
                    if (message.Id.ToString() == contextAftEdit && PrimaryId != message.PrimaryId)
                    {
                        MessageBox.Show("重复的CAN_ID");
                        dataGridView1.CurrentCell.Value = contextBefEdit;
                        return;
                    }
                }
            }
            else if (HeaderIndex == 0)
            {
                foreach (Message message in messageList)
                {
                    if (message.Id != id && message.Name == contextAftEdit)
                    {
                        MessageBox.Show("重复的条目名称");
                        dataGridView1.CurrentCell.Value = contextBefEdit;
                        return;
                    }
                }
            }
            foreach (Message message in messageList)
            {
                if (PrimaryId == message.PrimaryId)
                {
                    message.Id = Convert.ToInt64(dataGridView1.Rows[i].Cells["ID"].Value);
                    message.Size = Convert.ToByte(dataGridView1.Rows[i].Cells["Size"].Value);
                    //message.signalSize = 0;
                    message.Name = (string)dataGridView1.Rows[i].Cells["Name"].Value;
                    message.Transmitter = (string)dataGridView1.Rows[i].Cells["Transmitter"].Value;
                }
            }
            flag = true;
        }


        private void SetPreBo()
        {
            StreamReader reader = new StreamReader(new FileStream(Environment.CurrentDirectory+ "/DBCFile.ini", FileMode.Open, FileAccess.Read));
            preBO_.Append(reader.ReadToEnd()+"\n\n");
            reader.Close();
        }
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值