【ASP.NET】GridView与ObjectDataSource的使用

GridView是在ASP.NET2.0中新引入的一个控件,用于显示数据库中的记录以及分页、排序和修改等操作。GridView还能够使用客户端(client-side)脚本来进行排序和分页,以避免将整个页面发回。

要使用一个GridView控件显示数据集是很容易的,只需要一个GridView控件和一个DataSource,DataSource可以是SqlDataSource(表示来自于SQL数据库的记录集,如Microsoft SQL Server和Oracle数据库),ObjectDataSource,AccessDataSource等。在我所做的项目中,因为使用了Linq,所以多使用ObjectDataSource,下面的例子也是使用ObjectDataSource。

 

1、 显示数据集中的数据。

从Toolbox中拖一个GridView控件和一个ObjectDataSource到你的页面中,然后进行配置。

 

<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1"CellPadding="4" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False"AutoGenerateDeleteButton="True" DataKeyNames="CategoryId"             EnableSortingAndPagingCallbacks="True" PageSize="6"            onselectedindexchanged="GridView1_SelectedIndexChanged"            onpageindexchanged="GridView1_PageIndexChanged"            onpageindexchanging="GridView1_PageIndexChanging">

            <FooterStyle BackColor="#CCCC99" />

            <RowStyle BackColor="#F7F7DE" />

            <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White"/>

            <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right"/>

            <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />

            <AlternatingRowStyle BackColor="White" />

            <Columns>

                <asp:BoundField DataField="CategoryID" HeaderText="Id" ReadOnly="True"SortExpression="CategoryID" />

                <asp:BoundField DataField="Name" HeaderText="Name"SortExpression="Name" />

                <asp:BoundField DataField="Description" HeaderText="Description"SortExpression="Description" />               

            </Columns>

        </asp:GridView>

 

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"

        DeleteMethod="DelteCategory"

        SelectMethod="GetCategories" TypeName="CategoryService"

        UpdateMethod="UpdateCategory" SortParameterName="orderBy">

        <DeleteParameters>

         </DeleteParameters>

        <UpdateParameters>           

        </UpdateParameters>

        <SelectParameters>           

        </SelectParameters>

        <InsertParameters>         

        </InsertParameters>

</asp:ObjectDataSource>

 

GridView支持以下字段类型:

BoundField:以字符串形式显示字段的值

ButtonField:显示用户指定的按钮

CheckboxField:当字段类型为Boolean显示为一个CheckBox

CommandField:自动生成一个命令按钮,如Edit,Update 或者Cancel

HyperLinkField:将字段的值显示为一个超链接

ImageField:当字段的值表示一张图片时,显示该图片

TemplateField:用户可以通过提供一个Template来自定义某一列的显示。

可以使用NullDisplayText属性指定当某个字段的值为空是显示什么内容。

 

在将页面切换到Design标签,选中ObjectDataSource1,然后可以对其配置。可以设置TypeName,SelectMethod等属性。例如上面示例中就表示在类CategoryService中,有对数据库中Category表进行操作的方法,分别为GetCategories,DelteCategory,InsertCategory,UpdateCategory。这些方法的参数设置可以在ObjectDataSource内的< DeleteParameters >等标签中设置,如果所有参数都在GridView中的DataField中存在,可以不设置,在更新是会自动与各个方法中具有相同名字的参数进行匹配。注意在GridView中指定DataKeyNames,它使用指定的DataKey标记每一行。

例如上例中的Update方法是这样的:

public void UpdateCategory(int categoryID, string name, string description)

    {

        Category_Table category = TestDBUtility.DataContext.Category_Tables.Where(c => c.CategoryID == categoryID).FirstOrDefault();

        if (category != null)

        {

            category.Name = name;

            category.Description = description;

            TestDBUtility.DataContext.SubmitChanges();

        }

       

    }

注意上面方法中参数。他们应当与DataField中指定的一样(大小写无关),如果有其他的参数,则需要在<UpdateParameters>  </UpdateParameters>中指定

 

2、分页与排序

要实现分页功能,只要设定GridView的AllowPaging属性为true即可,还可以通过PageSize属性设置页面显示的数据项数量。

要实现排序功能,可以将AllowSorting属性设置为true。然后再需要排序的列中设置SortExpression,一般SortExpression跟绑定的字段是一样的。接下来在ObjectDataSource中设置SortParameterName,这个SortParameterName应当与Select方法中的sort参数一样,例如在上例中,SelectMethod方法为:

public static List<Category_Table> GetCategories(string orderBy)

    {

        if (string.IsNullOrEmpty(orderBy))

        {

            return TestDBUtility.DataContext.Category_Tables.ToList();

        }

        else

        {

            returnTestDBUtility.DataContext.Category_Tables.OrderBy(orderBy).ToList();

        }

       

}

其中的参数orderBy用于对搜索结果进行排序,因此在ObjectDataSource中将SortParameterName设置为“orderBy”,当用户点击列表头时,就可以将SortExpression中指定的值传递给这个参数,从而完成排序。

 

注意:将GridView属性EnableSortingAndPagingCallbacks设置为true,可以允许客户端排序和分页,此时GridView使用Javascript从Web server请求更新的数据集(使用Microsoft Internet Explorer XMLHTTPRequest对象),而不是将整个页面全部发会。

 

3、更新和删除数据

将GridView属性AutoGenerateEditButton设置为true,就会在GridView表格中第一列显示一个Eidt,你也可以通过设置BoundField来设置命令按钮。点击Edit即可以实现对数据列进行编辑,要想将编辑的结果更新到数据库中,还需要在ObjectDataSource中提供UpdateMethod。

大多数情况下,GridView会将字符串自动转化为UpdateMethod中的参数类型,如将CategoryID转化为整型,将CheckBox转化为Boolean。但是有些类型却必须在DataSource中指定数据类型。

       要实现删除功能,只要将AutoGenerateDeleteButton设置为true,并提供DeleteMethod方法即可。

 

4、在ObjectDataSource中使用Object type方法实现更新与删除

前面示例中使用的更新方法可以成为简单类型(Simple type)方法,接下来使用另外一种方法,称其为对象类型(Object type)方法。

       为了编程方便,有时需要将数据库中的表以及字段对应到程序中的一个类中,这样通过类对象就可以实现对数据的更新以及增删,(在.NET3.5中,linq可以帮助我们快速的完成从数据库表到对象的转换),ObjectDataSource支持对对象类型进行更新和删除。只要设置DataObjectTypeName属性。同时UpdateMethod和DeleteMethod的参数也应当修改为DataObjectTypeName中指定的类型。

    例如CategoryService中UpdateMethod的形式为:

public void UpdateCategory(Category_Table category)

    {

        Category_Table categoryObj = TestDBUtility.DataContext.Category_Tables.Where(c => c.CategoryID == category.CategoryID).FirstOrDefault();

        if (categoryObj != null)

        {

            categoryObj.Name = category.Name;

            categoryObj.Description = category.Description;

        }

        TestDBUtility.DataContext.SubmitChanges();

}

将ObjectDataSource中的UpdateMethod设置为UpdateCategory,将DataObjectTypeName设置为Category_Table,就可以实现更新操作。当用户在GridView中点击Update按钮后,系统会生成一个Category_Table实例,并使用修改行中的值给该实例中的属性赋值,然后作为参数传递给UpdateCategory方法,在UpdateCategory方法中,实现对数据库中该数据行的更新。

 

5、插入数据

       插入数据可以通过与DetailsView联合实现,这个在后面的文章中介绍吧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值