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. hdu4085 Peach Blossom Spring 斯坦纳树,状态dp

    (1)集合中元素表示(1<<i), i从0开始 (2)注意dp[i][ss] = min(dp[i][ss], dp[i][rr | s[i]] + dp[i][(ss ^ rr) | s ...

  2. 对.NET中Hashtable和ArryList的理解

    1.HashTabel 在.NET Framework中,Hashtable是System.Collections命名空间提供的集合对象,同时它也是一个可变长的数组,用于处理和表现类似key/valu ...

  3. MySql服务器的启动和关闭

    转自:http://zqding.iteye.com/blog/1562095 在windows下: 启动: .cd c:\mysql\bin .mysqld --console 关闭: .cd c: ...

  4. OS X 10.9 Mavericks 安装 thrift 0.9.1

    通过Homebrew安装的时候,编译会报错.查了一下资料,原来是10.9系统默认使用的libc++的库,而且移除了C++ 11标准前tr库,所以编译存在问题.且笔者使用的时候,brew安装只支持到0. ...

  5. jq实现地址级联效果

    (function ($) { $.fn.Address = function (options) { var defaults = { divid: "Address", cal ...

  6. java发送邮件 实现编辑html代码

    这个例子相当的简单,一看就懂(  此例仅支持163发送163及qq邮箱) 首先要导入两个必须jar包:mail-1.4.4.jar 和 commons-email-1.2.jar这两个jar包是我用的 ...

  7. 自定义uiview 当没有数据的时候 显示自定义的uiview界面

    // // ZSDTJNoDataView.h // ZSDTJNoDataView // // Created by Mac on 14-12-28. // Copyright (c) 2014年 ...

  8. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

      工厂方法模式:   定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类.   应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较 ...

  9. 【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

    [阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实 ...

  10. 如何鉴别程序抄袭c语言程序代写

    如何鉴别程序抄袭:如何鉴别一份程序代码是抄袭另一份程序.输入:两个C语言源程序文件 输出:抄袭了多少?给出最相似的片段,判断是谁抄袭了谁? 提示:首先进行统一规范化排版,去掉无谓的空格.空行,然后比对 ...