MSDN:DataList Web 服务器控件以某种格式显示数据,这种格式可以使用模板和样式进行定义。DataList 控件可用于任何重复结构中的数据,如表。DataList 控件可以以不同的布局显示行,如按列或行对数据进行排序。
也就是说一般情况我们用的GIRDVIEW控件只显示一行一条的话,那么DataList 可以在一行上显示多条数据。
一 绑定数据源 并显示数据
1.WEB.CONFIG配置数据源
<connectionStrings> <add name="NorthwindConnectionString1" connectionString="Data Source=127.0.0.1;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=xxxxxxxxxx" providerName="System.Data.SqlClient" /> </connectionStrings>
2.在页面上添加DATALIST控件
3 后台代码绑定数据
protected void Page_Load(object sender, EventArgs e) { bind(); } /// /// 获得数据库的链接 /// /// public SqlConnection GetConnection() { ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString1"]; string myStr = setting.ConnectionString; SqlConnection myConn = new SqlConnection(myStr); return myConn; } /// /// 绑定数据 /// protected void bind() { SqlConnection myConn = GetConnection(); myConn.Open(); string sqlStr = "select employeeid,lastname,firstname,address from employees"; SqlDataAdapter myDa = new SqlDataAdapter(sqlStr, myConn); DataSet myDs = new DataSet(); myDa.Fill(myDs); DataList1.DataSource = myDs; DataList1.DataBind(); }
4.前台设置显示模板
编辑模板的-》项模板
将每一个控件的TEXT的属性添加表达式Eval(“字段名”)
F5启动调试显示结果如下
按表格显示
修改部分前台代码
<ItemTemplate> <table border="1" style="width: 500px; color: #000000; text-align: center;" cellpadding="0" cellspacing="0"> <tr > <td width="50"> <asp:Label ID="Label1" runat="server" Text='<%# Eval("employeeid") %>'></asp:Label></td> <td width="150"> <asp:Label ID="Label2" runat="server" Text='<%# Eval("lastname") %>'></asp:Label> <asp:Label ID="Label3" runat="server" Text='<%# Eval("firstname") %>'></asp:Label></td> <td width="300"> <asp:Label ID="Label4" runat="server" Text='<%# Eval("address") %>'></asp:Label> </td> </tr> </table> </ItemTemplate>
显示表格的第二种方法 利用DATALIST的ExtractTemploateRows=true属性来显示格子
ExtractTemplateRows="true"
二、做一个分页的功能
主要是运用PagedDataSource对象
在设计页面加入 LABEL控件 如图
在后台页面使用PagedDataSource 代码如下
public SqlConnection GetConnection() { ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString1"]; string myStr = setting.ConnectionString; SqlConnection myConn = new SqlConnection(myStr); return myConn; } protected void bind() { SqlConnection myConn = GetConnection(); myConn.Open(); string sqlStr = "select employeeid,lastname,firstname,address from employees"; SqlDataAdapter myDa = new SqlDataAdapter(sqlStr, myConn); DataSet myDs = new DataSet(); myDa.Fill(myDs); PagedDataSource ps = new PagedDataSource();//生成PagedDataSource的实例 ps.DataSource = myDs.Tables[0].DefaultView; ps.AllowPaging = true; ps.PageSize = 5; ps.CurrentPageIndex = Convert.ToInt32(labNowPage.Text) - 1; lnkbtnFront.Enabled = true; lnkbtnFirst.Enabled = true; lnkbtnNext.Enabled = true; lnkbtnLast.Enabled = true; if (ps.CurrentPageIndex == 0) { lnkbtnFirst.Enabled = false;//不显示第一页按钮 lnkbtnFront.Enabled = false;//不显示上一页按钮 } if (ps.CurrentPageIndex == (ps.PageCount-1)) { lnkbtnNext.Enabled = false;//不显示下一页 lnkbtnLast.Enabled = false;//不显示最后一页 } labCount.Text = ps.PageCount.ToString(); DataList1.DataSource = ps; DataList1.DataKeyField = "employeeid"; DataList1.DataBind(); } 然后在PAGE_LOAD的首次访问加入绑定 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { labNowPage.Text = "1";//第一次打开为第一页 bind(); } }
然后分别对 设计页面里面添加的 LABEL控件添加事件
protected void lnkbtnFirst_Click(object sender, EventArgs e) { labNowPage.Text = "1"; bind(); } protected void lnkbtnFront_Click(object sender, EventArgs e) { labNowPage.Text = (Convert.ToInt32(labNowPage.Text) - 1).ToString(); bind(); } protected void lnkbtnNext_Click(object sender, EventArgs e) { labNowPage.Text = (Convert.ToInt32(labNowPage.Text) + 1).ToString(); bind(); } protected void lnkbtnLast_Click(object sender, EventArgs e) { labNowPage.Text = labCount.Text; bind(); }
三、对DATALIST做数据的索引 明细显示
1.添加一个DATALIST 控件 编辑模板
2.编辑模板 中的 itemTemplate 和 SelectItemTemplate
3.编辑里面的LABEL控件的数据绑定
4. 对LINKBOTTON添加COMMAND
5.对后台代码添加COMAND所对应事件
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) { if (e.CommandName == "select") { //设置选中行的索引为当前选择行的索引 DataList1.SelectedIndex = e.Item.ItemIndex; //数据绑定 Bind(); } if (e.CommandName == "back") { //设置选中行的索引为-1,取消该数据项的选择 DataList1.SelectedIndex = -1; //数据绑定 Bind(); } }
(其他部分代码同上例子)
6.F5调试运行
四、对DATALIST做编辑操作
1.添加一个DATALIST 控件 编辑模板
2.编辑模板 中的 editTemplate
3.分别对各个按钮添加命令
4.对自己加入的控件编辑数据源
5.对编辑 取消 更新 添加事件
6.编写后台代码
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e) { //设置DataList1控件的编辑项的索引为选择的当前索引 DataList1.EditItemIndex = e.Item.ItemIndex; //数据绑定 Bind(); } protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e) { //设置DataList1控件的编辑项的索引为-1,即取消编辑 DataList1.EditItemIndex = -1; //数据绑定 Bind(); } protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e) { //取得编辑行的关键字段的值 string employeeid = DataList1.DataKeys[e.Item.ItemIndex].ToString(); //取得文本框中输入的内容 string firstname = ((TextBox)e.Item.FindControl("TextBox1")).Text; string lastname = ((TextBox)e.Item.FindControl("TextBox2")).Text; string address = ((TextBox)e.Item.FindControl("TextBox3")).Text; string sqlStr = "update employees set firstname='" + firstname + "',lastname='" + lastname + "',address='" + address + "' where employeeid=" + employeeid; //更新数据库 SqlConnection myConn = GetConnection(); myConn.Open(); SqlCommand myCmd = new SqlCommand(sqlStr, myConn); myCmd.ExecuteNonQuery(); myCmd.Dispose(); myConn.Close(); //取消编辑状态 DataList1.EditItemIndex = -1; Bind(); }
7.调试结果