DataList高级应用(响应按钮分页)

本文介绍了一个使用 ASP.NET 的 C# 页面进行数据绑定的例子,包括从 SQL Server 数据库检索数据并显示在网页上的详细步骤。该示例展示了如何通过 DataList 控件实现初始筛选和客户信息展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<%@ 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}&nbsp;-&nbsp;{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>
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值