2015-0306—DataLList
DataList具有repeater的所有功能,不同的是DataList自动将模板绘制成为一个表格,每一行数据都绘制成<tr>。
一、SQL的准备工作:
按照以下代码创建:
create database Mycontacts
go
use Mycontacts
go
create table groups
(
id int identity(1,1) primary key,
name varchar(20) not null
)
go create table contacts
(
id int identity(1,1) primary key,
name varchar(20) not null,
tel varchar(20) not null,
groupid int not null references groups(id)
)
二、DataList
工具箱--数据—DataList

由于DataList可以进行单行的编辑,需要一个UpdatePanel来包裹。

我们可以在源视图中设计DataList模板:
首先认识一下模板的标签:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DataList ID="DataList1" runat="server">
<HeaderTemplate></HeaderTemplate><%--头部模板--%>
<ItemTemplate></ItemTemplate><%--数据模板--%>
<AlternatingItemTemplate></AlternatingItemTemplate><%--交替模板--%>
<FooterTemplate></FooterTemplate><%--底部模板--%>
<EditItemTemplate></EditItemTemplate><%--编辑时的模板--%>
<SelectedItemTemplate></SelectedItemTemplate><%--选中的模板--%>
</asp:DataList>
</ContentTemplate>
</asp:UpdatePanel>
每一个模板中都可以单独的存放一个表格:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DataList ID="DataList1" runat="server" OnDeleteCommand="DataList1_DeleteCommand" OnEditCommand="DataList1_EditCommand" OnUpdateCommand="DataList1_UpdateCommand">
<HeaderTemplate>
<table border="1">
<tr>
<td width="100"></td>
<td width="100">姓名</td>
<td width="100">电话</td>
<td width="100">分组</td>
</tr>
</table>
</HeaderTemplate>
<ItemTemplate>
<table border="1">
<tr>
<td width="100">
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="edit" CommandArgument='<%#Eval("id") %>'>编辑</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CommandArgument='<%#Eval("id") %>' CommandName="delete">删除</asp:LinkButton>
</td>
<td width="100"><%#Eval("name") %></td>
<td width="100"><%#Eval("tel") %></td>
<td width="100"><%#Eval("groupid") %></td>
</tr>
</table>
</ItemTemplate>
<EditItemTemplate>
<table border="1">
<tr>
<td width="100">
<asp:LinkButton ID="LinkButton1" runat="server" CommandArgument='<%#Eval("id") %>' CommandName="update">更新</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" CommandArgument='<%#Eval("id") %>' runat="server" CommandName="delete">删除</asp:LinkButton>
</td>
<td width="100">
<asp:TextBox ID="TextBox5" Width="96px" runat="server"></asp:TextBox>
</td>
<td width="100">
<asp:TextBox ID="TextBox4" Width="96px" runat="server"></asp:TextBox>
</td>
<td width="100">
<asp:DropDownList ID="DropDownList2" runat="server"></asp:DropDownList> </td>
</tr>
</table>
</EditItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:DataList>
</ContentTemplate>
</asp:UpdatePanel>
这里做出了一个联系人的表,带有编辑 和 删除按钮。放在内部的控件大小格式都可以在自己设置,加粗部分是编辑时的模板。
注:如果要使用交替模板需要,将<ItemTemplate></ItemTemplate>标签中的内容复制,添加进入到<AlternatingItemTemplate></AlternatingItemTemplate>中数据绑定都一样,注意其中的控件的名字也要一样。
上文代码的显示结果:

点击编辑按钮:
首先我们需要获取点击的是哪一行的编辑按钮,
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="edit" CommandArgument='<%#Eval("id") %>'>编辑</asp:LinkButton>
注意:CommandName属性的值是固定的,分别是 编辑:Edit,删除:Delete,修改:Update
CommandArgument属性是绑定的表中的列名。
我们需要这两个属性来获取点击的是哪个按钮以及点击的是哪一行的按钮。
在DataList的属性中可以看到DeleteCommand(删除)、EditCommand(编辑)、UpdateCommand(修改)三个事件,点击编辑、删除、修改时触发的事件,分别双击可以自动生成事件:

三个事件的代码:
private DataClassesDataContext _Context;
protected void Page_Load(object sender, EventArgs e)
{
_Context = new DataClassesDataContext();
if (!IsPostBack)
{
binddropdown();
binddata();
}
}
//DataList的数据绑定
public void binddata()
{
List<contacts> list = _Context.contacts.AsQueryable().ToList();
DataList1.DataSource = list;
DataList1.DataBind();
}
//下拉列表的数据绑定
public void binddropdown()
{
List<groups> query = _Context.groups.AsQueryable().ToList(); if (query != null)
{
foreach(groups gdata in query)
{
ListItem lt = new ListItem(gdata.name,gdata.id.ToString());
DropDownList1.Items.Add(lt);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
contacts data = new contacts
{
name = TextBox1.Text,
tel = TextBox2.Text,
groupid = int.Parse(DropDownList1.SelectedValue)
};
_Context.contacts.InsertOnSubmit(data);
_Context.SubmitChanges();
}
//删除
protected void DataList1_DeleteCommand(object source, DataListCommandEventArgs e)
{
string id = e.CommandArgument.ToString();//根据CommandArgument获取点击的是哪一行
contacts cdata = _Context.contacts.Single(r => r.id == int.Parse(id));
_Context.contacts.DeleteOnSubmit(cdata);
_Context.SubmitChanges();
Response.Redirect("Default.aspx");//跳转页面
}
//编辑
protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
{
DataList1.EditItemIndex = e.Item.ItemIndex;
binddata();
string id = e.CommandArgument.ToString();
contacts cdata = _Context.contacts.Single(r=>r.id==int.Parse(id));
if (cdata != null)//分组中的下拉列表框绑定
{
DropDownList txt = (DropDownList)DataList1.Items[e.Item.ItemIndex].FindControl("DropDownList2");
List<groups> query = _Context.groups.AsQueryable().ToList();
if (query != null)
{
foreach (groups gdata in query)
{
ListItem lt = new ListItem(gdata.name, gdata.id.ToString());
txt.Items.Add(lt);
}
}
//电话文本框传值
TextBox txt4 = (TextBox)DataList1.Items[e.Item.ItemIndex].FindControl("TextBox4");
txt4.Text = cdata.tel;
//名字文本框传值
TextBox txt5 = (TextBox)DataList1.Items[e.Item.ItemIndex].FindControl("TextBox5");
txt5.Text = cdata.name;
}
}
//修改 更新
protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
{
string s = e.CommandArgument.ToString();
contacts cdata = _Context.contacts.Single(r=>r.id==int.Parse(s));
if (cdata != null)
{
cdata.name = ((TextBox)DataList1.Items[e.Item.ItemIndex].FindControl("TextBox5")).Text;
cdata.tel = ((TextBox)DataList1.Items[e.Item.ItemIndex].FindControl("TextBox4")).Text;
cdata.groupid = int.Parse(((DropDownList)DataList1.Items[e.Item.ItemIndex].FindControl("DropDownList2")).SelectedValue); _Context.SubmitChanges(); }
Response.Redirect("Default.aspx");
}
点击编辑按钮会按照我们设置的<EditItemTemplate>格式显示

可以把两个表的数据组合显示:
注:这一步最好在开始就做出修改,如果在最后再进行修改将会出现很多需要修改的地方,并且很容易报错
首先,两个表中的列名不可以重复,如图中框出的列名,需要我们创建一个别名

在groups的name列的属性中修改名称names:

DataList的数据绑定方法做出相应修改:
使用join语句。
public void binddata()
{
_Context = new DataClassesDataContext();
var vv = from m in _Context.contacts
join c in _Context.groups
on m.groupid equals c.id
select new
{
m.id,
m.name,
m.tel,//contacts表
c.names//Groups表
};
DataList1.DataSource = vv;
DataList1.DataBind();
}
注意:也需要修改网页中的数据绑定:
<ItemTemplate>
<table border="1">
<tr>
<td width="100">
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="edit" CommandArgument='<%#Eval("id") %>'>编辑</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CommandArgument='<%#Eval("id") %>' CommandName="delete">删除</asp:LinkButton>
</td>
<td width="100"><%#Eval("name") %></td>
<td width="100"><%#Eval("tel") %></td>
<td width="100"><%#Eval("names") %></td>
</tr>
</table>
</ItemTemplate>
2015-0306—DataLList的更多相关文章
- 让你的APK瘦成一道闪电
		
APK瘦身是长久以来的难题,我们需要通过一些工具和技巧才能让它瘦下去,下面我来分享一下我在apk瘦身方面的经验. 一.apk中有哪些东西 1.代码 2.lib 3.so本地库 4.资源文件(图片,音频 ...
 - 2015 西雅图微软总部MVP峰会记录
		
2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...
 - 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
		
最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...
 - TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint
		
前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...
 - TFS 2015 敏捷开发实践 – 看板的使用
		
看板在现代应用开发过程中使用非常广泛,不管是使用传统的瀑布式开发还是敏捷开发,都可以使用看板管理.因为看板拥有简单的管理方法,直观的显示方式,所以很多软件开发团队选择使用看板进行软件开发管理.本文不在 ...
 - Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决
		
PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...
 - 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源
		
前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...
 - .NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)
		
2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET ...
 - 2015微软MVP全球峰会见闻
		
2015.10.31-2015.11.8 一周的时间完成微软MVP全球峰会旅程,这一周在不断的倒时差,行程安排非常的紧张,还好和大家请假了没有更新微信公众号,今天开始继续更新微信公众号,开始新的旅程, ...
 - Windows 7 上安装Visual Studio 2015 失败解决方案
		
安装之前先要看看自己的系统支不支持,具体的可以看:https://www.visualstudio.com/en-us/visual-studio-2015-system-requirements-v ...
 
随机推荐
- 【React Native 实战】旋转图片验证码
			
1.前言蘑菇街用打乱方向的图片作为验证码,既起到了验证码的作用又宣传了图片,今天我们就用React Native来实现这样的功能. 2.属性 Image标签属性resizeMode enum('cov ...
 - EJB究竟是什么,真的那么神奇吗??
			
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...
 - QThread与QWidget使用
			
本文主要内容: 在任务一中,用 四 种方式实现:点击界面按钮,开线程运行一段程序,结果显示在一个Label上.1. 用不正确的方式得到看似正确的结果2. 用Qt Manual 和 例子中使用的方法3. ...
 - Google 推出全新的两步验证机制
			
近日 Google 在官方的 Apps Updates 博客公布了全新的两步验证功能--Google 提示,新的功能通过与 Google App 联动,进一步将验证确认工作缩减到仅有两步,同时支持 A ...
 - mysql中如何嵌套使用insert和select
			
如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现.具体情形是:有三张表a.b.c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段.对于这种情况,我们可以使 ...
 - 关于 ArtifactTransferException: Failure to transfer
			
eclipse 在导入maven project后,pom.xml有可能出现这种错误. 这里update maven project解决了:右键点击Maven项目->Maven->Upda ...
 - 简要地写出一个.NET Remoting的示例
			
在VS 2008中添加新的类库项目,并命名为NetRmClass,将所属解决方案命名为NetRm,勾选“创建解决方案的目录”.这样,NetRmClass类库项目目录即属于NetRm解决方案,并可以继续 ...
 - Javascript教程:AngularJS的五个超酷特性
			
AngularJS是一个超棒的javascript框架,不单单对于开发人员来说非常有吸引力,对于UI设计师来说也同样出色.在这篇教程中,我们将简单的介绍AngularJS几个重量级必备特性,并且介绍它 ...
 - [Java] 模拟HTTP的Get和Post请求
			
在之前,写了篇Java模拟HTTP的Get和Post请求的文章,这篇文章起源与和一个朋友砍飞信诈骗网站的问题,于是动用了Apache的comments-net包,也实现了get和post的http请求 ...
 - 【HTML5 2】《html5 开发精要与实例讲解》 step1 -- 导读
			
一.教程重点:以 综合性案例 为导向,辅之以 精要知识点 二.内容概况: 第1部分:通过 大小型案例 对 各重要知识点 进行详细讲解 第2部分:jWebSocket.RGraph.WebGL 三个重要 ...