<%@ 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;"> <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;"> <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>