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

📄 compare.aspx

📁 ASP.NET Web Forms Techniques
💻 ASPX
字号:
<%@ Page Language="C#" EnableViewState="True" EnableSessionState="ReadOnly" SmartNavigation="False"%>
<%@Import Namespace="System.Data"%>
<%@Import Namespace="System.Data.SqlClient"%>
<%@Register TagPrefix="wcc" TagName="pagebanner" Src="ascx/pagebanner.ascx" %>
<%@Register TagPrefix="wcc" TagName="mainlink" Src="ascx/mainlink.ascx" %>
<%@Register TagPrefix="wcc" TagName="footerlinks" Src="ascx/footerlinks.ascx" %>

<script runat="server">
// -------------------------------------------------------------------

// page-level variable to hold database connection string
String sConnect;

// page-level variable to style sheet size
String sStyleSize = "";

// page-level variable to hold client script ability
Boolean bCanScript;

// page-level variable to hold text comparison description
String sCompareType = "";

// -------------------------------------------------------------------

void Page_Load() {

  // get database connection string from web.config
  sConnect = ConfigurationSettings.AppSettings["XroxCarsConnectString"];

  // 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");
  }

  // see if client supports client-side scripting
  bCanScript = (Boolean)(Session["WccCanScript"] == "True");

  // if not make "Compare" submit button visible
  // because AutoPostBack will not work
  if (! bCanScript) {
    btnGo.Visible = true;
  }

  if (Page.IsPostBack) {

    // generate chart for selected items
    ShowComparison();

  }
  else {

    // first time page has loaded, not a postback, so
    // set DataSource for "car models" list and data-bind it
    chkModels.DataSource = GetModelListDR();
    chkModels.DataTextField = "ViewName";
    chkModels.DataBind();

    // see if a model was specified in query string
    // if so, need to generate chart or table this time
    String sQuery = Request.QueryString["compare"];
    if (sQuery != "" && sQuery != null) {

      // select the appropriate checkboxes
      foreach (ListItem lstItem in chkModels.Items) {
        if (lstItem.Text.IndexOf(sQuery) == 0) {
          lstItem.Selected = true;
        }
      }

      // generate chart of comparisons
      ShowComparison();

    }
  }
}

// -------------------------------------------------------------------

// routine to show the comparison image or table
void ShowComparison() {

  // see if any checkboxes are selected
  // if not just exit from routine
  if (chkModels.SelectedIndex == -1) return;

  // get text comparison description
  sCompareType = optCompareList.SelectedItem.Text;

  // see if we are generating a chart or a table
  if (optShowChart.Checked) {

    // insert new Image element for chart into page
    // could pass values in session but using the
    // query string is probably more efficient
    Image ctlImage = new Image();
    ctlImage.ImageUrl = GetImageURL();
    ctlImage.AlternateText = "Chart showing comparison of " + sCompareType;
    String sLongDesc;
    sLongDesc = "Use the option buttons located just before this "
              + "chart to display the data as a text-based table.";
    ctlImage.Attributes.Add("longdesc", sLongDesc);
    ctlPlaceholder.Controls.Add(ctlImage);

  }
  else  { // generate a table of the results

    // Set DataSource and bind DataReader to DataGrid
    dgrResult.DataSource = GetCompareDR();
    dgrResult.DataBind();
  }
}

// -------------------------------------------------------------------

// function to generate URL and query string for image
String GetImageURL() {

  String sQuery = "";

  // create a string for each selected checkbox
  String sText, sModel, sEngine;
  foreach (ListItem lstItem in chkModels.Items) {
    if (lstItem.Selected) {
      sText = lstItem.Text;
      sModel = sText.Substring(0, sText.IndexOf(" "));
      sEngine = sText.Substring(sText.IndexOf(" ") + 1);
      sQuery += sModel + " " + sEngine + "*";
    }
  }

  // remove final "|" from string
  sQuery = sQuery.Substring(0, sQuery.Length - 1);

  // use string of models to build complete URL
  return "compare-chart.aspx?ctype="
         + optCompareList.SelectedIndex.ToString()
         + "&list=" + Server.UrlEncode(sQuery);

}

// -------------------------------------------------------------------

// function to create list of models for CheckBoxList captions
SqlDataReader GetModelListDR() {
  try {
    SqlConnection sqlConnect = new SqlConnection(sConnect);
    String sProcName = "GetModelEngineCombinedList";
    SqlCommand sqlComm = new SqlCommand(sProcName, sqlConnect);
    sqlComm.CommandType = CommandType.StoredProcedure;
    sqlConnect.Open();
    return sqlComm.ExecuteReader(CommandBehavior.CloseConnection);
  }
  catch (Exception e) {
    lblTableCaption.Text = "Sorry, the database cannot be accessed.";
    return null;
  }
}

// -------------------------------------------------------------------

// function to get DataReader of values for comparison table
SqlDataReader GetCompareDR() {

  try {
    SqlConnection sqlConnect = new SqlConnection(sConnect);

    // get SELECT statement to extract the data
    String sSQL = GetSqlStatement();

    SqlCommand sqlComm  = new SqlCommand(sSQL, sqlConnect);
    sqlComm.CommandType = CommandType.Text;   // SQL statement
    sqlConnect.Open();
    return sqlComm.ExecuteReader(CommandBehavior.CloseConnection);
  }
  catch (Exception e) {
    lblTableCaption.Text = "Sorry, the database cannot be accessed.";
    return null;
  }
}

// -------------------------------------------------------------------

// function to create SQL statement to extract comparison values
String GetSqlStatement() {

  String sResult = "";
  String sCaption = "No comparison type provided";

  // see which comparison type is selected
  // and create SELECT part of SQL statement
  switch(optCompareList.SelectedIndex) {

    case 0:    // compare Performance
      sCaption = "Time in seconds from standing start to reach speed (mph) of:";
      sResult = "SELECT [&nbsp;] = Model + ' ' + EngineName, "
              + "[30] = Perf30, [40] = Perf40, [50] = Perf50, "
              + "[60] = Perf60, [70] = Perf70, [80] = Perf80, "
              + "[90] = Perf90, [100] = Perf100 "
              + "FROM (tblCar JOIN tblCarEngines ON "
              + "tblCar.CarID = tblCarEngines.CarID) "
              + "JOIN tblEngine ON "
              + "tblEngine.EngineID = tblCarEngines.EngineID WHERE ";
      break;

    case 1:    // compare Maximum Speed
      sCaption = "Maximum speed (mph) in each gear:";
      sResult = "SELECT [&nbsp;] = Model + ' ' + EngineName, "
              + "[1st] = Speed1st, [2nd] = Speed2nd, [3rd] = Speed3rd, "
              + "[4th] = Speed4th, [5th] = Speed5th, [6th] = Speed6th "
              + "FROM (tblCar JOIN tblCarEngines ON "
              + "tblCar.CarID = tblCarEngines.CarID) "
              + "JOIN tblEngine ON "
              + "tblEngine.EngineID = tblCarEngines.EngineID WHERE ";
      break;

    case 2:    // compare Fuel Consumption
      sCaption = "Fuel consumption (mpg) at a steady speed (mph) of:";
      sResult = "SELECT [&nbsp;] = Model + ' ' + EngineName, "
              + "[30] = Fuel30, [40] = Fuel40, [50] = Fuel50, "
              + "[60] = Fuel60, [70] = Fuel70, [80] = Fuel80, "
              + "[90] = Fuel90, [100] = Fuel100 "
              + "FROM (tblCar JOIN tblCarEngines ON "
              + "tblCar.CarID = tblCarEngines.CarID) "
              + "JOIN tblEngine ON "
              + "tblEngine.EngineID = tblCarEngines.EngineID WHERE ";
      break;

  }

  // set caption for table
  lblTableCaption.Text = sCaption;

  // create WHERE clause section for each selected checkbox
  String sText, sModel, sEngine;
  foreach (ListItem lstItem in chkModels.Items) {
    if (lstItem.Selected) {
      sText = lstItem.Text;
      sModel = sText.Substring(0, sText.IndexOf(" "));
      sEngine = sText.Substring(sText.IndexOf(" ") + 1);
      sResult += "(Model = '" + sModel + "' AND EngineName = '"
              + sEngine + "') OR ";
    }
  }

  // remove final "OR" from string
  sResult = sResult.Substring(0, sResult.Length - 4);

  // add ORDER BY clause and return result
  return sResult + " ORDER BY Model, EngineName";
}

// -------------------------------------------------------------------
// -------------------------------------------------------------------
</script>


<!doctype html public "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<basefont size="2" face="Tahoma,Arial,Helvetica,sans-serif">
<link rel="stylesheet" type="text/css" href="stylesheets/wcc<% = sStyleSize %>.css" />
<title>Xrox Car Company - Compare Features</title>
</head>
<body leftmargin="0" rightmargin="0" topmargin="0"
      bgcolor="#ffffff" class="body-text"><div style="position:absolute;height:0px;"><font size="1" color=#ffffff">

<!-- skip link for aural page readers -->
<layer visibility="hidden">
<a href="#options" style="color:#ffffff;font-size:1px;text-decoration:none"><img width="1" height="1" hspace="0" vspace="0" src="images/_blnk.gif" border="0" alt="Skip to Options" /></a>
<a href="#result" style="color:#ffffff;font-size:1px;text-decoration:none"><img width="1" height="1" hspace="0" vspace="0" src="images/_blnk.gif" border="0" alt="Skip to Result" /></a>
</layer>

</font></div><wcc:pagebanner runat="server" />

<form runat="server">

<table width="100%" border="0" cellspacing="0" cellpadding="10">
<tbody>
 <tr>
  <td valign="top" width="105px">
    <wcc:mainlink runat="server" CurrentPageLink="Compare" />
  </td>
  <td align="left" valign="top" nowrap="nowrap">
    <a name="options" />
    <font face="Tahoma,Arial,Helvetica,sans-serif" size="2">
    <span class="body-text"><b>Select Models to Compare:</b></span>
    <asp:CheckBoxList id="chkModels" CssClass="body-text"
         Font-Size="10" Font-Name="Tahoma,Arial,Helvetica,sans-serif"
         AutoPostBack="True" runat="server" /><p />
    <span class="body-text"><b>Select Comparison Type:</b></span><br />
    <asp:RadioButtonList id="optCompareList" CssClass="body-text"
         Font-Size="10" Font-Name="Tahoma,Arial,Helvetica,sans-serif"
         AutoPostBack="True" runat="server">
      <asp:ListItem Text="Performance" Selected="True" runat="server" />
      <asp:ListItem Text="Maximum Speed" runat="server" />
      <asp:ListItem Text="Fuel Economy" runat="server" />
    </asp:RadioButtonList>
    </font>
  </td>
  <td align="center" valign="top">
    <a name="result" />
    <font face="Tahoma,Arial,Helvetica,sans-serif" size="2">
    <span class="body-text"><b>Show comparison as a:</b>&nbsp;</span>
    <asp:RadioButton id="optShowChart" CssClass="body-text"
         GroupName="ShowAs" AutoPostBack="True"
         Text="Chart" Checked="True" runat="server" />&nbsp;
    <asp:RadioButton id="optShowTable" CssClass="body-text"
         GroupName="ShowAs" AutoPostBack="True"
         Text="Table" runat="server" /><p />

    <!-- placeholder to hold image of results -->
    <asp:PlaceHolder id="ctlPlaceholder" runat="server" />

    <!-- label to display caption and/or error messages -->
    <asp:Label id="lblTableCaption" EnableViewState="False" runat="server" /><p />

    <!-- Datagrid to display results as a table -->
    <asp:DataGrid id="dgrResult" EnableViewState="False" runat="server"
         Font-Size="10" Font-Name="Tahoma,Arial,Helvetica,sans-serif"
         BorderStyle="None" BorderWidth="1px" BorderColor="#DEBA84"
         BackColor="#DEBA84" CellPadding="5" CellSpacing="1">
      <HeaderStyle Font-Bold="True" ForeColor="#ffffff"
                   BackColor="#b50055" HorizontalAlign="center" />
      <ItemStyle BackColor="#FFF7E7" HorizontalAlign="center" />
      <AlternatingItemStyle backcolor="#FFFFC0" HorizontalAlign="center" />
    </asp:DataGrid>

    <!-- button to submit form if no client-side scripting available -->
    <p class="body-text">
    <asp:Button id="btnGo" CssClass="body-text"
         Text="Compare..." Visible="False" runat="server" /></p>
    </font>
  </td>
 </tr>
</tbody>
</table>

</form>

<wcc:footerlinks runat="server" CurrentPageLink="Compare" />

</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -