Example #1
0
        internal void OnVdfSignalChanged(VdfSignal signal)
        {
            var subFunction = SelectedEntity <SubFunction>();

            if (subFunction != null && subFunction.VdfMessage != null)
            {
                bool ok = subFunction.VdfMessage.SignalTable.ContainsValue(signal);
                if (ok)
                {
                    mainForm.UpdateSubFunction(subFunction);
                }
            }
        }
Example #2
0
        // 更新数据
        private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (SubFunction == null)
            {
                return;
            }

            int row    = e.RowIndex;
            int column = e.ColumnIndex;
            var cell   = dataGridView[column, row];

            if (cell.ReadOnly)
            {
                return;
            }

            // 不需要解码
            if (!needSendParsing(SubFunction))
            {
                // 只有用户编辑的单元格才会同步到子功能
                var    cellValue = cell.Value;
                string value     = "00";
                if (cellValue != null)
                {
                    value = cellValue.ToString();
                }
                else
                {
                    dataGridView[column, row].Value = value;
                }
                SubFunction.Data[row - 1] = Utils.HexToByte(value);

                //更新第一行
                UpdateFirstRow();
            }
            else //需要进行解码
            {
                // 获取解码值
                VdfSignal signal = cell.Tag as VdfSignal;
                //Debug.Assert(signal != null);

                // 更新值
                string cellValue = string.Empty;
                if (cell.Value != null)
                {
                    cellValue = cell.Value.ToString();
                }
                VdfDecoder.Decode(SubFunction.Data, signal, cellValue);
                UpdateFirstRow();
            }
        }
Example #3
0
        // 进行校验
        private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            var cell = dataGridView[e.ColumnIndex, e.RowIndex];

            if (cell.ReadOnly)
            {
                return;
            }

            if (!needSendParsing(SubFunction))
            {
                //保证输入的数值,是16进制值
                try
                {
                    Convert.ToInt32(e.FormattedValue.ToString(), 16);
                }
                catch (Exception)
                {
                    MessageBox.Show("输入的字符必须是Hex字符", "校验出错", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    e.Cancel = true;
                }
            }
            else
            {
                VdfSignal signal = cell.Tag as VdfSignal;
                //signal居然可能为空

                // 这儿只是进行验证,不更新数据
                try
                {
                    var copy = new List <byte>();
                    copy.AddRange(SubFunction.Data);
                    VdfDecoder.Decode(copy, signal, e.FormattedValue.ToString());
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "校验出错",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    e.Cancel = true;
                }
            }
        }
Example #4
0
        private DataGridViewCell NewDataCell(VdfSignal signal, SubFunction subFunction, int row)
        {
            var desc = signal.VdfValueDesc;

            if (desc is VdfBcdValueDesc || desc is VdfAsciiValueDesc)
            {
                DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                cell.Value = VdfEncoder.Encode(subFunction.Data, signal);
                cell.Tag   = signal;
                return(cell);
            }
            else if (desc is VdfPhyValueDesc)
            {
                DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                cell.Value = VdfEncoder.Encode(subFunction.Data, signal);

                //设置单位
                dataGridView.Rows[row].Cells["ColumnUnit"].Value
                         = (desc as VdfPhyValueDesc).Unit;
                cell.Tag = signal;
                return(cell);
            }
            else if (desc is VdfXncodeValueDesc)
            {
                DataGridViewComboBoxCell cell       = new DataGridViewComboBoxCell();
                VdfXncodeValueDesc       xncodeDesc = (VdfXncodeValueDesc)desc;

                foreach (var entry in xncodeDesc.EntryTable)
                {
                    cell.Items.Add(entry.Value);
                }
                cell.Value = VdfEncoder.Encode(subFunction.Data, signal); //这儿需要进行解码
                cell.Tag   = signal;
                return(cell);
            }
            else
            {
                throw new ArgumentException("Unsupported VdfValueDesc Type: " + signal.GetType().Name);
            }
        }