Материал из .Net Framework эксперт
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Using Data Relations
<%@ 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">
<div>
<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>
<br />
<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>
<br />
<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>
</div>
</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;
}
}
}