What is a GridView control? This paragraph is from the Baidu Hundred: The GridView is the successor control of the DataGrid, in the. NET Framework 2, although there is a DataGrid, but the GridView has embarked on the historical front, the trend to replace the DataGrid is unstoppable. The GridView and DataGrid functions are similar in that they display data from a data source in a Web page, and a row of data from a data source, that is, a record, is displayed as a row in the output table on a Web page.
The data comes from an XML file, and if we don't know how to manipulate the XML data, we'll add it later.
1.XML content as follows:
--><?xml version= "1.0" encoding= "Utf-8"?>
<gunbook>
<gun type= "Automatic Rifle" gid= "001" >
<name>AK-47</name>
<from> Russia </from>
<clip>30</clip>
<accurate>0.2</accurate>
<range>300M</range>
</gun>
<gun type= "Sniper Gun" gid= "002" >
<name>AWM</name>
<from> UK </from>
<clip>10</clip>
<accurate>1</accurate>
<range>1000M</range>
</gun>
<gun type= "submachine gun" gid= "003" >
<name>MP5</name>
<from> USA </from>
<clip>80</clip>
<accurate>0.1</accurate>
<range>280M</range>
</gun>
<gun type= "Shotgun" gid= "004" >
<name> Hammer </name>
<from> Germany </from>
<clip>10</clip>
<accurate>0.2</accurate>
<range>120M</range>
</gun>
</gunbook>
(The data sources here can also be read from the database, such as "Select Uid,uname,usex,uage from Users" ...). So you don't have to use XML.
2. Defines a model class for easy data exchange:
Defines a gun's data model class
public class Gunmodel
{
Public Gunmodel () {}
The name of the gun
public string Gunname {get; set;}
Type of gun
public string Guntype {get; set;}
The number of the gun
public string Gunid {get; set;}
The origin of the gun
public string Gunfrom {get; set;}
The gun cartridge.
public string Gunclip {get; set;}
The accuracy of the gun
public string Gunaccurate {get; set;}
The range of the gun
public string Gunrange {get; set;}
}
-->
3. The front desk interface is as follows:
The above text box is textbox1-textbox7 from left to right respectively, the number is used as the primary key is therefore not editable, 3 buttons is also button1-button3,gridview1 is the current data control;
4.GridView Design
① drag a control from the toolbox to a Web page
② Click on the Small triangle button in the upper-right corner of the control and click Edit Column
③ add several boundfiled controls and a TemplateField control in the pop-up window, and remove the "auto-generated fields" in the lower-left corner of the window;
Note that the specific setting is--check boundfiled click "Add", and then fill in the DataField on the right (the name of the column in the data source, such as the current number Gunid), the HeaderText in the skin (the name of the column to display on the page, for example, the current number),
TemplateField only need to fill in the HeaderText, and then cancel the "Automatically generated fields" check box, and finally click "OK";
④ Click "AutoFormat" Can be set according to the appropriate style, click "Edit Template" for the operation of the template settings
Drag two LinkButton, edit and delete names separately (LinkButton property Font-->underline Select False to underline, but 2 to enable this action)
⑤ edit Post interface as follows
⑥ the relevant settings for the foreground interface
Note: CommandArgument can bind to the corresponding value on the current control, generally we are bound to the value of the primary key column, such as the Gunid here (not partition case); CommandName is to facilitate the background through the GridView Rowcommand event to find the type of the current operation, such as edit or delete, notice the name must avoid keywords, such as "edit", "Update", "delete", you can Play "upd", " Del "and so on; OnClientClick is generally used in front of the frame events, such as the deletion tips here.
In addition, the control's property allowpaging=true can be paginated, and the PageSize property can set the paging size, that is, the number of displays per page.
5. Background Code
Using System;
Using System.Collections.Generic;
Using System.Linq;
Using System.Web;
Using System.Web.UI;
Using System.Web.UI.WebControls;
Using System.Xml;
Using System.IO;
Namespace Aboutxml
{
public partial class Gun:System.Web.UI.Page
{
protected void Page_Load (object sender, EventArgs e)
{
Textbox1.enabled = true;
if (! Page.IsPostBack)
{
Operationxml ("Select", "");
}
}
Inquire
protected void Button1_Click (object sender, EventArgs e)
{
Operationxml ("Select", "");
}
Add to
protected void button2_click (object sender, EventArgs e)
{
Change the style of a control in the background
BUTTON2.ATTRIBUTES.ADD ("Style", "background-color:red;"); /This is mode 1, follow the CSS style to change
BUTTON2.STYLE.ADD ("Color", "Blue");//This is mode 2, changing with the control's own properties
if (TextBox1.Text.Trim () = = "")//number must exist
{
Response.Write (' </p><script>alert (please fill in to add Data ') </script><p> ");
Return
}
Operationxml ("Create", "");
Clearcontrol ()//Empty text box
}
Modify
protected void Button3_Click (object sender, EventArgs e)
{
if (TextBox1.Text.Trim () = = "")//number must exist
{
Response.Write ("</p><script>alert" click Edit on the line you want to modify and try again!) ') </script><p> ");
Return
}
XmlDocument xmldoc = new XmlDocument ();//Add an XML Document object
XmlDoc. Load (Getxmlpath ());//Loading document
XmlNode gunroot = xmldoc. selectSingleNode ("Gunbook");//Get root node
String Conditionpath = "/gunbook/gun[@gid =\" "+ TextBox1.Text +" \ "]"//xml get the condition of the node, the format is fixed, if you want to add a property can also use the "and @ Property = property value" Action
XmlNode Updatenode = xmldoc. selectSingleNode (Conditionpath)//Get a node according to the condition
if (Updatenode!= null && updatenode.childnodes!= null && updateNode.ChildNodes.Count = 5)
{
UpdateNode.ChildNodes.Item (0). innertext = textbox2.text;//Name
UpdateNode.Attributes.GetNamedItem ("type"). innertext = textbox3.text;//Type
UpdateNode.ChildNodes.Item (1). InnerText = textbox4.text;//Origin
UpdateNode.ChildNodes.Item (2). InnerText = textbox5.text;//Cartridge
UpdateNode.ChildNodes.Item (3). innertext = textbox6.text;//Precision
UpdateNode.ChildNodes.Item (4). innertext = textbox7.text;//Range
}
SaveXML (xmldoc);//save file and Refresh current page
Clearcontrol ()//Empty text box
}
///
Empty control values
///
private void Clearcontrol ()
{
TextBox1.Text = TextBox2.Text = TextBox3.Text = Textbox4.text = Textbox5.text = Textbox6.text = TextBox7.Text = "";
}
///
///The public method of manipulating XML classes
Response.Write ("<script>alert" ("+ +") </script>);
///
Action type name, Select/create/update/delete
Operation parameters, where the primary key is passed in Gunid
private void Operationxml (String opname,string commandaugument)
{
XmlDocument xmldoc = new XmlDocument ();//Add an XML Document object
XmlDoc. Load (Getxmlpath ());//Loading document
XmlNode gunroot = xmldoc. selectSingleNode ("Gunbook");//Get root node
Switch (opname)
{
Case "SELECT"://Query
#region
List
Gunlist = new List ()//define a set of guns
if (gunroot!= null && gunroot. Childnodes.count > 0)
{
XmlNodeList childlist;
foreach (XmlNode child in Gunroot.) ChildNodes)//loops all child nodes
{
First, get the value of the property directly through the XmlNode
String type = child. Attributes.getnameditem ("type"). InnerText;
String id = child. Attributes.getnameditem ("GID"). InnerText;
Second, get the value of the property through XmlElement
XmlElement Xmlatt = (XmlElement) child;
String type = Xmlatt. GetAttribute ("type");
String id = Xmlatt. GetAttribute ("GID");
Gunmodel Gunmodel = new Gunmodel ();
Gunmodel. Guntype = type;
Gunmodel. Gunid = ID;
Childlist = child. ChildNodes;
if (childlist!= null && childlist.count = 5)
{
Gunmodel. Gunname = Childlist.item (0). innertext;//Name
Gunmodel. Gunfrom = Childlist.item (1). innertext;//origin
Gunmodel. Gunclip = Childlist.item (2). innertext;//Magazine.
Gunmodel. Gunaccurate = Childlist.item (3). innertext;//Accurate
Gunmodel. Gunrange = Childlist.item (4). innertext;//Range
}
Else
{
Gunmodel. Gunname = "no data";
Gunmodel. Gunfrom = "no data";
Gunmodel. Gunclip = "no data";
Gunmodel. Gunaccurate = "no data";
Gunmodel. Gunrange = "no data";
}
Gunlist.add (Gunmodel)//Add the gun object to the gun collection
}//foreach (XmlNode child in Gunroot.) ChildNodes) End
Gridview1.datasource = gunlist;//bound data source
Gridview1.databind ();
}//if (gunroot!= null && gunroot. Childnodes.count > 0) End
#endregion
Break
Case "Create"://Increase
#region
XmlElement createelement = xmldoc. CreateElement ("gun");//Create a gun node element
Createelement.setattribute ("type", textbox3.text);//Type
Createelement.setattribute ("GID", textbox1.text);/number
XmlNode CreateNode = (XmlNode) createelement;
Gunroot. AppendChild (CreateNode);
XmlElement createelementchildname = xmldoc. createelement ("name");//Name
Createelementchildname.innertext = textbox2.text;//Value
Createelement.appendchild (Createelementchildname);
XmlElement createelementchildfrom = xmldoc. CreateElement ("from")/origin
Createelementchildfrom.innertext = textbox4.text;//Value
Createelement.appendchild (Createelementchildfrom);
XmlElement createelementchildclip = xmldoc. createelement ("clip");/magazine
Createelementchildclip.innertext = textbox5.text;//Value
Createelement.appendchild (Createelementchildclip);
XmlElement createelementchildaccurate = xmldoc. createelement ("accurate")/accurate
Createelementchildaccurate.innertext = textbox6.text;//Value
Createelement.appendchild (createelementchildaccurate);
XmlElement createelementchildrange = xmldoc. CreateElement ("range");/Range
Createelementchildrange.innertext = textbox7.text;//Value
Createelement.appendchild (Createelementchildrange);
SaveXML (xmldoc);//save file and Refresh current page
#endregion
Break
Case "Update"://Modify
#region
String Conditionpath = "/gunbook/gun[@gid =\" "+ commandaugument +" \ "]"//xml get the condition of the node, the format is fixed, if you want to add a property can also use the "and @ Property = property value" Action
XmlNode Updatenode = xmldoc. selectSingleNode (Conditionpath)//Get a node according to the condition
TextBox1.Text = commandaugument;//Number
if (Updatenode!= null && updatenode.childnodes!= null && updateNode.ChildNodes.Count = 5)
{
TextBox2.Text = UpdateNode.ChildNodes.Item (0). innertext;//Name
TextBox3.Text = UpdateNode.Attributes.GetNamedItem ("type"). innertext;//type
Textbox4.text = UpdateNode.ChildNodes.Item (1). innertext;//origin
Textbox5.text = UpdateNode.ChildNodes.Item (2). innertext;//Magazine.
Textbox6.text = UpdateNode.ChildNodes.Item (3). innertext;//Accurate
Textbox7.text = UpdateNode.ChildNodes.Item (4). innertext;//Range
}
Else
{
TextBox2.Text = "";
TextBox3.Text = "";
Textbox4.text = "";
Textbox5.text = "";
Textbox6.text = "";
Textbox7.text = "";
}
#endregion
Break
default://Delete
#region
String conditionPath2 = "/gunbook/gun[@gid =\" "+ commandaugument +" \ "]"//xml get the condition of the node, the format is fixed, if you want to add a property can also use the "and @ Property = property value" Action
XmlNode Deletenode = xmldoc. selectSingleNode (conditionPath2)//Get a node according to the condition
if (Deletenode!= null)
{
DeleteNode.ParentNode.RemoveChild (Deletenode);//Remove current node
}
SaveXML (xmldoc);//save file and Refresh current page
#endregion
Break
}
}//function End
///
Get XML file path
///
///
private String Getxmlpath ()
{
String xmlpath = Server.MapPath ("Gun.xml");
return xmlpath;
}
///
Save XML file
///
/// XML file name
private void SaveXML (XmlDocument xmldoc)
{
XmlDoc. Save (Getxmlpath ());
Operationxml ("Select", "")//Refresh Page
}
protected void Gridview1_rowcommand (object sender, Gridviewcommandeventargs e)
{
if (E.commandname = = "UPD")//Edit
{
textbox1.enabled = false;//number cannot be edited, otherwise loss of primary key meaning
String guid = E.commandargument.tostring ();
Operationxml ("Update", e.commandargument.tostring ());
GridViewRow GVR = (GridViewRow) ((LinkButton) (E.commandsource). parent.parent);//The current control is in the row
Int J = Gvr. rowindex;//the Index of the current control's row, where
}
else//del, deleting
{
Operationxml ("Delete", e.commandargument.tostring ());
}
}
Paging
protected void Gridview1_pageindexchanging (object sender, Gridviewpageeventargs e)
{
Gridview1.pageindex = E.newpageindex;
Operationxml ("Select", "");//bound data source
}
}
}
C # Operations XML document Instance tutorial
An XML document is a generic document that can use. config as a suffix or. xml as a suffix. XML documents are composed primarily of element nodes and the attributes of nodes. It has and only one root node, the other nodes are all the root node of the child nodes or child nodes; Each node has a beginning must have the end, there is no beginning to end the node, there are two main types of nodes: there are innertext ..... And no innertext. 。 With attributes in a node, a node can contain multiple attributes, each of which is composed of a name and a value.
In XML documents, nodes, attributes are case-sensitive. For a node's properties, name cannot be duplicated, even when defining a property, two name identical attributes are added to the same node, and subsequent attributes overwrite the preceding attribute without reporting a syntax error; for a child node under a node, You can add more than one child node that is exactly the same.
The prerequisite for an operation on an XML document is that the XML document already exists and the root node already exists.
first, add nodes and properties
1. Define an XML Action object:
XmlDocument doc = new XmlDocument ();
2. Load an XML file:
Doc. Load (@ "D:\App.config");
The specified file must exist or it will be an error.
3. Get root node:
XmlNode root = Doc. DocumentElement;
4. Define an attribute:
XmlAttribute RA = doc. CreateAttribute ("Name");
5. Assigning values to attributes:
Ra. Value = "Zwj2";
6, add the attribute to the node above:
Root. Attributes.append (RA);
7, and then define a node as the root node of the child node:
XmlNode root1 = doc. createelement ("table");
8. Assigning text values to nodes:
Root1. innertext = "SDF1";
9. Define and add attributes to the node
10, add the node to the parent node:
Root. AppendChild (ROOT1);
11. Save XML Document:
Doc. Save (@ "D:\App.config");
Note: You can add multiple properties to a node, and then each property will be sorted back in order, you can add multiple child nodes to the root node, or you can cadogan the child nodes to the node.
ii. querying and modifying nodes and attributes
1, the element node has the name attribute, is the <> inside string, also has the innertext attribute (corresponds to the text knot point), is the <></> between the string: root. Name, Root. InnerText. These properties are both read and write. ------------------------------XmlNode
2, the property node has name, also has Value:providername= "System.Data.SqlClient", preceded by name, followed by value these properties can be read or write. -----------------------------------------------------------XmlAttribute
3. Each node has a set of child nodes, as well as a set of attributes: root. ChildNodes, Root. The Attributes collection has the Count property.
4, the collection is satisfied with the index:
For a collection of attributes, the name of the property cannot be duplicated, so the index can be a name string index, the name string exists, otherwise a Null Property object is returned, no error is available, or an integer index, then the integer cannot be crossed, otherwise it will be an error;: Root. attributes["name", Root. Attributes[0], return to XmlAttribute.
For a collection of child nodes, because the child nodes can be exactly the same, the name of the child node can certainly be the same, so the index can only be an integer, not the child node name string, the integer index can not cross the line, or it will be an error: root. CHILDNODES[10], return to XmlNode.
three, several important functions
1, XmlNode Xmldocument.selectsinglenode (@ "Configuration/twonode/daystart")
This function calls the selectSingleNode function with a XmlDocument object that is declared well and has successfully loaded a configuration file, and the parameter of the function is the name of the configuration file from the root node name down to the desired node. The entire name path cannot be faulted, note is a left slash; the return value of the function is the object of the first XmlNode node found and returns null if it is not found.
Manipulate the following XML:
<?xmlversion= "1.0"?>
<configuration>
<twoNode>
</twoNode>
<twoNode>
<dayStart>1</dayStart>
<dayStart>2</dayStart>
<dayStart>3</dayStart>
</twoNode>
</configuration>
If you execute this function, you will find the node:<daystart>1</daystart>
2, XmlNodeList xmldocument.selectnodes (@ "Configuration/twonode/daystart")
This function calls the SelectNodes function with a XmlDocument object that is declared well and has successfully loaded a configuration file, and the parameter of the function is the name of the configuration file from the root node name down to the desired node, and the entire name path cannot be faulted. Note that the left slash is, because the name of the node is likely to be duplicated, so the return value of the function is the collection of all the XmlNode node objects found XmlNodeList and returns null if it is not found.
XmlNodeList is a collection, then there is the Count property, you can directly to the collection with [int index] to index the specific object, you can also use the Set item (int index) function to index the specific object, but the index can not cross, otherwise there will be errors, The return is XmlNode.
Manipulate the following XML:
<?xmlversion= "1.0"?>
<configuration>
<twoNode>
<dayStart>-1</dayStart>
<dayStart>-2</dayStart>
<dayStart>-3</dayStart>
</twoNode>
<twoNode>
<dayStart>1</dayStart>
<dayStart>2</dayStart>
<dayStart>3</dayStart>
</twoNode>
</configuration>
If this function is executed, the node collection will be found:
<dayStart>-1</dayStart>
<dayStart>-2</dayStart>
<dayStart>-3</dayStart>
<dayStart>1</dayStart>
<dayStart>2</dayStart>
<dayStart>3</dayStart>
Manipulate the following XML:
<?xmlversion= "1.0"?>
<configuration>
<twoNode>
</twoNode>
<twoNode>
<dayStart>1</dayStart>
<dayStart>2</dayStart>
<dayStart>3</dayStart>
</twoNode>
</configuration>
If this function is executed, the node collection will be found:
<dayStart>1</dayStart>
<dayStart>2</dayStart>
<dayStart>3</dayStart>
Let's start with the actual operation!
A. Add an XML file named Book.xml, which reads as follows:
<?xml version= "1.0" encoding= "Utf-8"?>
<bookstore>
<book type= "Compulsory course" isbn= "7-111-19149-2" >
<title> Data Structure </title>
<author> Min </author>
<price>30.00</price>
</book>
<book type= "Compulsory course" isbn= "7-111-19149-3" >
<title> Routing and Exchange-based Internet </title>
<author> Cheng Qingmei </author>
<price>27.00</price>
</book>
<book type= "Compulsory course" isbn= "7-111-19149-4" >
<title> Computer hardware Technology base </title>
<author> Li Jizan </author>
<price>25.00</price>
</book>
<book type= "Compulsory course" isbn= "7-111-19149-5" >
<title> Software Quality assurance and management </title>
<author> Zhu Shaomin </author>
<price>39.00</price>
</book>
<book type= "Compulsory course" isbn= "7-111-19149-6" >
<title> algorithm design and Analysis </title>
<author> Wang </author>
<price>23.00</price>
</book>
<book type= "Elective" isbn= "7-111-19149-1" >
<title> Computer operating System </title>
<author> you guess </author>
<price>28</price>
</book>
</bookstore>
Two. Add a Web page, named Xml_operation.aspx, with the following page contents:
A total of 4 buttons, namely Button1, Button2, Button3, Button4, and then a GridView1 to display the data
Three. Add a BookModel.cs class to read the data as follows:
public class Bookmodel
{
Constructors
Public Bookmodel () {}
///
The corresponding course type
///
public string BookType {get; set;}
///
The ISBN number corresponding to the book
///
public string BOOKISBN {get; set;}
///
Title
///
public string BookName {get; set;}
///
Author
///
public string Bookauthor {get; set;}
///
Price
///
public string Bookprice {get; set;}
}
four. The background code is as follows:
1. Add namespaces using System.Xml;
2. Add a public method to manipulate the current XML
In addition, if you want to get an XML relative path, you can do this by referencing the namespace using System.IO first; Then direct stirng Xmlpath = Server.MapPath ("Gun.xml").
3. The individual invocation events are as follows:
Query node
protected void Button1_Click (object sender, EventArgs e)
{
Operationxml ("select");
}
New node
protected void button2_click (object sender, EventArgs e)
{
Operationxml ("create");
}
modifying nodes
protected void Button3_Click (object sender, EventArgs e)
{
Operationxml ("Update");
}
Delete a node
protected void Button4_Click (object sender, EventArgs e)
{
Operationxml ("delete");
}