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 ...
随机推荐
- 大话设计模式C++实现-第22章-桥接模式
一.UML图 二.概念 桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都能够独立地变化. 三.说明 为什么叫"桥接模式"? 如上所看到的的UML图中,有一个聚合线, ...
- 关于sources.list和apt-get [转载]
个人觉得,Debian最大的方便在于用apt-get安装软件,apt-get的工作原理大概是这种:/etc/apt/sources.list文件中保存着一些server的设置,在这些server上有大 ...
- FindMe
https://github.com/hongdong/FindMe_Android https://github.com/hongdong/FindMe_Server https://github. ...
- FullScreenDownloader
https://github.com/Gitdefllo/FullScreenDownloader
- ios开发——实用技术篇Swift篇&照片选择
照片选择 // MARK: - 选择照片 /*----- 选择照片 ------*/ @IBAction func addImageButtonClick() { let actionSheet = ...
- Cassandra目录
1. cassandra安装 2. 过滤文本文档中的数据并插入Cassandra数据库 3. 用Java实现向Cassandra数据库中插入和查询数据 4. Cassandra在CQL语言层面支持多种 ...
- 基于jquery左侧带选项卡切换的焦点图
今天给大家分享一款基于jquery左侧带选项卡切换的焦点图.这款焦点图左侧有短标题,单击切换并显示长标题.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class ...
- 基于CSS3图片可倾斜摆放的动画相册
今天我们又要来分享一个CSS3动画相册.之前我们分享过一个很酷的放满女神的HTML5/CSS3相册,相册是全屏展示的.今天这款相册的特点是图片可以任意角度的倾斜摆放,就像随意放在桌面上一样.另外,当鼠 ...
- Entity Framework 使用注意:Where查询条件中用到的关联实体不需要Include
来自博客园开发团队开发前线最新消息: 在Entity Framework中,如果实体A关联了实体B,你想在加载实体A的同时加载实体B.通常做法是在LINQ查询中使用Include().但是,如果你在查 ...
- Largest Rectangle in a Histogram 常用技巧 stack的运用
Largest Rectangle in a Histogram