📄 mycars.aspx
字号:
<%@ Page Language="C#" EnableViewState="True" EnableSessionState="True"%>
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.SqlClient" %>
<%@Import Namespace="System.Web.Mail"%>
<%@Register TagPrefix="wcc" TagName="sendmail" Src="../sendmail.ascx"%>
<script runat="server">
// --------------------------------------------------
// page-level variable to hold style size
String sStyleSize = "Standard";
// page-level variable to hold current user ID
String sUserID;
// page-level variable to hold DB connection string
String sConnect;
// page-level variable to user and order details DataSet
DataSet dsDetails;
// --------------------------------------------------
void Page_Load() {
// get style sheet size from Session
sStyleSize = (String)Session["WccStyleSize"];
// if no value, session has expired or user entered
// site at page other than "Home" page
if (sStyleSize == "") {
Response.Clear();
Response.Redirect("../default.aspx");
Response.End();
}
// get connection string from web.config
sConnect = ConfigurationSettings.AppSettings["XroxCarsConnectString"];
// flag for checking if user is authenticated
Boolean bAuthenticated = false;
// check what type of session support we are using
if (Session.IsCookieless) {
// cookie-less sessions, so look in session
if ((String)Session["WCCUserAuthenticated"] == "yes") {
bAuthenticated = true;
sUserID = (String)Session["WCCUserID"];
}
else { // not authenticated
Response.Clear();
Response.Redirect("login.aspx");
Response.End();
}
}
else {
// get name of authenticated current user from Forms
// authentication system - User ID can be extracted from
// the User object implemented by Forms authentication
bAuthenticated = User.Identity.IsAuthenticated;
sUserID = User.Identity.Name;
}
// set the email address of the Webmaster
try {
String sWebmasterEmail =
ConfigurationSettings.AppSettings["XroxCarsWebmasterEmail"];
lnkWebmaster.NavigateUrl = "mailto:" + sWebmasterEmail
+ "?subject=Xrox Cars Web Site";
lnkWebmaster.Text = sWebmasterEmail;
}
catch (Exception e) {}
// see if the user has been authenticated. Should always be
// true as we redirect to the Login page when using cookie-less
// sessions for non-authenticated users and the Forms
// authentication system will prevent anonymous users getting
// this far by redirecting then to the Login page as well
if (bAuthenticated) {
if (! Page.IsPostBack) {
// this is the first time the page has been loaded
// get user's details and quotes from database
dsDetails = GetUserDetailsDS();
if (dsDetails == null) {
lblDetail.Text = "<b>* Could not access database.</b>";
}
else {
// display registered users details, quotes and orders
DisplayUserDetails(dsDetails);
DisplayUserVehicles(dsDetails);
}
}
}
else {
lblDetail.Text = "<b>* Not authenticated</b>";
}
}
// --------------------------------------------------
// extract user's name/address/etc from DataSet
// and display them at the top of the page
void DisplayUserDetails(DataSet dsDetails) {
DataRow drDetails = dsDetails.Tables["UserDetail"].Rows[0];
lblHeading.Text = "Welcome " + drDetails["UserName"];
lblDetail.Text = "Registered Address: <b>"
+ drDetails["Address"] + ", " + drDetails["City"]
+ ", " + drDetails["State"] + ", "
+ drDetails["Country"] + "</b><br />Phone: <b>"
+ drDetails["Phone"] + "</b> Email: <b>"
+ drDetails["Email"] + "</b>";
}
// --------------------------------------------------
// extract lists of quotes and orders for this user from
// DataSet and display in Repeaters in this page
void DisplayUserVehicles(DataSet dsDetails) {
// get a filtered DataView of just the quotations
DataView dvQuotes = dsDetails.Tables["Orders"].DefaultView;
dvQuotes.RowFilter = "IsOrder = 0";
if (dvQuotes.Count > 0) {
// at least one quote so make Quotes heading visible
lblQuotesHeading.Visible = true;
}
// bind quotations Repeater control to display them
// if no quotes, this removes existing ones in ViewState
repQuotes.DataSource = dvQuotes;
repQuotes.DataBind();
// get a filtered DataView of just the orders
dvQuotes.RowFilter = "IsOrder = 1";
if (dvQuotes.Count > 0) {
// at least one order so make Orders heading visible
lblOrdersHeading.Visible = true;
}
// bind orders Repeater control to display them
repOrders.DataSource = dvQuotes;
repOrders.DataBind();
}
// --------------------------------------------------
// runs when the "Log Off" button is clicked
void DoSignOut(object objSender, EventArgs objArgs) {
// destroy the users authentication cookie
FormsAuthentication.SignOut();
// clear authenticated flag in session
Session["WCCUserAuthenticated"] = "no";
// redirect them to the Home page
Response.Clear();
Response.Redirect("../home.aspx");
Response.End();
}
// --------------------------------------------------
// function to get current user's details as a DataSet
DataSet GetUserDetailsDS() {
// to hold DataSet for the results
DataSet dsUserDetail = null;
// to hold stored procedure names
String sDetailsProc = "GetUserDetails";
String sOrdersProc = "GetUserOrders";
String sOrderLinesProc = "GetUserOrderLines";
SqlConnection sqlConn = new SqlConnection(sConnect);
SqlCommand sqlComm = new SqlCommand(sDetailsProc, sqlConn);
sqlComm.CommandType = CommandType.StoredProcedure;
sqlComm.Parameters.Add("@UserID", sUserID);
try {
// create a new empty DataSet for the results
dsUserDetail = new DataSet();
// and fill it from the database
SqlDataAdapter daUserDetail = new SqlDataAdapter(sqlComm);
sqlConn.Open();
if (daUserDetail.Fill(dsUserDetail, "UserDetail") == 1) {
// found details for a single user as expected so fill other
// tables in DataSet with all quotation and order details
sqlComm.CommandText = sOrdersProc;
daUserDetail.Fill(dsUserDetail, "Orders");
sqlComm.CommandText = sOrderLinesProc;
daUserDetail.Fill(dsUserDetail, "OrderLines");
// create relationship between Orders and OrderLines tables
// and add it to the DataSet object's Relations collection
DataRelation oRelation = new DataRelation("relOrders",
dsUserDetail.Tables["Orders"].Columns["QuoteOrderID"],
dsUserDetail.Tables["OrderLines"].Columns["QuoteOrderID"]);
dsUserDetail.Relations.Add(oRelation);
}
else {
dsUserDetail = null;
}
}
catch (Exception e) {
dsUserDetail = null;
}
finally {
sqlConn.Close();
}
// return DataSet - will be null if there was an error
return dsUserDetail;
}
// --------------------------------------------------
// runs for each row in Quotes Repeater as it is databound
void QuotesListDatabound(object oSender, RepeaterItemEventArgs oArgs) {
// see if it is an item or alternating item row
if (oArgs.Item.ItemType == ListItemType.Item
|| oArgs.Item.ItemType == ListItemType.AlternatingItem) {
// show Finance terms section only if not zero
DataRowView oDRV = (DataRowView)oArgs.Item.DataItem;
if ((int)oDRV["PaymentMonths"] > 0) {
Label oCtrl = (Label)oArgs.Item.FindControl("lblFinance");
oCtrl.Visible = true;
}
// get DataView of related child rows from OrderLines table
// (tblQuoteOrderExtras in database) and bind to nested Repeater
// control that appears in each row of the parent Repeater
Repeater oLinesRep = (Repeater)oArgs.Item.FindControl("repQuoteLines");
oLinesRep.DataSource = oDRV.CreateChildView("relOrders");
oLinesRep.DataBind();
}
}
// --------------------------------------------------
// runs for each row in Orders Repeater as it is databound
void OrdersListDatabound(object oSender, RepeaterItemEventArgs oArgs) {
// see if it is an item or alternating item row
if (oArgs.Item.ItemType == ListItemType.Item
|| oArgs.Item.ItemType == ListItemType.AlternatingItem) {
// get DataView of related child rows from OrderLines table
// (tblQuoteOrderExtras in database) and bind to nested Repeater
// control that appears in each row of the parent Repeater
Repeater oLinesRep = (Repeater)oArgs.Item.FindControl("repOrderLines");
DataRowView oDRV = (DataRowView)oArgs.Item.DataItem;
oLinesRep.DataSource = oDRV.CreateChildView("relOrders");
oLinesRep.DataBind();
}
}
// --------------------------------------------------
// simple routine to convert a Quote into an Order
// in reality would probably collect payment information first
void PlaceOrder(object oSender, RepeaterCommandEventArgs oArgs) {
// get order ID from routine arguments
Button oCtrl = (Button)oArgs.CommandSource;
String sOrderID = oCtrl.CommandName;
int iOrderID = Int32.Parse(sOrderID);
// to hold stored procedure name
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -