ASP.NET 2.0 中的新增服务、控件与功能概述(二)

翻译|其它|编辑:郝浩|2006-05-19 14:56:00.000|阅读 1352 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


数据源控件

    数据绑定在ASP.NET 1.x中占据着显著位置。几行位置恰当的数据绑定代码可以取代大量查询数据库,并使用对Response.Write方法的重复调用,从而将查询结果转换为HTML内容的ASP代码。

    下面的DataSource1.aspx页使用ASP.NET 2.0数据绑定来显示SQL Server Pubs数据库的一部分:

<html>
    <body>
        <form runat="server">
            <asp:SqlDataSource ID="Titles" RunAt="server"
                ConnectionString="server=localhost;database=pubs;Integrated
                Security=SSPI"
                SelectCommand="select title_id, title, price from titles"
            />
            <asp:DataGrid DataSourceID="Titles" RunAt="server" />
        </form>
    </body>
</html>

    SqlDataSource控件定义了数据源以及对它执行的查询,并且DataGrid的DataSourceID属性指向SqlDataSource。当加载该页时,SqlDataSource控件就会执行查询,并将结果提供给DataGrid。

    当然,实际操作中的数据绑定很少会如此简单。假设您希望缓存查询结果,或者使用在其他控件中选择的项目来参数化数据库查询。图2 中的页使用一个SqlDataSource,用Northwind的Customers表中列出的国家/地区来填充一个下拉列表,并使用另一个SqlDataSource,用在该下拉列表中选择的国家/地区中的一系列客户来填充一个DataGrid。请注意元素,它指示DataGrid的SqlDataSource从下拉列表中获取@country的值。还请注意绑定到该下拉列表的SqlDataSource中的EnableCaching和CacheDuration属性。这些声明将SELECT DISTINCT查询的结果缓存60秒。

    上述示例只是粗浅地探讨了可以通过数据源控件完成的工作。例如,您可以使用存储过程,可以使用从查询字符串、用户输入、会话状态和Cookie中提取的值来参数化查询,并且可以指定控件是否应该使用DataSet或DataReader。因为数据源控件包含数据适配器的功能,所以您甚至可以使用数据源控件来更新数据库。随着ASP.NET 2.0最终发布日期的迫近,读者有望看到大量有关数据源控件的文章。在本期杂志中,Dino Esposito在其文章中更为详尽地讨论了这些控件。

    尽管我所讨论的是数据绑定主题,但您还应该知道ASP.NET 2.0支持简化的数据绑定语法。ASP.NET开发人员可以找到与下面这个给人深刻印象的表达式类似的表达式:

<%# DataBinder.Eval (Container.DataItem, "title") %>

    在ASP.NET 2.0中,可以按如下形式写一个相同的表达式:

<%# Eval("title") %>

    除了Eval运算符以外,ASP.NET 2.0还支持名为XPath和XPathSelect(它们使用指向XML文档中数据的XPath表达式)的运算符。

主题与外观(skins)

    如果您不使用属性来丰富控件,那么ASP.NET页面可能会显得非常单调。问题在于:迄今为止,一次只能应用一个属性,并且您无法通过成组地设置控件的可视属性来赋予控件主题。ASP.NET 2.0提供了一项新功能,即输入主题和外观。该功能简化了生成精美页面的任务。

    要查看主题和外观的工作方式,请将以下指令添加到DataSource2.aspx中,如图2 所示:

<html>
    <body>
        <form runat="server">
            <asp:SqlDataSource ID="Countries" RunAt="server"
                ConnectionString="server=localhost;database=northwind;
                Integrated Security=SSPI"
                SelectCommand="select distinct country from customers order by country"
                EnableCaching="true" CacheDuration="60"
            />
            <asp:SqlDataSource ID="Customers" RunAt="server"
                ConnectionString="server=localhost;database=northwind;
                Integrated Security=SSPI"
                SelectCommand="select * from customers where country=@country"
            >
                <SelectParameters>
                    <asp:ControlParameter Name="Country"
                        ControlID="MyDropDownList"
                        PropertyName="SelectedValue"
                    />
                </SelectParameters>
            </asp:SqlDataSource>
            <asp:DropDownList ID="MyDropDownList" DataSourceID="Countries"
                DataTextField="country" AutoPostBack="true" RunAt="server"
            />
            <asp:DataGrid DataSourceID="Customers" RunAt="server" />
        </form>
    </body>
</html>

图2 DataSource2.aspx

    现在刷新该页面。结果如图3中所示。


图3 主题和外观的工作方式

    接下来,赋予该页面完全不同的外观,方法是:添加一个元素,并且更改@ Page指令以指示要使用的页面主题:

    @ Page指令的新Theme属性以声明方式将主题应用到页面中。还可以使用Page类的Theme属性以编程方式应用主题。主题是外观的集合,而外观是应用于一个控件类型的一组可视属性。BasicBlue和SmokeAndGlass是ASP.NET 2.0附带的几个预定义(或全局)主题中的两个。您可以在Microsoft.NET\Framework\...\ ASP.NETClientFiles\Themes下的子目录中找到它们。

    您可以定义自己的主题和外观,并且自定义地将它们部署到应用程序Themes目录的子目录中。每个子目录构成一个主题,并且主题名称与子目录名称相同。一个主题子目录包含一个或多个.skin文件以及该主题使用的任何其他资源(例如,图像文件和样式表)。实际的外观定义包含在.skin文件中,并且非常类似于用来在ASPX文件中声明控件实例的标记。

    为说明这一点,请在包含DataSource2.aspx的文件夹中创建一个名为Themes的子目录。在该Themes目录中,创建一个名为ShockingPink的子目录。将以下内容复制到ShockingPink目录中的新建的.skin文件中:

<asp:DropDownList runat="server" BackColor="hotpink" ForeColor="white" />
<asp:DataGrid runat="server" BackColor="#CCCCCC" BorderWidth="2pt"
    BorderStyle="Solid" BorderColor="#CCCCCC" GridLines="Vertical"
    HorizontalAlign="Left"
>
    <HeaderStyle ForeColor="white" BackColor="hotpink" />
    <ItemStyle ForeColor="black" BackColor="white" />
    <AlternatingItemStyle BackColor="pink" ForeColor="black" />
</asp:DataGrid>

    接下来,将DataSource2.aspx中的@ Page指令更改为:

<%@ Page Theme="ShockingPink" %>

    上述操作的结果无疑是曾经创建过的最为华丽的Web页之一。

    ShockingPink.skin定义了DropDownList和DataGrid控件的默认外观。外观文件不必与它们所属的主题具有相同的名称(尽管它们通常如此)。一个主题可以包含多个.skin文件,而单个.skin文件可以为任意数量的控件类型定义属性。此外,ASP.NET还可以区分默认外观和非默认外观。根据定义,缺少SkinID属性的外观是默认外观。非默认外观包含可以通过控件标记中的SkinID属性引用的SkinID。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP