#region Using
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Collections.Specialized;
#endregion
public partial class widgets_LinkList_edit : WidgetEditBase
{
///
/// Handles the Load event of the Page control.
///
/// The source of the event.
/// The instance containing the event data.
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindGrid();
}
grid.RowEditing += new GridViewEditEventHandler(grid_RowEditing);
grid.RowUpdating += new GridViewUpdateEventHandler(grid_RowUpdating);
grid.RowCancelingEdit += delegate { grid.EditIndex = -1; };
grid.RowDeleting += new GridViewDeleteEventHandler(grid_RowDeleting);
btnAdd.Click += new EventHandler(btnAdd_Click);
}
void btnAdd_Click(object sender, EventArgs e)
{
XmlDocument doc = Doc();
XmlNode links = doc.SelectSingleNode("links");
if (links == null)
{
links = doc.CreateElement("links");
doc.AppendChild(links);
}
XmlNode link = doc.CreateElement("link");
XmlAttribute id = doc.CreateAttribute("id");
id.InnerText = Guid.NewGuid().ToString();
link.Attributes.Append(id);
XmlAttribute title = doc.CreateAttribute("title");
title.InnerText = txtTitle.Text.Trim(); ;
link.Attributes.Append(title);
XmlAttribute url = doc.CreateAttribute("url");
url.InnerText = txtUrl.Text.Trim();
link.Attributes.Append(url);
XmlAttribute newwindow = doc.CreateAttribute("newwindow");
newwindow.InnerText = cbNewWindow.Checked.ToString();
link.Attributes.Append(newwindow);
links.AppendChild(link);
Save(doc);
BindGrid();
}
private void BindGrid()
{
XmlDocument doc = Doc();
XmlNodeList list = doc.SelectNodes("//link");
if (list.Count > 0)
{
using (XmlTextReader reader = new XmlTextReader(doc.OuterXml, XmlNodeType.Document, null))
{
System.Data.DataSet ds = new System.Data.DataSet();
ds.ReadXml(reader);
grid.DataSource = ds;
grid.DataKeyNames = new string[] { "id" };
grid.DataBind();
ds.Dispose();
}
}
}
///
/// Handles the RowDeleting event of the grid control.
///
/// The source of the event.
/// The instance containing the event data.
void grid_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
XmlDocument doc = Doc();
string id = (string)grid.DataKeys[e.RowIndex].Value;
XmlNode node = doc.SelectSingleNode("//link[@id=\"" + id + "\"]");
if (node != null)
{
node.ParentNode.RemoveChild(node);
Save(doc);
BindGrid();
}
}
///
/// Handles the RowUpdating event of the grid control.
///
/// The source of the event.
/// The instance containing the event data.
void grid_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
XmlDocument doc = Doc();
string id = (string)grid.DataKeys[e.RowIndex].Value;
TextBox textboxTitle = (TextBox)grid.Rows[e.RowIndex].FindControl("txtTitle");
TextBox textboxUrl = (TextBox)grid.Rows[e.RowIndex].FindControl("txtUrl");
CheckBox checkboxNewWindow = (CheckBox)grid.Rows[e.RowIndex].FindControl("cbNewWindow");
XmlNode node = doc.SelectSingleNode("//link[@id=\"" + id + "\"]");
if (node != null)
{
node.Attributes["title"].InnerText = textboxTitle.Text;
node.Attributes["url"].InnerText = textboxUrl.Text;
node.Attributes["newwindow"].InnerText = checkboxNewWindow.Checked.ToString();
grid.EditIndex = -1;
Save(doc);
BindGrid();
}
}
///
/// Handles the RowEditing event of the grid control.
///
/// The source of the event.
/// The instance containing the event data.
void grid_RowEditing(object sender, GridViewEditEventArgs e)
{
grid.EditIndex = e.NewEditIndex;
BindGrid();
}
///
/// Saves this the basic widget settings such as the Title.
///
public override void Save()
{
XmlDocument doc = Doc();
}
void Save(XmlDocument doc)
{
StringDictionary settings = GetSettings();
settings["content"] = doc.InnerXml;
SaveSettings(settings);
}
XmlDocument Doc()
{
StringDictionary settings = GetSettings();
XmlDocument doc = new XmlDocument();
if (settings["content"] != null)
doc.InnerXml = settings["content"];
return doc;
}
}