Использование XML и LINQ в элементах управления TreeView и ListView - Сохранение отредактированной записи в XML-файле
ОГЛАВЛЕНИЕ
Сохранение отредактированной записи в XML-файле
Нам необходимо выполнить код при нажатии на кнопку "XUpdate" (LinkButton). Событие ItemCommand элемента ListView вызывается, когда нажата кнопка со свойством CommandName. Поэтому нам необходимо создать обработчик для данного события. Помните, что данный обработчик события выполнится, когда будет нажата любая кнопка команды в ListView - это включает в себя и кнопки сортировки и перелистывания данного интерфейса. Следовательно, нам обязательно нужно проверить передаваемое значение e.CommandName на предмет того, чтобы оно было равно "XUpdate" до того, как мы будем продолжать.
Когда будет нажата кнопка "XUpdate" мы должны будем сохранить изменения и возвратить ListView в его предыдущее состояние. Следующий код демонстрирует данную функциональность. Обратите внимание на то, что информация сохранена методом saveChanges - мы очень скоро создадим данный метод .
protected void lvwEmployees_ItemCommand(object sender, ListViewCommandEventArgs e)
{
switch (e.CommandName)
{
// Обновление XML-файла после редактирования
case "XUpdate":
saveChanges((string)e.CommandArgument, e.Item);
lvwEmployees.EditIndex = -1;
lvwEmployees.DataBind();
break;
}
}
Нашим последним заданием по отношению к редактированию записей является создание метода saveChanges, который сохраняет изменения в XML-файле. Как это демонстрирует указанный выше код, методу saveChanges передается два параметра:
- Адрес XPath изменяемого элемента (не забудьте, что мы назначили данное значение XPathAddress свойству CommandArgument кнопки Update )
- Редактируемый элемент ListViewItem . Наш метод будет искать TextBoxes с новыми значениями данного ListViewItem
Метод saveChanges загружает XML-элемент Employees из файла источника в качестве объекта XElement. Значения объекта XElement затем будут модифицированы чтобы соответствовать пользовательскому вводу. Наконец, обновленный объект XElement сохраняется в XML-файле.
protected void saveChanges(string xPath, ListViewItem lvwItem)
{
string fileName = MapPath("PhoneBook.xml");
XElement rootElement = XElement.Load(fileName);
XElement itemElement = rootElement.XPathSelectElement(xPath);
itemElement.SetAttributeValue("name",
((TextBox)lvwItem.FindControl("txtEditName")).Text);
itemElement.SetAttributeValue("telephone",
((TextBox)lvwItem.FindControl("txtEditTelephone")).Text);
rootElement.Save(fileName);
}
И это все! На данном этапе пользователь может редактировать существующие записи о телефонах сотрудников, изменяя их имя, номер телефона или и то, и другое.