Post on 02-Jan-2016
transcript
ASP.NETASP.NET
Rina Zviel-Girshin
Lecture 6
Rina Zviel-Girshin @Paralex 2
Overview
• DataGrid• XML• XSD• XML and DataSet• System.Xml• XmlDataDocument• XmlReader/XmlWriter
Rina Zviel-Girshin @Paralex 3
Display Controls
• In ASP.NET exists a set of controls called “display controls”.
• These controls are – asp:Repeater (not at our course – uses Templates), – asp:DataList,– and asp:DataGrid.
• The main purpose of these controls is displaying information from database tables and other external data stores to the screen.
Rina Zviel-Girshin @Paralex 4
DataGrid
• The DataGrid control is the most complex and powerful of the controls used to display and maintain sets of data.
• It has near a 100 properties, methods and events (more during tirgul).
• The DataGrid displays a tabular data (data organized into rows and columns) from the data source or renders a table containing the SQL data.
Rina Zviel-Girshin @Paralex 5
Example
Rina Zviel-Girshin @Paralex 6
DataGrid.aspx<%@ Page Language="C#"%><%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server"> protected void Page_Load(Object sender, EventArgs e) { SqlConnection con = new SqlConnection("Server=localhost;uid=sa;
database=pubs" ); SqlDataAdapter myCommand = new SqlDataAdapter("select * from
Authors", con); DataSet ds = new DataSet(); myCommand.Fill(ds, "Authors");
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView; MyDataGrid.DataBind();
} </script>
Rina Zviel-Girshin @Paralex 7
DataGrid.aspx<html><head><title>DataGrid basic example</title></head> <body> <h3><font face="Verdana">Simple Select to a DataGrid Control</font></h3> <asp:DataGrid id="MyDataGrid" runat="server" Width="700" BackColor="#ccccff" BorderColor="black" ShowFooter="false" CellPadding=3 Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" EnableViewState="false" /> </body> </html>
Rina Zviel-Girshin @Paralex 8
Data Source
• To specify the data source for the DataGrid you have to perform the following operations:
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView; MyDataGrid.DataBind();
• Or an alternative syntax is to specify both a DataSource and a DataMember from the DataSet to be used:
MyDataGrid.DataSource=ds; MyDataGrid.DataMember="Authors"; MyDataGrid.DataBind();
Rina Zviel-Girshin @Paralex 9
Columns
• The DataGrid automatically displays data in a table format (grid layout) .
• A first row in the DataGrid is a row of column headings. It is generated from the column names in the data source.
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
//display all the columns
• The number of columns in DataGrid object equals to the number of columns in the data source.
Rina Zviel-Girshin @Paralex 10
Columns display• A DataGrid permits selections of data columns for
display.• In order to select which columns to display, first
specify AutoGenerateColumns="False" for the grid.
• Then add a <Columns> section in the control. • In this section an <asp:BoundColumn> control is
added for each column to be displayed. • This bound column binds to a column of the data
source with the DataField="ColumnName" property setting.
Rina Zviel-Girshin @Paralex 11
Example<asp:DataGrid id="ProductGrid" runat="server"
AutoGenerateColumns="False" > <Columns> <asp:BoundColumn DataField=“au_fname" HeaderText=“Author’s Family Name" /> <asp:BoundColumn DataField=“au_id" HeaderText=“Author’s ID*" ItemStyle-HorizontalAlign="Right" FooterText="*The Id is written in XXX-XX-XXXX format" FooterStyle-Font-Size="7pt" /> </Columns></asp:DataGrid>
Rina Zviel-Girshin @Paralex 12
Some DataGrid properties• You can use property="value" settings to define DataGrid’s
layout and styles.– Width="700“ – table’s width in pixel or %
– BackColor="#ccccff" – table cells background color
– BorderColor="black" – border color
– BorderWidth="1"– border’s width in pixel
– CellPadding=3 – amount of space (in pixels) between cell’s border and contents
– CellSpacing="0” - amount of space (in pixels) between columns. Default is 0.
– ShowFooter="false" – does not display table’s footer
– Font-Name="Verdana" Font-Size="8pt" - defines font family
– And more…
Rina Zviel-Girshin @Paralex 13
EnableViewState
• EnableViewState property gets and sets a value indicating whether the server control persists its view state.
• The default value is true. • That means the DataGrid stores all of its data when
maintaining state and in each request all information is sent through a round trip with the form posts.
• To improve the performance of your pages turn this property off.
EnableViewState=“false”
Rina Zviel-Girshin @Paralex 14
XML and the DataSet• DataSet can read/write XML for its data and/or schema
– You can create or modify data in a DataSet using XML file stream
– You can create or modify the DataSets schema using XML schema.
• XML-related DataSet methods for reading:– ReadXml: Reads an XML schema and data into the DataSet– ReadXmlSchema (xsd file): Reads an XML schema into the
DataSet.
• And for writing: – WriteXml, WriteXmlSchema– GetXml, GetXmlSchema
Rina Zviel-Girshin @Paralex 15
Example<%@ Page Language="C#" %><%@ Import Namespace="System.Data" %><script runat=server>
void Page_Load(Object sender , EventArgs e) { DataSet ds = new DataSet(); ds.ReadXml(“C:\Menu.xml" ); dgrd.DataSource = ds; dgrd.DataBind();}</script><html><head><title>ReadXMLExample.aspx</title></head><body><asp:DataGrid ID="dgrd" cellpadding="10" runat="server" /></body></html>
Rina Zviel-Girshin @Paralex 16
XML• XML stands for eXtensible Markup Language.• XML is a markup language much like HTML, but
its purpose is to describe data (not to display data like HTML).
• XML like HTML has tags, attributes and values. • The difference is that you can define your own new
tags. • You can use XML to create your own Markup
Language and later use it to markup (format) your documents.
Rina Zviel-Girshin @Paralex 17
XML usage
• XML is a text-based language that stores data in a way that also describes the structure of the data.
• It provides a consistent format for data that can be passed easily – between applications – and across networks– and the Internet.
• XML is a common data format.• Many other applications use it for configuration
files.
Rina Zviel-Girshin @Paralex 18
XML data format
• Visual Studio. NET uses XML as the format for storing data records, communicating, and sharing data.
• XML is the native data format for ADO.NET DataSets.– The underlying fields and records in the disconnected
dataset are stored as XML.
• XML is optimized for sharing data across the Internet.
• Office XP stores data as XML.
Rina Zviel-Girshin @Paralex 19
Some facts
• Exists since 1998.• XML does not do anything.• Not owned by any one company.• An open standard.• Can represent almost any kind of data.• Supports sophisticated integrity constraints.• Simple XML documents are human-readable.• Easily converted to other formats.
Rina Zviel-Girshin @Paralex 20
XML tags/elements
• XML is case-sensitive (there is a difference between upper and lowercase letters).
• <Author> and <author> are two different XML tags.
• You can define your own tags, called elements.
• Elements naming:– Names can contain letters, numbers, and other characters, can be in
any language (not advisable).
– Names must not start with a number or punctuation character.
– Names must not start with the letters xml (or XML or Xml or any other combination of xml).
– Names cannot contain spaces.
Rina Zviel-Girshin @Paralex 21
XML File
• An XML file is an ASCII text file with XML markup tags.
• It has a .xml extension. • Example: myfile.xml • An XML file contains a declaration that announces
that this is an XML file. • Example: <?xml version="1.0"?> • An XML file contains a content marked up with
XML tags.
Rina Zviel-Girshin @Paralex 22
Example
<?xml version="1.0"?><course_info>
<instructor><iname>Rina</iname>
<fname>Zviel-Girshin</fname></instructor><course>
<cname>Web_System Development</cname> <max_st_number>20</max_st_number> <hours>3 hours a week</hours> </course></course_info>
Rina Zviel-Girshin @Paralex 23
Inner nodes
• XML inner nodes can have the same structure or can have a different structure.
• Example: <instructor> and <course>
• Inner nodes can have children.• Every node can have attributes.• Attribute values are quoted " or '. • Example: <ingredient quantity="2“ units="cups">flour</ingredient>
Rina Zviel-Girshin @Paralex 24
XSD
• The XML Schema language is also referred to as XML Schema Definition (XSD).
• The purpose of an XML Schema is to define the legal building blocks of an XML document or to validate XML file structure.
• XML Schemas are written in XML (no need to learn another new syntax and you can operate on your schemas with XML tools.).
• Defines a class of documents.• Individual documents (instances) can conform to a
given schema.
Rina Zviel-Girshin @Paralex 25
An XML Schema• Defines elements that can appear in a document. • Defines attributes that can appear in a document. • Defines
– which elements are child elements– the order of child elements – the number of child elements
• Defines whether an element is empty or can include text.
• Defines data types for elements and attributes. • Defines default and fixed values for elements and
attributes.
Rina Zviel-Girshin @Paralex 26
XSD file
• XML Schemas are extensible to future additions • XSD Schemas support data types. • XML Schemas support namespaces.• XML Schema file has a .xsd extension.• The file defines the elements of the legal XML
document.• The file starts with an <?xml version="1.0“?> prolog.• The <schema> element is the root element of every
XML Schema: <xs:schema and some attributes>.
Rina Zviel-Girshin @Paralex 27
Example Student.xsd
<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name=“Student"> <xsd:complexType> <xsd:sequence> <xsd:element name="first_name" type="xsd:string"/> <xsd:element name="last_name" type="xsd:string"/> <xsd:element name="id" type="xsd:integer"/> </xsd:sequence> </xsd:complexType> </xsd:element></xsd:schema>
Rina Zviel-Girshin @Paralex 28
Methods of Reading and Writing XML
// Code for creating the DataSet ds and loading the // DataSet from a data source not shown. DataSet ds;…String oFile = “C:\Rina\myXmlOutput.xsd”;String iFile = “C:\Rina\myXmlInput.xsd”; // Write the DataSet’s XMLSchema to an XML Documentds.WriteXmlSchema( oFile );
// Read/Upload XML Data into the DataSetds.ReadXml( iFile);
// Write the existing Data to an XML Documentds.WriteXml( "C:\Rina\myXMLData.xml", XmlWriteMode.DiffGram);
XmlWriteMode.DiffGram: writes the entire DataSet original and current values.
Rina Zviel-Girshin @Paralex 29
XML document and data table
• XML files are hierarchical data structures they can be treated as database tables.
• For this purpose the xml file should be limited to a three-level hierarchy:– Table name
• Rows– columns
Rina Zviel-Girshin @Paralex 30
Example
<?xml version=“1.0”?><customers><row><customer>levi</customer><city>tell-aviv</city><phone>039876543</phone><street>namir</street></row><row><customer>avivi</customer><city>eilat</city><phone>056999999</phone><street>shushanim</street></row>…</customers>
Customers tablecustomer city phone street
levi tell-aviv 039876543 namir
avivi eilat 056999999 shushanim
cohen haifa 048294444 prahim
The resulting XML document:
Rina Zviel-Girshin @Paralex 31
XML with DataSets
• A DataSet can be used to represent XML data.• A DataSet can represent XML data in two ways:
– Load XML directly into a DataSet
– ds.ReadXml(somefile);
– Build an XmlDataDocument class from an existing DataSet
– ds.ReadXml(somefile);
– XmlDataDocument xdd= new XmlDataDocument (ds);
Rina Zviel-Girshin @Paralex 32
Reading an XML file to a DataSet
<%@ Page Language="C#" %><%@ Import Namespace="System.Data" %><script runat=“server”>void Page_Load(Object sender , EventArgs e) { DataSet ds= new DataSet(); ds.ReadXml( MapPath( “Customers.xml" ) ); dgrd.DataSource = ds; dgrd.DataBind();}</script><html><head><title>ReadXmlFile.aspx</title></head><body><asp:DataGrid ID="dgrd" cellpadding="10" runat="server" /></body></html>
Rina Zviel-Girshin @Paralex 33
Output<?xml version="1.0"?><customers> <row> <customer>Levi</customer> <city>Tell-Aviv</city> <phone>039876543</phone> <street>Namir</street> </row> <row> <customer> Avivi</customer> <city>Eilat</city> <phone>056999999</phone> <street>Shushanim</street> </row> <row> <customer> Cohen</customer> <city>Haifa</city> <phone>048294444</phone> <street>Prahim</street> </row></customers>
Rina Zviel-Girshin @Paralex 34
ReadXml
DataSet ds= new DataSet();ds.ReadXml( MapPath( “Customers.xml" ) );
• A DataSet object is created. • ReadXml() method is used to read Customers.xml
file from the hard drive to this ds object.• MapPath() method or more correctly
Page.MapPath() method returns a physical path that a virtual path maps to.
• A ds object is bound to the DataGrid and displayed.
Rina Zviel-Girshin @Paralex 35
Using a Schema
• In last example a DataSet object guesses the structure of XML document.
• Checked is the elements under the root can be presented as tables.
• If not checks if it is a single table.• All elements presented as strings.• A best practice is to include the schema to
match the xml file.
Rina Zviel-Girshin @Paralex 36
Adding a Schema
• You specify a schema with an XML file in the following ways:– include the schema into the same file (schema
and data)– include schema’s name in prolog section of the
document– Read the schema separately using
ReadXmlSchema() method of a DataSet.
Rina Zviel-Girshin @Paralex 37
Example
<%@ Page Language="C#" %><%@ Import Namespace="System.Data" %>
<script runat=“server”>void Page_Load(Object sender , EventArgs e) { DataSet ds= new DataSet(); ds.ReadXmlSchema( MapPath( " Customers.xsd" ) ); ds.ReadXml( MapPath( " Customers.xml" ) ); dgrd.DataSource = ds; dgrd.DataBind();}</script>
Rina Zviel-Girshin @Paralex 38
Example
<html>
<head><title>ReadSchema.aspx</title></head>
<body>
<asp:DataGrid ID="dgrd" cellpadding="10"
runat="server" />
</body></html>
Rina Zviel-Girshin @Paralex 39
Writing an XML from a DataSet
• To retrieve a string representation of Xml data GetXml() method of the DataSet can be used.
• String strxml=ds.GetXml();• This method retrieves both: the XML data
and the XML schema for the DataSet.• To retrieve only a schema you can use
GetXmlSchema() method.
Rina Zviel-Girshin @Paralex 40
Example
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat=server>
void Page_Load(Object sender , EventArgs e) {
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection("Server=localhost;uid=sa; database=pubs" );
SqlDataAdapter da = new SqlDataAdapter( "Select * From authors", con);
da.Fill( ds, “DlastName" ); //name of DataMember
string strXml = ds.GetXml();
Response.Write( "<pre>" + Server.HtmlEncode( strXml) + "</pre>" );
}</script>
Rina Zviel-Girshin @Paralex 41
Writing to an Xml file or a Stream
• An XML representation of the DataSet can be written to a stream using:– WriteXml() method of the DataSet– WriteXmlSchema() method of the DataSet.
• You can choose the output stream and the writing mode:– DiffGram – writes Xml data in such way that it can be
uploaded to Sql200Server using UpdateGram method– IgnoreSchema – writes an xml data without including
the schema– WriteSchema – (the default) writes both the xml data
and the schema
Rina Zviel-Girshin @Paralex 42
Example<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat=“server”>
void Page_Load(Object sender , EventArgs e) {
string strXml;
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection("Server=localhost;uid=sa; database=pubs" );
SqlDataAdapter da = new SqlDataAdapter( "Select * From authors ", con);
da.Fill( ds, “DlastName" ); //name of DataMember
ds.WriteXml( Response.OutputStream, XmlWriteMode.IgnoreSchema );
}</script> Writes an XML representation of the DataSet to the Response object OutputStream.
Rina Zviel-Girshin @Paralex 43
System.Xml namespace
XmlReaderXmlReaderXmlReaderXmlReader
XmlWriterXmlWriterXmlWriterXmlWriter
XmlDocumentXmlDocumentXmlDocumentXmlDocument
XmlElementXmlElementXmlElementXmlElement
XmlAttributeXmlAttributeXmlAttributeXmlAttribute
System.XmlSystem.Xml
XmlNodeReaderXmlNodeReaderXmlNodeReaderXmlNodeReader
and moreand more
XmlTextReaderXmlTextReaderXmlTextReaderXmlTextReader
XmlTextWriterXmlTextWriterXmlTextWriterXmlTextWriter
XmlDataDocumentXmlDataDocumentXmlDataDocumentXmlDataDocument
In .NET exist a group of classes that can be used to process XML data
Rina Zviel-Girshin @Paralex 44
XmlDataDocument
• The ADO.NET DataSet provides you with a relational representation of data (tables).
• Sometimes a tree representation of the DataSet can be useful.
• For hierarchical data access, you can use the XmlDataDocument class of .NET.
• The DataSet can be associated with an XmlDataDocument by adding a DataSet name in the constructor of an XmlDataDocument object.
• XmlDataDocument xdd = new XmlDataDocument( ds );
Rina Zviel-Girshin @Paralex 45
Example<%@ Page Language="C#" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Xml" %>
<script runat="server">
void Page_Load(Object sender , EventArgs e) {
DataSet ds =new DataSet();
ds.ReadXml( MapPath( "Customers.xml" ) );
XmlDataDocument xdd = new XmlDataDocument( ds );
XmlNodeList nl = xdd.GetElementsByTagName("customer");
for( int i=0; i< nl.Count; i++)
{ lblOutput.Text += nl[i].InnerXml; }
}
</script>
Rina Zviel-Girshin @Paralex 46
Example
<html><head> <title>XmlDataDocument.aspx</title>
</head>
<body> <h2>All Customers </h2>
<asp:Label id="lblOutput" Runat="Server"></asp:Label>
</body></html>
Rina Zviel-Girshin @Paralex 47.NET Data Provider.NET Data Provider
A DataSet associated with an XmlDataDocument
SyncSync
XmlReaderXmlReader
XmlText-XmlText-ReaderReader
XmlNode-XmlNode-ReaderReader
XmlData-XmlData-DocumentDocument
DataSetDataSet
DataReaderDataReader
SqlData-SqlData-ReaderReader
OleDbData-OleDbData-ReaderReader
DataAdapterDataAdapter
SqlData-SqlData-AdapterAdapter
OleDbData-OleDbData-AdapterAdapter
Rina Zviel-Girshin @Paralex 48
XmlTextReader
• An XmlTextReader class provides a fast forward only access to the raw data contained in XML document.
• Example:
XmlTextReader xmltr;
xmltr = new XmlTextReader("MyFile.xml");
while(xmltr.Read())
{ …processing… }
Rina Zviel-Girshin @Paralex 49
XmlTextWriter
• An XmlTextWriter class provides a fast forward only method to write data to an Xml file.
• The resulting XML file conforms to the W3C XML version 1.0 and the Namespaces in XML specifications.
• To create an XmlTextWriter object a constructor with file straem name or object and encoding type should be used.
• Example:• XmlTextWriter xmltw = new XmlTextWriter (“stam.xml",
Encoding.Unicode);
Rina Zviel-Girshin @Paralex 50
XmlTextWriter methods• The most important methods are: • WriteStartDocument() - is called to start creating
an XML document. This will create the first line in the XML document (a prolog).
• WriteStartElement(string) - this method creates a new element in the XML document with the name specified by the string input parameter. (You can also specify a namespace as a second, optional string parameter.)
• WriteEndElement() - this method closes off the element created in the WriteStartElement(string) method call.
Rina Zviel-Girshin @Paralex 51
More methods• WriteElementString(name, text_value) – is used to
create an XML element with nothing but text content (i.e., no nested elements).
• WriteAttributeString(name, value) – writes/adds an attribute name and value to the current element.
• WriteEndDocument() - this method completes the writing of the XML document.
• Close() - closes the underlying stream, writing the contents of the XML document to the specified file location.
Rina Zviel-Girshin @Paralex 52
A partial Example
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Text" %>
<script language="C#" runat="server">
void Page_Load(object sender, EventArgs e)
{
XmlTextWriter writer = new XmlTextWriter(MapPath("userInfo.xml"), Encoding.UTF8);
writer.WriteStartDocument();
writer.WriteStartElement("bookstore");
writer.WriteStartElement("book", null);
writer.WriteAttributeString("genre","autobiography");
writer.WriteAttributeString("publicationdate","1979");
writer.WriteAttributeString("ISBN","0-7356-0562-9");
writer.WriteElementString("title", null, "The Autobiography of Mark Twain");
Rina Zviel-Girshin @Paralex 53
A partial Example writer.WriteStartElement("Author", null);
writer.WriteElementString("first-name", "Mark");
writer.WriteElementString("last-name", "Twain");
writer.WriteEndElement();
writer.WriteElementString("price", "7.99");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
}
Rina Zviel-Girshin @Paralex 54
An asp:XML control
• XML files can be imported to a Web page directly without converting them from their hierarchical structures into DataSet tables.
• Xml file can be combined with special stylesheets and displayed through an <asp:Xml> control in the general format shown below.
• Example:<asp:Xml id=“name" runat="server"
DocumentSource="path.xml" TransformSource="path.xsl“ />
Rina Zviel-Girshin @Paralex 55
Any Questions?