📄 compare.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 [ ] = 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 [ ] = 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 [ ] = 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> </span>
<asp:RadioButton id="optShowChart" CssClass="body-text"
GroupName="ShowAs" AutoPostBack="True"
Text="Chart" Checked="True" runat="server" />
<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 + -