ASP.NET Tutorial/Data Binding/DataList

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

A DataList control that contains a template that includes two DataBinding expressions.

<%@ Page Language="C#" %>
<!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 id="Head1" runat="server">
    <title>Show DataList</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DataList
        id="DataList1"
        DataSourceId="srcProducts"
        Runat="server">
        <ItemTemplate>
        <b>Product Title:</b>
        <%#Eval("Title")%>
        <br />
        <b>Date Released:</b>
        <%#Eval("DateReleased", "{0:D}") %>
        <hr />
        </ItemTemplate>
    </asp:DataList>
    <asp:SqlDataSource
        id="srcProducts"
        ConnectionString="Data Source=.\SQLExpress;
            AttachDbFilename=|DataDirectory|MyDatabase.mdf;
            Integrated Security=True;User Instance=True"
        SelectCommand="SELECT Title,Director,DateReleased FROM Products"
        Runat="server" />
    </div>
    </form>
</body>
</html>


Get an flexible and feature-rich UI using the DataList control

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" 
    Inherits="Default" %>
<!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>DataList in action</title>
</head>
<body>
    <div id="pageContent">
        <form id="form1" runat="server">
            <asp:DropDownList ID="Countries" runat="server" 
                AutoPostBack="true" 
                AppendDataBoundItems="True" 
                OnSelectedIndexChanged="Countries_SelectedIndexChanged">
                <asp:ListItem>[No country]</asp:ListItem>
            </asp:DropDownList>
            
            <asp:DataList ID="DataList1" runat="server" RepeatColumns="5" GridLines="Both">
                <FooterStyle Font-Bold="true" ForeColor="blue" />
                <HeaderTemplate>
                    <h2>We have customers in the following cities</h2>
                </HeaderTemplate> 
                <ItemTemplate>
                    <%# Eval("City") %> &nbsp;&nbsp;<b><%# Eval("Country")%></b>
                </ItemTemplate>
                <FooterTemplate>
                    <%# CalcTotal() %> cities
                </FooterTemplate>
            </asp:DataList>
        </form>
    </div>
</body>
</html>
File: Default.aspx.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default : System.Web.UI.Page
{
    DataTable data;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            FillCountries();
        }
    }
    protected void FillCountries()
    {
        string connString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
        string cmdText = "SELECT DISTINCT country FROM customers;";
        data = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter(cmdText, connString);
        adapter.Fill(data);
        Countries.DataSource = data;
        Countries.DataTextField = "country";
        Countries.DataBind();
    }
    protected int CalcTotal()
    {
        return data.Rows.Count;
    }
    protected void Countries_SelectedIndexChanged(object sender, EventArgs e)
    {
        string connString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
        string cmdText = "SELECT DISTINCT country, city FROM customers WHERE country=@TheCountry";
        data = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter(cmdText, connString);
        adapter.SelectCommand.Parameters.AddWithValue("@TheCountry", Countries.SelectedValue);
        adapter.Fill(data);
        DataList1.DataSource = data;
        DataList1.DataBind();
    }
}


Nested data bind sample

<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
         <h2>Nested data bind sample</h2>
         <asp:DataList ID="_outerDataList" runat="server" 
                      DataSourceID="_bookstoreDataSource">
          <ItemTemplate>
            Title: <%# Eval("Title") %><br />
            <asp:DataList runat="server" ID="_nestedDastaList"
                 DataSource="<%# XPathSelect("chapter") %>">
              <ItemTemplate>
                <h4>Chapternum: <%# XPath("@num") %></h4>
                <h4>Chapter name: <%# XPath("@name") %></h4>
                <%# XPath(".") %>
                <br />
              </ItemTemplate>
            </asp:DataList>
            <br />
          </ItemTemplate>
        </asp:DataList>
        <asp:XmlDataSource ID="_bookstoreDataSource" 
                           runat="server" DataFile="~/App_Data/Data.xml"
                           XPath="/Data/genre/book" />
            
                
    </div>
    </form>
</body>
</html>
File: Data.xml
<Data>
  <genre name="Business">
    <book ISBN="1" Title="Database" Price="19.99">
      <chapter num="1" name="Introduction">
        Abstract...
      </chapter>
      <chapter num="2" name="Body">
        Abstract...
      </chapter>
      <chapter num="3" name="Conclusion">
        Abstract...
      </chapter>
    </book>
    <book ISBN="2" Title="Computer" Price="2.99">
      <chapter num="1" name="Introduction">
        Abstract...
      </chapter>
      <chapter num="2" name="Body">
        Abstract...
      </chapter>
      <chapter num="3" name="Conclusion">
        Abstract...
      </chapter>
    </book>
    <book ISBN="3" Title="VB" Price="19.99">
      <chapter num="1" name="Introduction">
        Abstract...
      </chapter>
      <chapter num="2" name="Body">
        Abstract...
      </chapter>
      <chapter num="3" name="Conclusion">
        Abstract...
      </chapter>
    </book>
  </genre>
</Data>