private void DeleteRecord_Click(object sender, EventArgs e) //кнопка удаления записи из XML-файла { if (dataGridView1.RowCount > 1) //если в DataGridView есть данные, т.е. файл, из которого они загружены, не пустой и корректный { DataGridViewSelectedRowCollection d = dataGridView1.SelectedRows; //получаем коллекцию выделенных пользователем строк //DataGridViewSelectedCellCollection c = dataGridView1.SelectedCells; if (d.Count == 1) //пока мы можем удалить только строку за раз (хотя можно и групповое удаление сделать, если очень надо) { foreach (DataGridViewRow r in d) { try { XMLToHTML.RemoveRecordFromXMLDocument(r.Index); } catch (InvalidOperationException) { } } } else { MessageBox.Show("Можно удалить только одну строку за раз.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Stop); } //dataGridView1.ClearSelection(); } ClearDataGridView(); //очищаем DataGridView LoadRecordsToDataGridView(); //загружаем обновлённые данные из файла в DataGridView dataGridView1.Refresh(); }
private void OpenXML_Click(object sender, EventArgs e) //кнопка открытия XML-файла { OpenXMLDialog.ShowDialog(); //показываем диалог открытия файла if (OpenXMLDialog.FileName != "") //если пользователь выбрал файл { try { XMLToHTML.SetPathToXMLDocument(OpenXMLDialog.FileName); //запоминаем путь к файлу LoadRecordsToDataGridView(); //загружаем записи из файла в DataGridView SaveXML.Enabled = true; //когда пользователь выбрал файл, данные кнопки становятся активными ConvertToHTML.Enabled = true; DeleteRecord.Enabled = true; AddRecord.Enabled = true; //SaveXMLAs.Enabled = true; } catch (Exception ex) { string[] s = { "что-то пошло не так при открытии...", ex.Message, "", "" }; dataGridView1.Rows.Add(s); dataGridView1.Refresh(); } } }
public static void AddNewRecordToXMLDocument(Record record) //Добавление новой записи в XML-документ { if (_path != "") //если путь к файлу указан { originalXml.Load(_path); //загружаем документ XmlNode menu = originalXml.SelectSingleNode("//bookstore"); //выбираем главный узел XmlNode newSub = originalXml.CreateNode(XmlNodeType.Element, "book", null); //создаём новый дочерний узел book XmlAttribute category = originalXml.CreateAttribute("category"); //создаём атрибут category category.Value = record.Category; //присваиваем ему значение newSub.Attributes.Append(category); //добавляем атрибут в узел //string[] s = {"title", "author", "price"}; //foreach (string str in s) XmlNode title = originalXml.CreateNode(XmlNodeType.Element, "title", null); //заголовок title.InnerText = record.Title; newSub.AppendChild(title); //добавляем заголовок XmlNode author = originalXml.CreateNode(XmlNodeType.Element, "author", null); //автор author.InnerText = record.Author; // todo: разделить авторов newSub.AppendChild(author); //добавляем автора XmlNode price = originalXml.CreateNode(XmlNodeType.Element, "price", null); //цена price.InnerText = record.Price; newSub.AppendChild(price); //добавляем цену menu.AppendChild(newSub); //добавляем созданный узел с атрибутами в XML-файл XMLToHTML.SaveXMLDocument(); //сохраняем документ } }
private void button1_Click(object sender, EventArgs e) { // todo: проверить на непустые Record r = new Record(textBoxCategory.Text, textBoxTitle.Text, textBoxAuthor.Text, textBoxPrice.Text); //создаём новую запись, используя данные из textbox-ов XMLToHTML.AddNewRecordToXMLDocument(r); //добавляем запись в документ this.Close(); //закрываем форму }
private void ConvertToHTML_Click(object sender, EventArgs e) //кнопка конвертации XML в HTML { MessageBox.Show("После нажатия кнопки OK откроется диалоговое окно. Пожалуйста, выберите шаблон файла для конвертации (в формате XSL).", "Выбор шаблона", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); openXSLDialog.ShowDialog(); //открываем диалог, в котором пользователь должен выбрать шаблон конвертации if (openXSLDialog.FileName != "") { XMLToHTML.ConvertToHTML(openXSLDialog.FileName); //если пользователь выбрал шаблон - конвертируем текущий файл в HTML } MessageBox.Show("Созданный HTML-отчёт находится по адресу " + Environment.CurrentDirectory, "Отчёт успешно создан!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); }
public static void RemoveRecordFromXMLDocument(int index) //Удаление записи из XML-документа { originalXml.Load(_path); XmlNode menu = originalXml.SelectSingleNode("//bookstore"); //выбираем корневой узел if (index == 0) { menu.RemoveChild(menu.FirstChild); } else { menu.RemoveChild(menu.ChildNodes.Item(index)); } XMLToHTML.SaveXMLDocument(); //сохраняем документ }
private void LoadRecordsToDataGridView() //загрузка записей в DataGridView { try { Collection <Record> AllRecords = new Collection <Record>(); AllRecords = XMLToHTML.OpenXMLDocument(); //открываем документ и считываем из него записи foreach (Record r in AllRecords) { string[] s = { r.Title, r.Author, r.Category, r.Price }; //запоминаем данные в массиве строк dataGridView1.Rows.Add(s); //выводим данные в DataGridView dataGridView1.Refresh(); } } catch (Exception ex) { string[] s = { "что-то пошло не так при записи...", ex.Message, "", "" }; dataGridView1.Rows.Add(s); dataGridView1.Refresh(); } }