您的位置:首页 > 移动开发 > Objective-C

【ASP.NET】GridView与ObjectDataSource的使用

2012-05-03 17:14 274 查看
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联合实现,这个在后面的文章中介绍吧。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息