现在的位置: 主页 > 企业简介 > 文章正文

[Asp.net之旅]--数据绑定控件之DataList

作者:武警河南洛阳红丝带网 来源:www.027fck.com 未知发布时间:2017-09-11 14:06:20
[Asp.net之旅]--数据绑定控件之DataList  上篇博客讨论了Repeater控件的基本用法,它是最基本的数据绑定控件,只提供了数据绑定的功能,熟练运用Repeater控件后,其它类似的数据绑定控件就很简单了。接着我们上篇博客的内容继续,今天来讨论下DataList的基本使用方法。

一、绑定控件之DataList


该控件可以以自定义的格式显示各种数据源的字段,其显示数据的格式在创建的模板中定义,可以为项、交替项、选定项和编辑项创建模板。该控件也可以使用标题、脚注和分隔符模板自定义整体外观,还可以一行显示多个数据行。虽然DataList控件拥有很大的灵活性,但其本身不支持数据分页,编程者需要通过自己编写方法完成分页的功能。仅用于数据的显示,不支持编辑、插入、删除。
优点:自定义格式显示数据、比较灵活。
缺点:不支持分页,编辑插入。

1、DataList简介


上文说到DataList控件不仅能够灵活的显示数据,而且还支持编辑、插入、删除操作。想要显示数据基本的模板是必不可少的,相同的该控件也为开发人员提供了基本的模板使用。另外DataList不但提供了基本的ItemCommand事件,而且还封装了删除、取消、编辑、更新事件。通过将数据绑定到EditItemTemplate模板中能够容易的进入编辑状态,具体方法将会在下文中讲到。

\

对于基本的模板和事件的使用方法上篇文章已经讨论,在此将不会深入的讨论。

二、控件使用技巧

1、基本操作--增删改

下面的代码示例使用Asp.net实现,能够对数据进行增加、删除、修改。DataList控件封装了基本的删除和修改模板,但没有继承插入功能,示例中的插入使用的是Asp.net的Literal控件来实现的,具体实现方法如下。
删除页面:

\

添加页面:

\

编辑页面:

\


前台代码:和Repeater控件基本用法相同,不同的是新增加了编辑模板,在编辑模板中绑定了数据,在进行编辑操作时只要跳转到编辑模板即可。代码中在基本模板ItemTemplate中添加了Literal控件,当点击添加按钮时再后台动态的添加新行,并在新行中添加数据控件。具体后台代码如下。

ID 内容 编辑

<%# Eval("id") %> <%# Eval("name") %> 删除 编辑 添加


后台代码:添加新行的操作是在ItemCommand事件中指定的,将新行的代码添加到Literal控件上实现了添加新行,并为新行指定控件。另外的基本编辑命令是在单独的事件中编写的,因为DataList为开发人员提供了基本的操作事件,如果想要进入某一个状态只需要将状态的ItemIndex值。

protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string strName = string.Empty; //声明添加的内容 try { //获取需要添加的内容 strName = Request.QueryString["name"].ToString(); } catch { } //判断如果要添加的内容不为空将会进行添加操作 if (strName!=string.Empty) { this.Insert(strName); } //********************************************************************** //分页效果实现 PagedDataSource pds = new PagedDataSource(); //声明分页类 //设置分页属性 pds.AllowPaging = true; pds.PageSize = 3; pds.DataSource = this.GetDT().DefaultView; pds.CurrentPageIndex = pageIndex - 1; //********************************************************************** //绑定分页数据源 this.DataList1.DataSource = pds; this.DataList1.DataBind(); } } /// /// 添加新的数据行内容 /// ///获取要插入的内容 private void Insert(string strName) { //向数据库中插入新内容 using (SqlConnection con = this.GetSqlCon()) { con.Open(); //打开数据库连接 //设置命令对象 SqlCommand sqlcom = new SqlCommand(); sqlcom.Connection = con; sqlcom.CommandText = "insert match values(@name)"; //添加参数 sqlcom.Parameters.Add(new SqlParameter("@name", strName)); //执行插入 sqlcom.ExecuteNonQuery(); } } /// /// 获取绑定的数据源 /// /// DataTable,从match表中获取的内容 private DataTable GetDT() { DataTable dt = new DataTable(); //声明数据库表 //获取数据源 using (SqlConnection con = this.GetSqlCon()) { con.Open(); //声明数据源命令 SqlCommand sqlCom = new SqlCommand(); sqlCom.CommandText = "select * from match"; sqlCom.Connection = con; SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCom); SqlCommandBuilder sqlCb = new SqlCommandBuilder(sqlDa); sqlDa.Fill(dt); } return dt; } /// /// 声明数据库链接对象 /// /// SqlConnection,返回数据库连接对象 private SqlConnection GetSqlCon() { SqlConnection sqlCon = new SqlConnection("server=.;database=myblog;uid=sa;pwd=1"); return sqlCon; } /// /// 编辑命令事件 /// /// /// protected void DataList1_EditCommand(object source, DataListCommandEventArgs e) { this.DataList1.EditItemIndex = e.Item.ItemIndex; //设置编辑的索引行 //重新绑定数据源 this.DataList1.DataSource = this.GetDT(); this.DataList1.DataBind(); } /// /// 删除命令事件 /// /// /// protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e) { if (e.CommandName == "Delete") { string id = e.CommandArgument.ToString(); //获取要删除行的id号 //执行删除命令 using (SqlConnection con = this.GetSqlCon()) { con.Open(); SqlCommand sqlcom = new SqlCommand(); sqlcom.Connection = con; sqlcom.CommandText = "delete from match where id=@id"; sqlcom.Parameters.Add(new SqlParameter("@id", id)); sqlcom.ExecuteNonQuery(); } //重新绑定数据 this.DataList1.DataSource = this.GetDT(); this.DataList1.DataBind(); } } /// /// 取消更新事件 /// /// /// protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e) { if (e.CommandName == "Cancel") { this.DataList1.EditItemIndex = -1; //重新绑定数据 this.DataList1.DataSource = this.GetDT(); this.DataList1.DataBind(); } } /// /// 更新按钮事件 /// /// /// protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e) { //判断如果是更新命令的话,将会执行更新命令 if (e.CommandName == "Update") { int intId = int.Parse(e.CommandArgument.ToString()); //获取更新行的索引号 string strname = ((TextBox)e.Item.FindControl("name")).Text; //获取更新的内容 //更新数据库中的值 using (SqlConnection sqlcon = this.GetSqlCon()) { sqlcon.Open(); SqlCommand sqlcom = new SqlCommand(); sqlcom.CommandText = "update match set name=@name where id=@id"; sqlcom.Connection = sqlcon; SqlParameter[] sqlParam = new SqlParameter[] { new SqlParameter("@name", strname), new SqlParameter("@id", intId) }; sqlcom.Parameters.AddRange(sqlParam); sqlcom.ExecuteNonQuery(); } //更新完成后跳转页面 this.DataList1.EditItemIndex = -1; //重新绑定数据 this.DataList1.DataSource = this.GetDT(); this.DataList1.DataBind(); } } /// /// 事件回发命令 /// /// /// protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e) { //判断如果命令名称为Add,将会添加新行 if (e.CommandName == "Add") { Literal lit = (Literal)e.Item.FindControl("litAdd"); //获取页面的对象 //向页面中添加新行标签 StringBuilder strAdd = new StringBuilder(""); strAdd.Append("取消"); strAdd.Append("确认"); strAdd.Append(""); //将新行标签日俺家到html中 lit.Text = strAdd.ToString(); } }

2、分页实现

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:神农架网站制作 http://shennongjia.666rj.com

上一篇:form表单的数据转换为json对象 下一篇:最后一页