⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mycars.aspx

📁 ASP.NET Web Forms Techniques
💻 ASPX
📖 第 1 页 / 共 2 页
字号:
<%@ 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> &nbsp; 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 + -