private void ObservableObject_PropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     if (e.PropertyName == nameof(IsDirty))
     {
         IsDirtyChanged?.Invoke(this, null);
     }
 }
 private void toolStripMenuItem1_Click(object sender, EventArgs e)
 {
     dgv.Rows.Insert(_SelectedRowIndex, new DataGridViewRow());
     _IsDirty = true;
     if (IsDirtyChanged != null)
     {
         IsDirtyChanged.Invoke(this, new EventArgs());
     }
 }
Ejemplo n.º 3
0
        void DebounceDirtyChanged(Action a)
        {
            bool d = IsDirty;

            a();
            if (d != IsDirty)
            {
                IsDirtyChanged?.Invoke(this, EventArgs.Empty);
            }
        }
Ejemplo n.º 4
0
        private void OnTextChanged(object sender, System.EventArgs e)
        {
            IsDirty = true;
            IsDirtyChanged?.Invoke(true);
            int newMaxRowCharLength = ScintillaEditor.Lines.Count.ToString().Length;

            if (_maxRowCharLength == newMaxRowCharLength)
            {
                return;
            }
            ScintillaEditor.Margins[0].Width = ScintillaEditor.TextWidth(ScintillaNET.Style.LineNumber, new string('9', newMaxRowCharLength + 1));
            _maxRowCharLength = newMaxRowCharLength;
        }
        private void dataGridViewX1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            List <DataGridViewRow> deletedList = new List <DataGridViewRow>();

            foreach (DataGridViewRow row in _RowSubject.Keys)
            {
                if (!dgv.Rows.Contains(row))
                {
                    deletedList.Add(row);
                }
            }
            if (deletedList.Count > 0)
            {
                foreach (DataGridViewRow row in deletedList)
                {
                    _RowSubject.Remove(row);
                }
                _RawDeleted = _IsDirty = true;
                if (IsDirtyChanged != null)
                {
                    IsDirtyChanged.Invoke(this, new EventArgs());
                }
            }
        }
Ejemplo n.º 6
0
 public void OnIsDirtyChanged()
 {
     IsDirty = true;
     IsDirtyChanged?.Invoke(this);
 }
 /// <summary>
 /// Invokes handlers of the <see cref="IsDirtyChanged"/> event.
 /// </summary>
 protected virtual void NotifyIsDirtyChanged()
 {
     IsDirtyChanged?.Invoke(this, EventArgs.Empty);
 }
        private void dataGridViewX1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewRow row = dgv.Rows[e.RowIndex];

            #region 做IsDirty檢查
            if (_defaultValues.ContainsKey(row.Cells[e.ColumnIndex]) &&
                ("" + _defaultValues[row.Cells[e.ColumnIndex]]) != ("" + row.Cells[e.ColumnIndex].Value)    //把值用都轉成字串來比對相等,用string+object相加來省去null.ToString()的麻煩
                )
            {
                _DirtyCells.Add(row.Cells[e.ColumnIndex]);
            }
            else
            {
                if (_DirtyCells.Contains(row.Cells[e.ColumnIndex]))
                {
                    _DirtyCells.Remove(row.Cells[e.ColumnIndex]);
                }
            }
            if ((_DirtyCells.Count != 0) != _IsDirty)
            {
                _IsDirty |= (_DirtyCells.Count != 0);
                if (IsDirtyChanged != null)
                {
                    IsDirtyChanged.Invoke(this, new EventArgs());
                }
            }
            #endregion

            #region 判斷是否為科目名稱欄加入至集合中
            if (e.ColumnIndex == _SubjectNameIndex)
            {
                if (!string.IsNullOrEmpty("" + row.Cells[_SubjectNameIndex].Value))
                {
                    if (_RowSubject.ContainsKey(row))
                    {
                        _RowSubject[row] = row.Cells[_SubjectNameIndex].Value.ToString();
                    }
                    else
                    {
                        _RowSubject.Add(row, row.Cells[_SubjectNameIndex].Value.ToString());
                    }
                }
                else
                if (_RowSubject.ContainsKey(row))
                {
                    _RowSubject.Remove(row);
                }
            }
            #endregion

            #region 檢查整個 Row 的欄位

            row.Cells[_SubjectNameIndex].ErrorText = "";
            if (!row.IsNewRow && string.IsNullOrEmpty("" + row.Cells[_SubjectNameIndex].Value))
            {
                row.Cells[_SubjectNameIndex].ErrorText = "科目不能為空白";
            }

            if (!row.IsNewRow && string.IsNullOrEmpty(row.Cells[_SubjectNameIndex].ErrorText))
            {
                bool has_error = true;
                foreach (DataGridViewCell cell in row.Cells)
                {
                    if (cell.ColumnIndex < _CreditStartIndex || cell.ColumnIndex >= _CreditStartIndex + 6)
                    {
                        continue;
                    }
                    if (!string.IsNullOrEmpty("" + cell.Value))
                    {
                        has_error = false;
                        break;
                    }
                }
                if (has_error == true)
                {
                    row.Cells[_SubjectNameIndex].ErrorText = "必需輸入節數/權數";
                }
            }

            //if (!row.IsNewRow && string.IsNullOrEmpty("" + row.Cells[_DomainIndex].Value))
            //    row.Cells[_DomainIndex].ErrorText = "領域不能為空白";
            //else
            //    row.Cells[_DomainIndex].ErrorText = "";

            #endregion

            //編輯最後一列(新增資料那列前依列)
            //if (e.RowIndex == dataGridViewX1.Rows.Count - 2)
            //{
            //    foreach (int index in new int[] { _CategoryIndex, _RequiredByIndex, _RequiredIndex, _EntryIndex })
            //    {
            //        dataGridViewX1.Rows[e.RowIndex + 1].Cells[index].Value = dataGridViewX1.Rows[e.RowIndex].Cells[index].Value;
            //    }
            //}
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Triggers the IsDirtyChanged event.
 /// </summary>
 public virtual void OnIsDirtyChanged()
 {
     IsDirtyChanged?.Invoke(this, EventArgs.Empty);
 }
Ejemplo n.º 10
0
        // Methods

        private void OnIsDirtyChanged()
        {
            IsDirtyChanged?.Invoke();
        }
Ejemplo n.º 11
0
 private void RaiseDataChanged(string propertyName)
 {
     IsDirtyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
     OnPropertyChanged(nameof(IsDirty));
 }
Ejemplo n.º 12
0
        private void dataGridViewX1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewRow row = dataGridViewX1.Rows[e.RowIndex];

            #region 做IsDirty檢查
            if (_defaultValues.ContainsKey(row.Cells[e.ColumnIndex]) &&
                ("" + _defaultValues[row.Cells[e.ColumnIndex]]) != ("" + row.Cells[e.ColumnIndex].Value)    //把值用都轉成字串來比對相等,用string+object相加來省去null.ToString()的麻煩
                )
            {
                _DirtyCells.Add(row.Cells[e.ColumnIndex]);
            }
            else
            {
                if (_DirtyCells.Contains(row.Cells[e.ColumnIndex]))
                {
                    _DirtyCells.Remove(row.Cells[e.ColumnIndex]);
                }
            }
            if ((_DirtyCells.Count != 0) != _IsDirty)
            {
                _IsDirty = (_DirtyCells.Count != 0);
                if (IsDirtyChanged != null)
                {
                    IsDirtyChanged.Invoke(this, new EventArgs());
                }
            }
            #endregion
            //判斷是否為科目名稱欄加入至集合中
            #region 判斷是否為科目名稱欄加入至集合中
            if (e.ColumnIndex == _SubjectNameIndex)
            {
                if (row.Cells[_SubjectNameIndex].Value != null && "" + row.Cells[_SubjectNameIndex].Value != "")
                {
                    if (_RowSubject.ContainsKey(row))
                    {
                        _RowSubject[row] = row.Cells[_SubjectNameIndex].Value.ToString();
                    }
                    else
                    {
                        _RowSubject.Add(row, row.Cells[_SubjectNameIndex].Value.ToString());
                    }
                }
                else
                if (_RowSubject.ContainsKey(row))
                {
                    _RowSubject.Remove(row);
                }
            }
            #endregion
            //如果有填入科目名稱則開始計算級別
            #region 如果有填入科目名稱則開始計算級別
            if (_RowSubject.ContainsKey(row))
            {
                string subjectName = _RowSubject[row];

                int startLevel = 0;
                //如果有填數開始級別則以開始級別開始算
                if (int.TryParse("" + row.Cells[_StartLevelIndex].Value, out startLevel))
                {
                    row.Cells[_SubjectNameIndex].Value = subjectName + "  ( " + subjectName + " " + GetNumber(startLevel) + " ) ";
                }
                else
                {
                    row.Cells[_SubjectNameIndex].Value = subjectName;
                }
            }
            #endregion
            //編輯最後一列(新增資料那列前依列)
            #region 編輯最後一列(新增資料那列前依列)
            if (e.RowIndex == dataGridViewX1.Rows.Count - 2)
            {
                foreach (int index in new int[] { _CategoryIndex, _RequiredByIndex, _RequiredIndex, _EntryIndex })
                {
                    dataGridViewX1.Rows[e.RowIndex + 1].Cells[index].Value = dataGridViewX1.Rows[e.RowIndex].Cells[index].Value;
                }
            }
            #endregion
        }
Ejemplo n.º 13
0
 /// <summary>
 /// Notifies that IsDirty has changed.
 /// Should be called every time IsDirty chnages if ovveriding IsDirty
 /// </summary>
 protected void OnIsDirtyChanged()
 {
     IsDirtyChanged?.Invoke(this, new EventArgs());
 }
Ejemplo n.º 14
0
 public virtual void OnIsDirtyChanged()
 {
     IsDirtyChanged?.Invoke(this, EventArgs.Empty);
     OnPropertyChanged(nameof(IsDirty));
 }
Ejemplo n.º 15
0
 public void NotifyIsDirtyChanged(string propertyName)
 {
     IsDirtyChanged?.Invoke(this, new IsDirtyChangedEventArgs(propertyName));
 }
Ejemplo n.º 16
0
 public void SetContent(string text)
 {
     ScintillaEditor.Text = text;
     IsDirtyChanged?.Invoke(false);
 }
Ejemplo n.º 17
0
 private void tabItem_InternalIsDirtyChanged(object sender, DependencyPropertyChangedEventArgs e)
 {
     IsDirtyChanged?.Invoke(this, e);
 }
Ejemplo n.º 18
0
        private void dataGridViewX1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewRow row = dataGridViewX1.Rows[e.RowIndex];

            #region 做IsDirty檢查
            if (_defaultValues.ContainsKey(row.Cells[e.ColumnIndex]) &&
                ("" + _defaultValues[row.Cells[e.ColumnIndex]]) != ("" + row.Cells[e.ColumnIndex].Value)    //把值用都轉成字串來比對相等,用string+object相加來省去null.ToString()的麻煩
                )
            {
                _DirtyCells.Add(row.Cells[e.ColumnIndex]);
            }
            else
            {
                if (_DirtyCells.Contains(row.Cells[e.ColumnIndex]))
                {
                    _DirtyCells.Remove(row.Cells[e.ColumnIndex]);
                }
            }
            if ((_DirtyCells.Count != 0) != _IsDirty)
            {
                _IsDirty = (_DirtyCells.Count != 0);
                if (IsDirtyChanged != null)
                {
                    IsDirtyChanged.Invoke(this, new EventArgs());
                }
            }
            #endregion
            //判斷是否為科目名稱欄加入至集合中
            #region 判斷是否為科目名稱欄加入至集合中
            if (e.ColumnIndex == _SubjectNameIndex)
            {
                if (row.Cells[_SubjectNameIndex].Value != null && "" + row.Cells[_SubjectNameIndex].Value != "")
                {
                    if (_RowSubject.ContainsKey(row))
                    {
                        _RowSubject[row] = row.Cells[_SubjectNameIndex].Value.ToString();
                    }
                    else
                    {
                        _RowSubject.Add(row, row.Cells[_SubjectNameIndex].Value.ToString());
                    }
                }
                else
                if (_RowSubject.ContainsKey(row))
                {
                    _RowSubject.Remove(row);
                }
            }
            #endregion
            //如果有填入科目名稱則開始計算級別
            #region 如果有填入科目名稱則開始計算級別
            if (_RowSubject.ContainsKey(row))
            {
                string     subjectName = _RowSubject[row];
                List <int> levels      = ProcessLevels(row);
                if (levels.Count > 1)
                {
                    List <string> SubjectLevels = new List <string>();
                    int           index         = 0;
                    if (levels[index] == 0)
                    {
                        index++;
                        SubjectLevels.Add(" ");
                    }
                    for (int i = index; i < levels.Count; i++)
                    {
                        SubjectLevels.Add(GetNumber(levels[i]));
                    }
                    string levelstring = "";
                    foreach (string var in SubjectLevels)
                    {
                        levelstring += (levelstring == "" ? " (" : "、") + var;
                    }
                    row.Cells[_SubjectNameIndex].Value = subjectName + levelstring + ")";
                }
                else
                {
                    if (levels[0] > 0)
                    {
                        row.Cells[_SubjectNameIndex].Value = subjectName + " (" + GetNumber(levels[0]) + ")";
                    }
                    else
                    {
                        row.Cells[_SubjectNameIndex].Value = subjectName;
                    }
                }
                #region OldWay
                //int countLevel = 0;
                ////掃描開課學期
                //for (int i = _CreditStartIndex; i < _CreditStartIndex+8; i++)
                //{
                //    if (row.Cells[i].Value != null)
                //    {
                //        //壘計課程級別
                //        countLevel++;
                //    }
                //}

                //int startLevel = 0;
                ////如果有填數開始級別則以開始級別開始算
                //if (row.Cells[_StartLevelIndex].Value != null)
                //    int.TryParse("" + row.Cells[_StartLevelIndex].Value, out startLevel);
                ////計算科目級別
                //if (countLevel > 1)
                //{
                //    #region 自動計算科目級別
                //    List<string> SubjectLevels = new List<string>();
                //    //如果開課超過一學期且沒有填入開始級別,開始級別從1開始
                //    if (startLevel == 0)
                //    {
                //        //沒填入開始級別則第一筆不加級別
                //        SubjectLevels.Add(" ");
                //        startLevel = 1;
                //        //填入開始級別第二筆開始會從2開始算級別
                //        for (int i = 1; i < countLevel; i++)
                //        {
                //            string levelNumber = "";
                //            levelNumber = GetNumber(i + startLevel);
                //            SubjectLevels.Add(levelNumber);
                //        }
                //    }
                //    else
                //    {
                //        //填入開始級別
                //        for (int i = 0; i < countLevel; i++)
                //        {
                //            string levelNumber = "";
                //            levelNumber = GetNumber(i + startLevel);
                //            SubjectLevels.Add(levelNumber);
                //        }
                //    }
                //    string levelstring = "";
                //    foreach (string var in SubjectLevels)
                //    {
                //        levelstring += (levelstring == "" ? " (" : "、") + var;
                //    }
                //    row.Cells[_SubjectNameIndex].Value = subjectName + levelstring + ")";
                //    #endregion
                //}
                //else
                //{
                //    //有填入開始級別,但沒有開課或只開課一學期
                //    if (startLevel > 0)
                //        row.Cells[_SubjectNameIndex].Value = subjectName + " (" + GetNumber(startLevel) + ")";
                //    else
                //        row.Cells[_SubjectNameIndex].Value = subjectName;
                //}
                #endregion
            }
            #endregion
            //編輯最後一列(新增資料那列前依列)
            if (e.RowIndex == dataGridViewX1.Rows.Count - 2)
            {
                foreach (int index in new int[] { _CategoryIndex, _RequiredByIndex, _RequiredIndex, _EntryIndex })
                {
                    dataGridViewX1.Rows[e.RowIndex + 1].Cells[index].Value = dataGridViewX1.Rows[e.RowIndex].Cells[index].Value;
                }
            }
        }