Курсовая. Пояснительная записка. Курсовая работа Расчетнопояснительная записка Дисциплина Программирование и основы алгоритмизации Студент Буков А. А
Скачать 0.76 Mb.
|
Проверка правильности на уровне ячейки таблицыОпределение события CellValidating: private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (dataGridView1.Rows[e.RowIndex].IsNewRow) return; string err = "", s = e.FormattedValue.ToString(); int i; double d; switch (e.ColumnIndex) { // id case 0: // make case 1: if (s == "") err = "Поле \"Марка\" не должно быть пустым"; break; // model case 2: if (s == "") err = "Поле \"Модель\" не должно быть пустым"; break; // country case 3: if (s == "") err = "Поле \"Производитель\" не должно быть пустым"; break; // power case 4: if (!int.TryParse(s, out i)) err = "Строку нельзя преобразовать в число"; else if (i < 0) err = "Отрицательные числа не допускаются"; break; // year case 5: if (!int.TryParse(s, out i)) err = "Строку нельзя преобразовать в число"; else if (i < 0) err = "Отрицательные числа не допускаются"; break; // price case 6: if (!double.TryParse(s, out d)) err = "Строку нельзя преобразовать в число"; else if (d < 0) err = "Отрицательные числа не допускаются"; break; } e.Cancel = err != ""; dataGridView1.Rows[e.RowIndex].ErrorText = err; }Проверка правильности на уровне строки таблицыОпределение события RowValidating: private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e) { if (dataGridView1.Rows[e.RowIndex].IsNewRow) return; string err = ""; if (dataGridView1[1, e.RowIndex].Value == null) err = "Поле \"Марка\" должно быть непустым"; e.Cancel = err != ""; dataGridView1.Rows[e.RowIndex].ErrorText = err; }Использование XML-сериализации для сохранения и загрузки наборов данныхДобавить на форму Form2 невизуальных компонентов типа OpenFileDialog и SaveFileDialog, а также компонента меню MenuStrip (эти компоненты получат имена openFileDialog1, saveFileDialog1, menuStrip1). Создать в компоненте menuStrip1 пункт меню первого уровня Файл (Name - file1). В выпадающем меню, связанном с пунктом Файл, создать четыре пункта меню с текстом Создать, Открыть…, Сохранить как…, Выход. Настройка свойств добавленных компонентов и пунктов меню: Пункт меню Создать (группа Файл): Name = new1 Пункт меню Открыть (группа Файл): Name = open1 Пункт меню Сохранить как (группа Файл): Name = save1 Пункт меню Выход (группа Файл): Name = exit1 Добавление в начало файла Form2.cs операторов: using System.IO; using System.Xml.Serialization; Добавление нового поля в описание класса Form2: private XmlSerializer xmls = new XmlSerializer(typeof(List Дополнение конструктора класса Form2: public Form2() { InitializeComponent(); contactsBindingSource.DataSource = new List } Описание в классе Form2 нового метода SaveData: private void SaveData (string name) { int n = dataGridView1.RowCount; for (int i = 0; i < n - 1; i++) { dataGridView1.Rows[i].Cells[7].Value = null; } if (name == "" || dataGridView1.RowCount == 1) return; if (dataGridView1.CurrentRow.IsNewRow) dataGridView1.CurrentCell = dataGridView1[0, dataGridView1.RowCount - 2]; StreamWriter sw = new StreamWriter(name, false, Encoding.Default); xmls.Serialize(sw, carBindingSource.DataSource); sw.Close(); for (int i = 0; i < n - 1; i++) { if (dataGridView1.Rows[i].Cells[8].Value != null) dataGridView1.Rows[i].Cells[7].Value = new Bitmap(dataGridView1.Rows[i].Cells[8].Value + ""); } } Определение обработчика события DropDownOpening для пункта меню Файл, события Click для пунктов меню new1, open1, save1, exit1, а также события Form Closing для формы Form2, обработчика события CurrentCellDirtyStateChange для компонента dataGridView1: private void new1_Click(object sender, EventArgs e) { carBindingSource.DataSource = new List SaveData(saveFileDialog1.FileName); saveFileDialog1.FileName = ""; Text = "CarShop"; dataGridView1.CurrentCell = null; } private void open1_Click(object sender, EventArgs e) { openFileDialog1.FileName = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { SaveData(saveFileDialog1.FileName); string s = openFileDialog1.FileName; StreamReader sr = new StreamReader(s, Encoding.Default); carBindingSource.SuspendBinding(); carBindingSource.DataSource = xmls.Deserialize(sr); carBindingSource.ResumeBinding(); sr.Close(); saveFileDialog1.FileName = s; Text = "CarShop - " + Path.GetFileNameWithoutExtension(s); int n = dataGridView1.RowCount; for (int i = 0; i < n - 1; i++) { if (dataGridView1.Rows[i].Cells[8].Value != null) { dataGridView1.Rows[i].Cells[7].Value = new Bitmap(dataGridView1.Rows[i].Cells[8].Value + ""); dataGridView1.Rows[i].Height = new Bitmap(dataGridView1.Rows[i].Cells[8].Value + "").Height; } } } } private void saveAs1_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { string h = saveFileDialog1.FileName; SaveData(h); Text = "Car - " + Path.GetFileNameWithoutExtension(h); } } private void exit1_Click(object sender, EventArgs e) { Close(); } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { SaveData(saveFileDialog1.FileName); } private void file1_DropDownOpening(object sender, EventArgs e) { saveAs1.Enabled = dataGridView1.RowCount > 1; } private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) { menuStrip1.Enabled = !dataGridView1.IsCurrentCellDirty; int row = dataGridView1.CurrentRow.Index; if (!dataGridView1.IsCurrentCellDirty && (int)dataGridView1["Id1", row].Value == 0) { int maxId = 0; for (int i = 0; i < row; i++) { int v = (int)dataGridView1["Id1", i].Value; if (maxId < v) maxId = v; } dataGridView1["Id1", row].Value = maxId + 1; } } |