<% @ Page Language = " C# " %> <% @ Import Namespace = " System.Data.SqlClient " %> <% @ Import Namespace = " System.Data " %> <% @ Import Namespace = " System.Drawing " %> < SCRIPT runat = " server " > private CheckBox m_checkBox; private string m_connString = " SERVER=localhost;DATABASE=Northwind;UID=sa;pwd= " ; private string m_cmdCustmrs = " SELECT * FROM customers WHERE companyname LIKE '{0}%' " ; private string m_cmdInitial = " SELECT DISTINCT substring(companyname, 1, 1) AS Initial FROM customers " ; public void Page_Load( object sender, EventArgs e) ... { if (!IsPostBack) BindInitials();} private void BindInitials() ... { DataSet _data = new DataSet(); // Get the initials SqlDataAdapter _adapter = new SqlDataAdapter(m_cmdInitial, m_connString); _adapter.Fill(_data, "Initials"); Picker.DataSource = _data.Tables["Initials"].DefaultView; Picker.DataBind();} private void BindData() ... { BindData((string) ViewState["Initial"]);} private void BindData( string initial) ... { // Store the initial ViewState["Initial"] = initial; // Get the data string _cmdText = m_cmdInitial + ";"; _cmdText += String.Format(m_cmdCustmrs, initial); SqlDataAdapter _adapter = new SqlDataAdapter(_cmdText, m_connString); DataSet _data = new DataSet(); _adapter.Fill(_data); // Rename tables _data.Tables[0].TableName = "Initials"; _data.Tables[1].TableName = "Customers"; // Reset selected and edit items Customers.SelectedIndex = -1; Customers.EditItemIndex = -1; Picker.DataSource = _data.Tables["Initials"].DefaultView; Picker.DataBind(); Customers.DataSource = _data.Tables["Customers"].DefaultView; Customers.DataBind();} public void SelectedIndexChanged( object sender, EventArgs e) ... { // Scroll into view if (Customers.SelectedIndex != -1) ...{ string custID = (string) Customers.DataKeys[Customers.SelectedIndex]; TheBody.Attributes["onload"] = String.Format("ScrollToElem('{0}')", custID); }} public void OnRefresh( object sender, EventArgs e) ... { BindData();} private string SetCustomerName( object dataItem) ... { string _output = "<b>{0} - {1}</b>"; DataRowView _row = (DataRowView) dataItem; _output = String.Format(_output, _row["customerid"], _row["companyname"]); return _output;} private string ShowInfoBar( object dataItem) ... { string color = (m_checkBox.Checked ?"blue" :"black"); string _output = "<span style='color:{0};'>(<i>{1}, {2}</i>)</span>"; DataRowView _row = (DataRowView) dataItem; _output = String.Format(_output, color, _row["contactname"], _row["contacttitle"]); return _output;} private string ShowAddressBar( object dataItem) ... { if (!m_checkBox.Checked) return ""; string color = (m_checkBox.Checked ?"blue" :"black"); string _output = "<br><span style='color:{0};'>{1}, {2} ({3})<br>{4}</span>"; DataRowView _row = (DataRowView) dataItem; _output = String.Format(_output, color, _row["address"], _row["city"], _row["country"], _row["Phone"]); return _output;} private string SetHeader() ... { string _text = "Customers [{0}]"; return String.Format(_text, (string) ViewState["Initial"]);} private string SetFooter() ... { string _text = "{0} customer(s) found."; ICollection _coll = (ICollection) Customers.DataSource; return String.Format(_text, _coll.Count);} private Color GetBackColor( object dataItem) ... { string _initial = (string) ((DataRowView)dataItem)["Initial"]; if (_initial == (string) ViewState["Initial"]) return Color.Gray; return Color.LightCyan;} private Color GetForeColor( object dataItem) ... { string _initial = (string) ((DataRowView)dataItem)["Initial"]; if (_initial == (string) ViewState["Initial"]) return Color.White; return Color.Black;} private CheckBox FindCheckBox(Control container) ... { CheckBox ctl = (CheckBox) container.FindControl("ExpandButton"); if (ctl == null) return null; // Must anticipate the state restoration here. When this function executes we're // in the middle of the DataBind call on the given RepeaterItem object and // before the ItemDataBound event fires. At this time, the Checked property of the // CheckBox (as well as the Text property of a TextBox) has not been updated yet. ctl.Checked = (Page.Request.Form[ctl.UniqueID]=="on"); return ctl;} private void ItemCommand( object sender, DataListCommandEventArgs e) ... { BindData(e.CommandName);} </ SCRIPT > < html > < title > Customers </ title > < style > a:hover ... {color:red;text-decoration:underline;} a ... {text-decoration:none;} </ style > < SCRIPT > function ScrollToElem(custID) ... { var elem = document.all(custID); if (elem == null) return; elem.scrollIntoView(true);} </ SCRIPT > < body runat = " server " id = " TheBody " vlink = " black " link = " black " bgcolor = " ivory " style = " font-family:arial;font-size:9pt " > < form runat = " server " > < asp:datalist runat = " server " id = " Picker " repeatlayout = " flow " repeatdirection = " horizontal " OnItemCommand = " ItemCommand " > < ItemTemplate > < asp:button runat = " server " style = " border:solid 1px gray;width=30px; " backcolor = ' <%# GetBackColor(Container.DataItem) %> ' forecolor = ' <%# GetForeColor(Container.DataItem) %> ' text = ' <%# DataBinder.Eval(Container.DataItem, "Initial")%> ' commandname = ' <%# DataBinder.Eval(Container.DataItem, "Initial")%> ' /> </ ItemTemplate > </ asp:datalist > < div style = " border:solid 1px gray; " > < asp:datalist runat = " server " id = " Customers " RepeatLayout = " flow " DataKeyField = " customerid " OnSelectedIndexChanged = " SelectedIndexChanged " > < SelectedItemStyle backcolor = " cyan " width = " 100% " /> < HeaderTemplate > < div style = " background-color:gray;color:white;height:20px; " >& nbsp; < big >< b ><% # SetHeader() %></ b ></ big ></ div > < div style = " background-color:white;height:260px;overflow:auto; " > </ HeaderTemplate > < ItemTemplate > < span id = ' <%# DataBinder.Eval(Container.DataItem, "customerid") %> ' > < span style = " display:none; " > <% # m_checkBox = (CheckBox) FindCheckBox(Container) %> </ span > < asp:checkbox runat = " server " id = " ExpandButton " /> < asp:linkbutton runat = " server " commandname = " select " text = ' <%# SetCustomerName(Container.DataItem) %> ' /> < br > <% # ShowInfoBar(Container.DataItem) %> <% # ShowAddressBar(Container.DataItem) %> </ span > </ ItemTemplate > < SeparatorTemplate > </ SeparatorTemplate > < FooterTemplate > </ div > < div style = " background-color:gray;color:white;height:20px; " >& nbsp; < b ><% # SetFooter() %></ b ></ div > </ FooterTemplate > </ asp:datalist > </ div > < br > < asp:button runat = " server " text = " Refresh " onclick = " OnRefresh " font - bold = " true " style = " border:solid 1px gray;width=80px; " /> </ form > </ body > </ html >