ASP.NET Tutorial/ADO.net Database/DataRelation

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

Using Data Relations

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default_aspx" %> <!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">
    <asp:GridView ID="GridView1" 
                  runat="server"
             CellPadding="4" 
       ForeColor="#333333" 
       GridLines="None" 
       DataKeyNames="OrderID" 
       AutoGenerateColumns="False" 
       PagerSettings-Mode="Numeric"
       AllowPaging="true"
       PageSize="5"
       OnSelectedIndexChanged="OnSelectedIndexChangedHandler" >
       <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
       <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
       <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
       <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
       <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
       <EditRowStyle BackColor="#999999" />
       <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
       <Columns>
         <asp:ButtonField ButtonType="Button" CommandName="Select" Text="Details" />
         <asp:BoundField DataField="OrderID" HeaderText="Order ID" />
         <asp:BoundField DataField="OrderDate" HeaderText="Order Date" />
         <asp:BoundField DataField="CompanyName" HeaderText="Company" />
         <asp:BoundField DataField="ContactTitle" HeaderText="Contact" />
         <asp:BoundField DataField="Phone" HeaderText="Phone" />
       </Columns>
    </asp:GridView>
    
<asp:Panel id="OrderDetailsPanel" runat=server Height=50px Width=125px > <asp:GridView ID="DetailsGridView" runat="server" AutoGenerateColumns="False" BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None"> <FooterStyle BackColor="Tan" /> <Columns> <asp:BoundField DataField="OrderDate" HeaderText="Order Date" /> <asp:BoundField DataField="ProductName" HeaderText="Product" /> <asp:BoundField DataField="UnitPrice" HeaderText="Price" /> <asp:BoundField DataField="Quantity" HeaderText="Quantity" /> </Columns> <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" /> <HeaderStyle BackColor="Tan" Font-Bold="True" /> <AlternatingRowStyle BackColor="PaleGoldenrod" /> </asp:GridView> </asp:Panel>
<asp:GridView ID="OrderRelationsGridView" runat="server" BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4"> <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" /> <RowStyle BackColor="White" ForeColor="#330099" /> <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" /> <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" /> </asp:GridView>
   </form>

</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; 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.Text; using System.Data.SqlClient; public partial class Default_aspx : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
    DataSet ds = CreateDataSet();
    GridView1.DataSource = ds.Tables[0];
    GridView1.DataBind();
    DataView detailsView = new DataView(ds.Tables[1]);
    DetailsGridView.DataSource = detailsView;
    Session["DetailsView"] = detailsView;
    DetailsGridView.DataBind();
    OrderRelationsGridView.DataSource = ds.Relations;
    OrderRelationsGridView.DataBind();
   }
  private DataSet CreateDataSet()
  {
    string connectionString = "Data Source=LocalHost;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=sa_0001";
    System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString);
    connection.Open();
    System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand();
    command.Connection = connection;
    StringBuilder s = new StringBuilder("select OrderID, c.rupanyName, c.ContactName, ");
    s.Append(" c.ContactTitle, c.Phone, orderDate");
    s.Append(" from orders o ");
    s.Append("join customers c on c.CustomerID = o.CustomerID");
    command.rumandText = s.ToString();
    SqlDataAdapter dataAdapter = new SqlDataAdapter();
    dataAdapter.SelectCommand = command;
    dataAdapter.TableMappings.Add("Table", "Orders");
    DataSet dataSet = new DataSet();
    dataAdapter.Fill(dataSet);
    System.Data.SqlClient.SqlCommand command2 =
      new System.Data.SqlClient.SqlCommand();
    command2.Connection = connection;
    StringBuilder s2 = new StringBuilder("Select od.OrderID, OrderDate, p.ProductID, ");
    s2.Append(" ProductName, od.UnitPrice, Quantity ");
    s2.Append("from Orders o ");
    s2.Append("join [Order Details] od on o.orderid = od.orderid ");
    s2.Append("join products p on p.productID = od.productid ");
    command2.rumandText = s2.ToString();
    SqlDataAdapter dataAdapter2 = new SqlDataAdapter();
    dataAdapter2.SelectCommand = command2;
    dataAdapter2.TableMappings.Add("Table", "Order Details");
    dataAdapter2.Fill(dataSet);
    System.Data.SqlClient.SqlCommand command3 =
      new System.Data.SqlClient.SqlCommand();
    command3.Connection = connection;
    string strCommand3 = "Select ProductID, ProductName from Products";
    command3.rumandText = strCommand3;
    SqlDataAdapter dataAdapter3 = new SqlDataAdapter();
    dataAdapter3.SelectCommand = command3;
    dataAdapter3.TableMappings.Add("Table", "Products");
    dataAdapter3.Fill(dataSet);
    System.Data.DataRelation dataRelation;
    System.Data.DataColumn dataColumn1;
    System.Data.DataColumn dataColumn2;
    dataColumn1 = dataSet.Tables["Orders"].Columns["OrderID"];
    dataColumn2 = dataSet.Tables["Order Details"].Columns["OrderID"];
    dataRelation =
      new System.Data.DataRelation(
      "OrdersToDetails",
      dataColumn1,
      dataColumn2);
    dataSet.Relations.Add(dataRelation);
    dataColumn1 = dataSet.Tables["Products"].Columns["ProductID"];
    dataColumn2 = dataSet.Tables["Order Details"].Columns["ProductID"];
    dataRelation =
      new System.Data.DataRelation(
      "ProductIDToName",
      dataColumn1,
      dataColumn2);
    dataSet.Relations.Add(dataRelation);
    return dataSet;
  }
 public void OnSelectedIndexChangedHandler(Object sender, EventArgs e)
 {
   UpdateDetailsGrid();
 }
 private void UpdateDetailsGrid()
 {
   int index = GridView1.SelectedIndex;
   if (index != -1)
   {
     DataKey key = GridView1.DataKeys[index];
     int orderID = (int)key.Value;
     DataView detailsView = (DataView)Session["detailsView"];
     detailsView.RowFilter = "OrderID = " + orderID;
     DetailsGridView.DataSource = detailsView;
     DetailsGridView.DataBind();
     OrderDetailsPanel.Visible = true;
   }
   else
   {
     OrderDetailsPanel.Visible = false;
   }
 }

}</source>