在DataList中使用用户控件

来源:互联网 发布:网络大电影数据平台 编辑:程序博客网 时间:2024/05/18 18:53

DataList相对于datagrid对数据的显示要灵活一些(还是在vs2003的叫法).应为DATALIST提供了几个模板,而在模板中可以灵活的放置一些自定义的用户控件。具体实施如下:

先创建用户控件:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="authorNormal.ascx.cs" Inherits="authorNormal" %>
<table border="1" cellpadding="0" cellspacing="0" style="border-left-color: aqua; border-bottom-color: aqua; border-top-style: solid; border-top-color: aqua; border-right-style: solid; border-left-style: solid; border-right-color: aqua; border-bottom-style: solid" width="400">
    <tr>
        <td style="width: 100px">
            作者编号:</td>
        <td style="width: 100px">
            <asp:Label ID="lblId" runat="server"></asp:Label></td>
    </tr>
    <tr>
        <td style="width: 100px; height: 21px">
            作者姓名:</td>
        <td style="width: 100px; height: 21px">
            <asp:Label ID="lblName" runat="server"></asp:Label></td>
    </tr>
</table>

后台代码:

 private string au_ID;
    public string Au_ID
    {
        set
        {
            au_ID = value;
        }
        get
        {
            return au_ID;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.bind();
        }
    }
    private void bind()
    {
        SqlDataReader sdr = new Author().show(this.Au_ID );
        while (sdr.Read())
        {
            this.lblId.Text  = sdr["au_id"].ToString();
            this.lblName .Text = sdr["au_lname"].ToString().Trim() + " " + sdr["au_fname"].ToString().Trim();
        }
    }
}

注意:要定义用户控件的一个属性,该属性可以是只写的,用于接收datalist绑定的信息。

前台页面的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UserControlInDataList.aspx.cs" Inherits="UserControlInDataList" %>

<%@ Register Src="authorNormal.ascx" TagName="authorNormal" TagPrefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
    </div>
        <div style="text-align: center">
            <table>
                <tr>
                    <td style="width: 100px; height: 37px;">
                        <asp:DataList ID="DataList1" runat="server" RepeatColumns="2">
                            <ItemTemplate>
                                <uc1:authorNormal id="AuthorNormal1" runat="server"  Au_ID =<%#DataBinder.Eval(Container.DataItem,"au_id") %>>
                                </uc1:authorNormal>
                            </ItemTemplate>
                        </asp:DataList></td>
                </tr>
            </table>
        </div>
    </form>
</body>
</html>

后台代码:

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.DataList1.DataSource = new Author().bind();
            this.DataList1.DataBind();
            this.DataList1.DataKeyField = "au_id";
        }
    }

在绑定的页面内容时候,可以使用任何的数据(查询后的,或内存,或从XML文件加载都可以)。

特别要强调的是:如果是根据条件查询后的往往要通过viewstate或session传递,如果传递的数据多,可以将数据先一个arraylist中,然后传递,然后在datalist页面绑定的时候,可以借助于一个虚拟表。

 

原创粉丝点击