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();
}
{
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();
}