使用ASP.NET Atlas ListView控件显示列表数据

asp.net|控件|数据|显示

English Version: http://dflying.dflying.net/1/archive/113_display_listible_data_using_aspnet_atlas_listview_control.html

在这个系列中,我将介绍一些Atlas Sys.UI.Data中较高级的控件,包括:

Sys.UI.Data.ListView:使用ASP.NET Atlas ListView控件显示列表数据
Sys.UI.Data.ItemView:待续
Sys.UI.Data.DataNavigator:待续
Sys.UI.Data.XSLTView:待续
这篇是其中的第一篇:使用ASP.NET Atlas ListView控件显示列表数据

在目前的大部分Web程序中,我们都需要显示给用户一些列表数据。ASP.NET中的GridView服务器控件提供了这种功能,Atlas中的客户端控件ListView也可以在客户端提供类似功能,并以AJAX方式运行。虽然您可以使用传统的GridView控件加上Atlas的UpdatePanel提供同样的AJAX运行方式,但是这种实现方式较低效,也不是“纯粹”的Atlas方法。推荐的方法是采用Atlas的客户端控件ListView来代替。不要担心,Atlas的ListView控件和GridView一样简单,而其二者在很多概念方面是相似的,例如ItemTemplate。但是需要注意的是目前IDE中并没有提供对Atlas脚本的智能感知功能,加之Atlas脚本也没有编译时期检查,所以在书写代码的时候应该格外小心。

使用ListView的时候应该提供给其一些必要的模版(Template),以告诉Atlas应该如何渲染您的内容。ListView中有如下模版:

layoutTemplate:这个模版用来渲染包含列表项目的容器(例如使用<table>标记),列表的头部(例如使用<thead>标记),尾部等。您必须为ListView指定一个layoutTemplate。而且这个模版必须包含一个itemTemplate模版,也可选包含一个separatorTemplate模版。
itemTemplate:这个模版用来渲染列表中的一个项目(例如使用<tr>标记)。这个模版必须被置于layoutTemplate中。
separatorTemplate:这个模版用来渲染列表中的项目之间的分隔元素(例如使用<hr>标记)。这个模版必须被置于layoutTemplate中。
emptyTemplate.:这个模版用来渲染没有项目存在时的ListView。此时可能与该ListView相关的DataSource对象中没有项目,或是正在从服务器中取得的过程中。
ListView中还有一些属性:

itemCssClass:指定项目条目的css class。
alternatingItemCssClass:指定间隔的项目条目的css class。
selectedItemCssClass:指定被选中的项目条目的css class。
separatorCssClass:指定分隔元素的css class。
itemTemplateParentElementId:这个属性指定了itemTemplate和separatorTemplate的父元素。这样itemTemplate和separatorTemplate元素就可以在其中被重复渲染。
OK,让我们通过一个实例来说明如何使用ListView控件:

首先,我们编写一个返回.NET中DataTable的Web Service。注意到在这里将继承于Microsoft.Web.Services.DataService基类,并且为service方法加上定义在名称空间System.ComponentModel中的属性DataObjectMethod。在service方法的开头,我们使用System.Threading.Thread.Sleep(2000)来模拟2秒钟的网络延迟,以便可以看到emptyTemplate中的内容。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MyService  : Microsoft.Web.Services.DataService {

    [DataObjectMethod(DataObjectMethodType.Select)]
    public DataTable GetListData()
    {
        System.Threading.Thread.Sleep(2000);
       
        DataTable dt = new DataTable("MyListData");
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Email", typeof(string));
        DataRow newRow;
        for (int i = 0; i < 5; ++i)
        {
            newRow = dt.NewRow();
            newRow["Name"] = string.Format("Dflying {0}", i);
            newRow["Email"] = string.Format("Dflying{0}@dflying.net", i);
            dt.Rows.Add(newRow);
        }
        return dt;
    }
}

然后,添加一些ASP.NET页面中必须的控件/标记: <atlas:ScriptManager ID="ScriptManager1" runat="server" />
<!-- Element for myList (container) -->
<div id="myList"></div>
<!-- Layout Elements -->
<div style="display: none;">
</div>
在上面的标记中,我们加入了三个标记:一个必须的ScriptManager控件。一个id为myList的div,用来让Atlas把渲染后的ListView放置于这里。一个隐藏的div,用于定义我们的模版。这个隐藏div中的元素在页面上是不可见的,只是用来提供给Atlas必要的模版。

我们在这个隐藏的div中加入如下ListView的模版:

<!-- Layout Template -->
<table id="myList_layoutTemplate" border="1" cellpadding="3">
    <thead>
        <tr>
            <td><span>No.</span></td>
            <td><span>Name</span></td>
            <td><span>Email</span></td>
        </tr>
    </thead>
    <!-- Repeat Template -->
    <tbody id="myList_itemTemplateParent">
        <!-- Repeat Item Template -->
        <tr id="myList_itemTemplate">
            <td><span id="lblIndex" /></td>
            <td><span id="lblName" /></td>
            <td><span id="lblEmail" /></td>
        </tr>
        <!-- Separator Item Template -->
        <tr id="myList_separatorTemplate">
            <td colspan="3">Separator</td>
        </tr>
    </tbody>
</table>
<!-- Empty Template -->
<div id="myList_emptyTemplate">
    No Data
</div>

上面的代码中您可以看到我提到的所有四种模版。另外还要指定每一个模版一个id,将用于下面的Atlas脚本声明中。在这个例子中我将以HTML Table的形式渲染这个ListView,很抱歉分隔元素将会很丑陋(一个空行)。

最后在页面中添加Atlas脚本声明:

<dataSource id="listDataSource" autoLoad="true" serviceURL="MyService.asmx" />

<listView id="myList" itemTemplateParentElementId="myList_itemTemplateParent">
    <bindings>
        <binding dataContext="listDataSource" dataPath="data" property="data" />
    </bindings>
    <layoutTemplate>
        <template layoutElement="myList_layoutTemplate" />
    </layoutTemplate>
    <itemTemplate>
        <template layoutElement="myList_itemTemplate">
            <label id="lblIndex">
                <bindings>
                    <binding dataPath="$index" transform="Add" property="text"/>
                </bindings>
            </label>
            <label id="lblName">
                <bindings>
                    <binding dataPath="Name" property="text" />   
                </bindings>
            </label>
            <label id="lblEmail">
                <bindings>
                    <binding dataPath="Email" property="text" />
                </bindings>
            </label>                   
        </template>
    </itemTemplate>
    <separatorTemplate>
        <template layoutElement="myList_separatorTemplate" />
    </separatorTemplate>
    <emptyTemplate>
        <template layoutElement="myList_emptyTemplate"/>
    </emptyTemplate>
</listView>

这里我添加了一个Atlas客户端DataSource对象以从Web Service中取得数据。这里我们暂且不多谈DataSource(可能在后续文章中有所介绍)。让我们来看一下ListView相关的定义:在ListView的定义中,我们指定了itemTemplateParentElementId属性。然后在ListView的内部定义了一个binding段,用来把DataSource中取得的数据与这个ListView绑定起来。我们还定义了四个模版段,每个模版段都用layoutElement与上面定义过的四种模版关联。注意到在layoutTemplate模版中的第一个label控件,我们在其绑定中指定了一个Add transformer以将从0开始的顺序变为从1开始(关于Atlas Transformer,请参考我的这篇文章:http://dflying.cnblogs.com/archive/2006/04/05/367908.html)。

大功告成,运行一下吧。

时间: 2024-12-03 11:01:06

使用ASP.NET Atlas ListView控件显示列表数据的相关文章

listview-C#中,ListView控件显示列表头异常

问题描述 C#中,ListView控件显示列表头异常 在窗体加载时,列表头显示不正常,我只需要显示3个列标题!不知为何会变成这样??求大神指点 解决方案 贴出你的代码才知道,你是怎么加载的列头,有没有重画过. 解决方案二: C# ListView控件的分组显示与数据绑定

使用 ASP.NET Atlas PageNavigator控件实现客户端分页导航

asp.net|导航|分页|客户端|控件 English Version: http://dflying.dflying.net/1/archive/127_paging_your_list_using_aspnet_atlas_pagenavigator_control.html 在这个系列中,我将介绍一些Atlas Sys.UI.Data中较高级的控件,包括: Sys.UI.Data.ListView:使用ASP.NET Atlas ListView控件显示列表数据 Sys.UI.Data.

ASP.NET Atlas简单控件介绍

asp.net|控件 A  SP.NET Atlas中引入了客户端控件的概念,用面向对象思想将客户端JavaScript将要操作的DOM元素封装起来,带来了更清晰的代码模型以及更好的可复用性(不足之处是效率有所降低).Atlas的客户端控件是连接JavaScript与DOM元素的桥梁,我们应该尽可能的使用客户端控件与DOM元素打交道,也就是以Atlas的方法来编写我们的程序.同时,Atlas对JavaScript面向对象方面的强大扩展(请参考:ASP.NET Atlas对JavaScript的扩

ASP.NET Atlas简单控件介绍之四大控件

asp.net|控件 Atlas中的客户端控件均继承或间接继承于Sys.UI.Control基类(请参考:ASP.NET Atlas简单控件介绍之两个基类),并有所扩展,本文将介绍Atlas内建的简单控件InputControl,TextBox,Button和CheckBox. Sys.UI.InputControl InputControl类是一个抽象类,作为所有提供用户输入的控件(例如TextBox,见下文)的基类,提供了输入数据验证等公有操作.InputControl抽象类提供如下属性:

毕业设计,急!asp.net页面的控件显示问题

问题描述 毕业设计,急!asp.net页面的控件显示问题 再设计的时候页面的文本框和按钮不知道为什么会显示的很小 设置了也不能变大的 css样式有时候设计好了,但是运行之后会有改变.会是浏览器问题还是电脑问题? 解决方案 用IE F12看下运行的时候的css怎么应用的. 解决方案二: 多数是css问题. Chrome 右键"审查元素",调出调试窗口.然后选择变小的元素,在调试窗的样式栏查看实际应用的css 解决方案三: 你进入开发者模式 看看按钮相关的CSS是什么 修改CSS应该就可以

vb.net中listview控件显示

问题描述 vb.net中listview控件显示ListView1.Columns.Add("Title")程序启动后,没有显示这列??? 解决方案 解决方案二:要先設置View屬性listView1.View=View.Details;解决方案三:listView1.View=View.Details

ASP.NET Atlas简单控件介绍之两个基类

asp.net|控件 ASP.NET Atlas中引入了客户端控件的概念,用面向对象思想将客户端JavaScript将要操作的DOM元素封装起来,带来了更清晰的代码模型以及更好的可复用性(不足之处是效率有所降低).Atlas的客户端控件是连接JavaScript与DOM元素的桥梁,我们应该尽可能的使用客户端控件与DOM元素打交道,也就是以Atlas的方法来编写我们的程序.同时,Atlas对JavaScript面向对象方面的强大扩展(请参考:ASP.NET Atlas对JavaScript的扩展)

asp.net使用Gridview控件显示数据库内容

实验主要步骤: 1:新建一个数据库名字为EmployDB,在其中添加一张表EmployInfo,字段有Name,Sex,Job,Salary, 并且向其中插入一些数据. 2: 新建一个ASP.NET程序,在主界面上拖放一个Gridview数据库控件. 3:添加命名空间:using System.Data.SqlClient; Default.aspx 使用Gridview控件显示数据库内容 老 蔡 Email:cxianfa@126.com 实验主要步骤: 1:新建一个数据库名字为EmployD

ASP.NET用Repeater控件显示数据

asp.net|控件|数据|显示     如果你正在使用ASP.NET,你一定对DataGrid控件非常熟悉.DataGrid控件提供了各种特性,通过这些特性可以很容易地在一个Web页面上以列表形式显示数据.但是,如果你不想使用HTML表格形式呢?此时,可以使用一个DataGrid的一个鲜为人知的兄弟控件,即Repeater控件.Repeater控件提供显示你所需要数据的灵活性.      Repeater控件是什么?      Repeater是一个可重复操作的控件,也就是说,它通过使用模板显