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的更多相关文章

  1. 让你的APK瘦成一道闪电

    APK瘦身是长久以来的难题,我们需要通过一些工具和技巧才能让它瘦下去,下面我来分享一下我在apk瘦身方面的经验. 一.apk中有哪些东西 1.代码 2.lib 3.so本地库 4.资源文件(图片,音频 ...

  2. 2015 西雅图微软总部MVP峰会记录

    2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...

  3. 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

    最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错 ...

  4. TFS 2015 敏捷开发实践 – 在Kanban上运行一个Sprint

    前言:在 上一篇 TFS2015敏捷开发实践 中,我们给大家介绍了TFS2015中看板的基本使用和功能,这一篇中我们来看一个具体的场景,如何使用看板来运行一个sprint.Sprint是Scrum对迭 ...

  5. TFS 2015 敏捷开发实践 – 看板的使用

    看板在现代应用开发过程中使用非常广泛,不管是使用传统的瀑布式开发还是敏捷开发,都可以使用看板管理.因为看板拥有简单的管理方法,直观的显示方式,所以很多软件开发团队选择使用看板进行软件开发管理.本文不在 ...

  6. Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决

    PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...

  7. 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源

    前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...

  8. .NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)

    2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET ...

  9. 2015微软MVP全球峰会见闻

    2015.10.31-2015.11.8 一周的时间完成微软MVP全球峰会旅程,这一周在不断的倒时差,行程安排非常的紧张,还好和大家请假了没有更新微信公众号,今天开始继续更新微信公众号,开始新的旅程, ...

  10. Windows 7 上安装Visual Studio 2015 失败解决方案

    安装之前先要看看自己的系统支不支持,具体的可以看:https://www.visualstudio.com/en-us/visual-studio-2015-system-requirements-v ...

随机推荐

  1. 【PAT】1029. Median (25)

    Given an increasing sequence S of N integers, the median is the number at the middle position. For e ...

  2. 一个简单的弹出层ProgressBar

    https://github.com/eltld/SimpleLoading

  3. [AngularJS] TweenList 3D + AngularJS Animate

    AngularJS animations and TweenLite make it really easy to create cool 3d effects in your application ...

  4. 当调用List Remove 失效时 [C#] .

    有没有试过从一个集合里面移除一个对象之后,这个集合仍然留有这个对象?世界之大,无奇不有.稍有疏忽,便会导致这种奇怪的现象.现在让我们看看这个“不死”对象究竟是怎么一回事. 1.“不死”对象现身 这个问 ...

  5. 关于javascript中的 执行上下文和对象变量

    什么是执行上下文 当浏览器的解释器开始执行我们的js代码的时候,js代码运行所处的环境可以被认为是代码的执行上下文,执行上下文(简称-EC)是ECMA-262标准里的一个抽象概念,用于同可执行代码(e ...

  6. java中无符号类型的处理

    在Java中,不存在Unsigned无符号数据类型,但可以轻而易举的完成Unsigned转换. 方案一:如果在Java中进行流(Stream)数据处理,可以用DataInputStream类对Stre ...

  7. linux入侵检测系统snort安装配置

    队长让俺瞅瞅snort,没想到安装配置都遇到问题...整理下过程,给跟我一样的家伙看看.. 由于本人机器是ubuntu,apt-get 几下就可以了,其实网上有不少这样的文章...之所以还要写就是.. ...

  8. linux学习资料

    鸟哥的Linux私房菜 基础学习篇(第三版)    http://book.51cto.com/art/201007/211888.htm 鸟哥的Linux私房菜——服务器架设篇    http:// ...

  9. nginx1.4.6+php5.5.11+mysql5.6.17+mecache+opcache

    要用到的软件:libiconv-1.13.tar.gz libmcrypt-2.5.8.tar.gz mcrypt-2.6.8.tar.gz mhash-0.9.9.9.tar.gz memcache ...

  10. Docker学习笔记2

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...