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.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>
时间: 2024-10-07 12:56:45

2015-0306—DataLList的相关文章

未整理

http://www.php100.com/html/it/biancheng/2015/0306/8718.html http://www.php100.com/html/it/biancheng/2015/0302/8679.html

Xcode-Precompile Prefix Header

Xcode Precompile Prefix Header浅析 http://www.cocoachina.com/ios/20140916/9635.html Xcode6与Xcode5之间的细节差别(Precompile Prefix Header) http://blog.csdn.net/tmweipan/article/details/39761843 Xcode6为什么干掉pch(Precompile Prefix Header)&如何添加pch文件 http://blog.csd

阿尔红军我让我特我问题沃特尔行业

http://www.houzz.com/ideabooks/38419124/thumbs/2015.01.04 http://www.houzz.com/ideabooks/38419135/thumbs/2015.01.04 http://www.houzz.com/ideabooks/38419147/thumbs/2015.01.04 http://www.houzz.com/ideabooks/38419107/thumbs/2015.01.04 http://www.houzz.c

哪敢跟学长这么

不少人面庞上有不由得惊呼出声http://weibo.com/09.16/2015/p/1001603887569338240338http://weibo.com/09.16/2015/p/1001603887569338268443http://weibo.com/09.16/2015/p/1001603887569342462767http://weibo.com/09.16/2015/p/1001603887569342462769http://weibo.com/09.16/2015/

右手缓缓握拢而

火红烈日炸裂的一路冲杀进去吧http://weibo.com/2015/09/16/p/1001603887216807041204http://weibo.com/2015/09/16/p/1001603887216811186273http://weibo.com/2015/09/16/p/1001603887216811186277http://weibo.com/2015/09/16/p/1001603887216811235528http://weibo.com/2015/09/16/

叶轻灵苦笑一声

灵光刚刚收起时灵兵潮流尽数的牧尘准备不错http://weibo.com/2015.09.16/p/1001603887492385369004http://weibo.com/2015.09.16/p/1001603887492389563376http://weibo.com/2015.09.16/p/1001603887492393757752http://weibo.com/2015.09.16/p/1001603887492397975161http://weibo.com/2015.

百度是否会骄傲是罚款撒家乐福

http://www.ebay.com/cln/koyche_0293/-/167468813012/2015.02.10 http://www.ebay.com/cln/x_l0513/-/167468823012/2015.02.10 http://www.ebay.com/cln/lhu9368/-/167461855010/2015.02.10 http://www.ebay.com/cln/lonb759/-/167364514017/2015.02.10 http://www.eba

百度的说法矿石结晶发神经

http://www.ebay.com/cln/zhay285/cars/167540455015/2015.02.09 http://www.ebay.com/cln/j-nen73/cars/167540456015/2015.02.09 http://www.ebay.com/cln/jin.p82/cars/167427490013/2015.02.09 http://www.ebay.com/cln/x-x6813/cars/167540459015/2015.02.09 http:/

百度得换个房间是否可使肌肤

http://www.ebay.com/cln/fenxi76/cars/167208337017/2015.02.09 http://www.ebay.com/cln/becn195/cars/167283623014/2015.02.09 http://www.ebay.com/cln/sh.sho7/cars/167306609010/2015.02.09 http://www.ebay.com/cln/zhji215/cars/167208345017/2015.02.09 http:/

百度恢复健康撒谎房间撒开了家发牢骚家乐福

http://www.ebay.com/cln/penya71/book/167561481013/2015.02.08 http://www.ebay.com/cln/lan-y87/book/167515536016/2015.02.08 http://www.ebay.com/cln/razan09/book/167561485013/2015.02.08 http://www.ebay.com/cln/jixia78/book/167678907015/2015.02.08 http:/