ASP.NET 2.0 数据绑定--1

 

ASP.NET 2.0 数据绑定

 

一、           目标

1 ASP.NET 数据绑定标准控件

 

2GridView控件实现数据绑定操作

– GridView 数据格式化输出

– GirdView 数据分页与排序

– GirdView 显示图片

– GridView 模板列

        GridView 添加、修改、删除数据

 

二、ASP.NET 中的数据绑定

.数据绑定的工作就是从数据源中把数据传到控件上

.支持数据绑定的控件都具有以下特性

  具有一个名为DataSource的属性

  具有一个名为DataBind的方法

.要绑定一个控件,首先需要初始化一个数据源,然后对控件使用DataBind方法

数据绑定流程

1.数据源

• ASP.NET 1.1使用DataSet作为数据源,建立一个数据源需要使用DataAdapter连接数据库,并通过一个DataCommand来取得查询结果,存储到数据源中。

 

• ASP.NET 2.0提供直接拖拽的控件来实现对数据库的连接与数据源配置。

 

在大多数情况下,我们需要对数据库频繁进行以下操作

  .从数据库中查询一些数据

  .从用户那里获取某些输入,更新至数据库

  .从数据库找到某些记录,删除他们。

这些代码大部分十分相似,通常我们使用粘贴复制来完成。但是这也经常导致一个问题,就是我们会忘记修改数据表或者列的名称,或者对是否是空数据表进行判定。为了避免这样的错误,使用一个封装的数据库连接对象应该是一个非常好的方案。

 

主要的数据源对象有以下三个

用于访问XML文档XmlDataSource

用于访问程序员自己编写的类数据源对象。ObjectDataSource

用于访问所有支持Sql语句的数据库对象,例如SqlServer.ORACLE,ACCESS,SqlDataSource

 

2.支持数据绑定的标准控件

• DropDownList

• ListBox

• CheckBoxList

• RadioButtonList

• BulletedList

 

三、GridView控件

ASP.NET 1.0时代,DataGrid控件是被广泛使用的显示数据库内容的控件,只需要拖放DataGrid控件到页面上,设置少量的属性,就可以对显示数据,并进行排序,甚至可以对数据进行编辑。

但是即便如此,DataGrid依然有它的局限性。

 

虽然DataGird控件有如此多的属性,但是其中有些功能,例如数据排序,记录分页,修改或者删除记录功能依然需要编写一些代码,而且这些代码出错的可能性很大。

 

1DataSource:

• DataSource控件用于把数据从数据库中提取出来,显示DataSource控件的内容,我们可以使用GridView控件,该控件的一个重要属性是DataSource id,通过指定该属性,我们来决定GridView控件显示那个DataSource控件的内容

 

连接Sql SOURCE示例

 

2.格式化输出

在显示数据之后,我们还希望数据在被输出的时候配合某种格式。

• GridView控件专门提供了用以调整显示输出模式的属性,如果你是一个很有艺术天赋的人,你可以通过修改Back ColorFont,Fore Color等属性修改显示模式,或者通过Head SytleRow

StyleAlternatingRowStyleFootSytle属性来修改单元格格式。如果你和我一样没有太多美

感,也没有关系,你可以通过使用auto format属性设置显示模式格式化输出

还可以通过Edit Columns属性添加或删除显示元素,也可以修改显示元素的显示模式。格式化输出

在元素输出模式属性中,可以通过使用FormatString属性来根据显示元素的数据类型设置显示模式,设置方式如{0:c}c表示显示的是金额。

 

使用SKIN格式化输出

在数据绑定事件发生时,根据用户的要求自行处理,显示特殊的输出效果。

 

Demo

标准的auto format

使用skin

根据用户的要求格式化输出(比如对库存为0的商品突显)

 

3.显示master/detail数据

在数据库中经常存在一对多的数据关系。所以用户经常会需要根据某一个条件显示多条数据记录。在这个时候,就需要GridView控件能够和选择控件相结合,方便的完成任务。

• GridView控件只需要设置属性就可完成与选择控件的绑定。

Demo

• GridViewDropDownList绑定

 

4.分页与排序

当显示的数据量过大的时候,一页也许显示不下,这个时候我们需要使用一项技术。把庞大的数据分成若干数据页面,每个页面只显示一定数量的数据。这种技术被称为分页

在查看数据的时候,用户也许希望按照某列的数值对数据显示进行排序,例如从高到低显示考试成绩,或者从低到高显示价格。所以排序技术在数据显示中也非常重要。

 

分页与排序技术在ASP.NET 1.xdatagird中也可以实现,只是需要编写一些代码。在GridView中不用写任何一行代码,就可以方便的实现分页和排序技术。

 

分页可以通过设置Enable Paging和属性中的paging属性来进行配置

排序可以通过使用Enable Sorting和单元属性中的sortexpression属性来设置。

分页Demo

排序Demo

分页并排序Demo

 

5.显示图片

GridView中可以很方便的在某一列显示图片。

首先添加一个ImageField属性列,并指定该属性列为的数据绑定对象,就可以方便的显示图片

显示图片列示例

 

6.使用TemplateFields

• GridView允许各种不同类型的单元格,比如我们已经演示过的BoundFileds,ImageFields。我们还可以在单元格中输出自己需要的HTML或者使用ASP.NET Server端的控件

例如我我们希望对NorthWind中的HireDate列进行判断,日期超过一定天数的员工,我们显示不同的内容。

针对上面的需求,我们可以编写如下函数来完成该功能。

    string ComputeSeniorityLevel(TimeSpan ts)

     {

        int numberOfDaysOnTheJob = ts.Days;

        if( numberOfDaysOnTheJob >= 0 && numberOfDaysOnTheJob <= 1000)

            return "Newbie";

        else if(numberOfDaysOnTheJob > 1000 && numberOfDaysOnTheJob <=4000)

            return "Associate";

        else if(numberOfDaysOnTheJob >= 4000 && numberOfDaysOnTheJob <=8000)

            return "One of the Regulars";

        else

           return "An Ol' Fogey";

     }

同时,使用<%#ComputeSeniorityLevel(DateTime.Now - CType(Eval(“HireDate”),

DateTime))%>做数据绑定

 

使用TemplateFields---2

• TemplateField不但可以作为HTML输出的容器,也可以作为一个ASP.NET Server

件的容器。

例如在显示一个数据库内容的时候需要显示一个一对多的关系,我们希望在同一列

中显示多列内容,就需要使用BulletedList控件

 

TemplateFields中使用BulletedList示例

  

 DataView territoryData;     // this DataView will hold all of the Territories, loaded at Page_Load

 

    protected void Page_Load(object sender, EventArgs e)

    {

        //Load all of the territories into a DataView from the SqlDataSource

        territoryData = (DataView)territoriesDataSource.Select(DataSourceSelectArguments.Empty);

 

    }

    void employeesGridView_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        // For each DataRow in the GridView, programmatically access the BulletedList, filter

        //the DataView based on the GridView row's EmployeeID value and bind the filtered DataView

        //to the BulletedList

        if (e.Row.RowType = DataControlRowType.DataRow)

        {

            BulletedList bl = (BulletedList)e.Row.FindControl("bltTerritories");

            territoryData.RowFilter = "EmployeeID = " + ((DataRowView)e.Row.DataItem)["EmployeeID"].ToString();

            bl.DataSource = territoryData;

            bl.DataBind();

        }

    }

7.显示细节数据

在一对多的表关系中,我们会希望能够通过单击一条记录显示更多的信息。或者是有表中太多列,我们之希望显示一些基本信息和我们选择列的全部信息,这个时候我们需要一个Drilling-down的关联表格。

例如Northwind数据库中包括一个Order和一个Order Details表,其中Order包含

Demo

 

 

显示OrderOrder Details

在上面的例子中,如果左侧的数据表格翻页,右侧的细节表格并不会改变。这样可能会看起来有点不舒服。通过

void OrderGridView_PageIndexChanged(object sender, EventArgs e)

{

    OrderGridView.SelectedIndex = -1;

}

对页面变更进行如下追踪,可以解决以上问题。

Demo

使用Pageindexchanged事件

 

8.对页面数据求和

如同刚才的例子中所显示的,我们还可能对页面的显示的数据进行计算,例如我们希望对所有订单的总价进行求和,并显示在最下面。通过DataBinder.Eval方法我们可以获得DataRow中的数据,并对其求和即可。

Demo

页面数据求和示例

    decimal priceTotal  = 0;

    int  quantityTotal = 0;

 

    void detailsGridView_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        if (e.Row.RowType == DataControlRowType.DataRow)

        {

            // add the UnitPrice and QuantityTotal to the running total variables

            priceTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "UnitPrice"));

            quantityTotal += Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "Quantity"));

        }

        else if (e.Row.RowType == DataControlRowType.Footer)

        {

            e.Row.Cells(0).Text = "Totals:";

 

            //for the Footer, display the running totals

            e.Row.Cells(1).Text = priceTotal.ToString("c");

            e.Row.Cells(2).Text = quantityTotal.ToString("d");

 

            e.Row.Cells(1).HorizontalAlign = HorizontalAlign.Right;

            e.Row.Cells(2).HorizontalAlign = HorizontalAlign.Right;

            e.Row.Font.Bold = True;

        }

    }

9.编辑、删除数据的方法

通过在Sql DataSource中设置属性,可以完成编辑、删除操作的数据绑定

编辑、删除数据的方法

向导第一个CheckBox被选中之后就会自动生成添加、修改、删除数据记录的代码,第二

个数据CheckBox一旦被选中,就需要确保数据库自数据库中取出之后都没有被更改

过。

同时需要注意,一旦你希望通过GridView编辑、删除数据,那么在Sql DataSource查询的数据列中必须要有主键存在

在数据源配置好只有,只需要选择好Enable Update,Enable Deleting,即可编辑、删除数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值