ASP.NET Tutorial/XML/DataGrid

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Binding XML data to DataGrid (VB.net)

   <source lang="csharp">

<%@ Page Language="VB" %> <%@ Import Namespace="System.Xml" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <script runat=server>

  private i, j as integer
  sub Page_Load(Sender as Object, e as EventArgs)
     dim xmldoc as new XmlDataDocument()
        
        xmldoc.DataSet.ReadXml(Server.MapPath("Data.xml"))
        
        DataGrid1.DataSource = xmldoc.DataSet
        DataGrid1.DataMember = xmldoc.DataSet.Tables(0).TableName
        DataGrid2.DataSource = xmldoc.DataSet
        DataGrid2.DataMember = xmldoc.DataSet.Tables(1).TableName
        
        DataGrid1.DataBind()
        DataGrid2.DataBind()
        
        For i = 0 To xmldoc.DataSet.Tables.Count - 1
           output.Text += "TableName = """ & _
              xmldoc.DataSet.Tables(i).TableName & """
" output.Text += "Columns count " & _ "= " & xmldoc.DataSet.Tables(i).Columns.Count. _ ToString() & "
" For j = 0 To xmldoc.DataSet.Tables(i).Columns.Count-1 output.Text += "ColumnName = """ & xmldoc.DataSet. _ Tables(i).Columns(j).ColumnName & """, " & _ "type = " & xmldoc.DataSet.Tables(i). _ Columns(j).DataType.ToString() & "
" Next Next output.Text += "" end sub

</script> <html><body>

  <asp:Label id="output" runat="server" />
  
  <asp:DataGrid id="DataGrid1" runat="server" 
        BorderColor="black" 
        GridLines="Vertical" 
        ItemStyle-BackColor="#ffffff"
        AlternatingItemStyle-Backcolor="#cccccc" />
  
  <asp:DataGrid id="DataGrid2" runat="server" 
        BorderColor="black" 
        GridLines="Vertical" 
        AlternatingItemStyle-Backcolor="#cccccc" />

</body> </html> File: Data.xml

<?xml version="1.0"?> <bookstore>

 <book genre="asdf">
   <title>asdf</title>
   <author>
     <first-name>asdf</first-name>
     <last-name>asdf</last-name>
   </author>
   <price>asdf</price>
 </book>
 <book genre="asdf">
   <title>asdf</title>
   <author>
     <first-name>asdf</first-name>
     <last-name>asdf</last-name>
   </author>
   <price>asdf</price>
 </book>
 <book genre="asdf">
   <title>asdf</title>
   <author>
     <first-name>asdf</first-name>
     <last-name>asdf</last-name>
   </author>
   <price>asdf</price>
 </book>

</bookstore></source>


Save data from DataGrid to XML

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="DataSetXml" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Untitled Page</title>

</head> <body>

   <form id="form1" runat="server">

Data from SQL Server

     <asp:DataGrid id="Datagrid1" runat="server" HeaderStyle-Font-Bold="true"></asp:DataGrid>

Data from the XML file

     <asp:DataGrid id="Datagrid2" runat="server" HeaderStyle-Font-Bold="true"></asp:DataGrid>
   </form>

</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Web.Configuration; public partial class DataSetXml : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
   string connectionString = WebConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;
   string sql = "SELECT TOP 5 EmployeeID, TitleOfCourtesy, LastName, FirstName FROM Employees";
   SqlConnection conn = new SqlConnection(connectionString);
   SqlDataAdapter da = new SqlDataAdapter(sql, conn);
   DataSet ds = new DataSet();
   da.Fill(ds, "Employees");
   Datagrid1.DataSource = ds.Tables["Employees"];
   Datagrid1.DataBind();
   string xmlFile = Server.MapPath("Employees.xml");
   ds.WriteXml(xmlFile, XmlWriteMode.WriteSchema);
   DataSet dsXml = new DataSet();
   dsXml.ReadXml(xmlFile);
   Datagrid2.DataSource = dsXml.Tables["Employees"];
   Datagrid2.DataBind();
   }

} File: Web.config <?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.ru/.NetConfiguration/v2.0">

 <appSettings/>
 <connectionStrings>
   <add name="Northwind" connectionString="Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI"/>
 </connectionStrings>
 

</configuration></source>


Use DataGrid to edit data in XML (VB.net)

   <source lang="csharp">

<%@ Page Language="VB" %> <%@ Import Namespace="System.Xml" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <script runat=server>

  private i, j as integer
  private strOutput as string = ""
  public xmldoc as new XMLDataDocument()
  
  sub Page_Load(Sender as Object, e as EventArgs)
     if not Page.IsPostBack then
        GetData()
        BindControl()
     end if
  end sub
  
  sub UpdateBtn_Click(Sender as Object, e as EventArgs)
     dim Title as TextBox
     dim Genre as TextBox
     dim Style as TextBox
     dim Price as TextBox
     
     GetData()
     
     "update data
     For i = 0 To DataGrid1.Items.Count-1
        Title = DataGrid1.Items(i).FindControl("Title")
        Genre = DataGrid1.Items(i).FindControl("Genre")
        Price = DataGrid1.Items(i).FindControl("Price")
     
        xmldoc.DataSet.Tables(0).Rows(i)("title") = Title.Text
        xmldoc.DataSet.Tables(0).Rows(i)("genre") = Genre.Text
        xmldoc.DataSet.Tables(0).Rows(i)("price") = Price.Text
     Next
     
     try
        xmldoc.Save(Server.MapPath("Data.xml"))
     catch
        output.Text = "Error updating data"
     end try
     
     BindControl()
  end sub
  
  sub GetData()
     try
        xmldoc.DataSet.ReadXml(Server.MapPath("Data.xml"))
     catch ex as Exception
        output.Text = "Error accessing XML file"
     end try
  end sub
  
  sub BindControl()
     DataGrid1.DataSource = xmldoc.DataSet
     DataGrid1.DataMember = xmldoc.DataSet.Tables(0).TableName
     DataGrid1.DataBind()
  end sub

</script> <html><body>

  <asp:Label id="output" runat="server" />
  <form runat="server">
  <asp:DataGrid id="DataGrid1" runat="server" 
     BorderColor="black" 
     GridLines="Vertical" 
     HeaderStyle-BackColor="#cccc99"
     ItemStyle-BackColor="#ffffff"
     AlternatingItemStyle-Backcolor="#cccccc" 
     AutogenerateColumns="false" >
     <Columns>
        <asp:TemplateColumn HeaderText="Title">
           <ItemTemplate>
              <asp:TextBox id="Title" runat="server" 
                 Text="<%# Container.DataItem("title") %>" />
           </ItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="Genre">
           <ItemTemplate>
              <asp:TextBox id="Genre" runat="server" 
                 Text="<%# Container.DataItem("genre") %>" 
                 width="75px" />
           </ItemTemplate>
        </asp:TemplateColumn>
        <asp:TemplateColumn HeaderText="Price">
           <ItemTemplate>
              <asp:TextBox id="Price" runat="server" 
                 Text="<%# Container.DataItem("price") %>"
                 width="50px" />
           </ItemTemplate>
        </asp:TemplateColumn>
     </Columns>     
  </asp:DataGrid>
  
  <asp:Button id="update" runat="server"
     OnClick="UpdateBtn_Click"
     text="Update!" />
  </form>

</body> </html> File: Data.xml <?xml version="1.0"?> <bookstore>

 <book genre="asdf">
   <title>asdf</title>
   <author>
     <first-name>asdf</first-name>
     <last-name>asdf</last-name>
   </author>
   <price>asdf</price>
 </book>
 <book genre="asdf">
   <title>asdf</title>
   <author>
     <first-name>asdf</first-name>
     <last-name>asdf</last-name>
   </author>
   <price>asdf</price>
 </book>
 <book genre="asdf">
   <title>asdf</title>
   <author>
     <first-name>asdf</first-name>
     <last-name>asdf</last-name>
   </author>
   <price>asdf</price>
 </book>

</bookstore></source>