在gridview上过滤数据,将sortedlist作为数据源

时间:2010-06-04 12:24:27

标签: asp.net

我有一个gridview,它从一个sortedlist中获取值。我想在将这些值放入gridview之前过滤这些值,而不从列表中取出值。

有一种简单的方法吗?或者我是否必须通过另一个列表重定向数据并将gridview指向它?

1 个答案:

答案 0 :(得分:1)

可能有很多方法可以做到这一点,但没有一种方法是神奇的。所有这些都涉及一些工作。

如果列表在内存中,是的,您必须在绑定到网格之前通过过滤过程清洗列表。

如果列表来自数据库,那么您应该在数据库级别进行过滤。我喜欢这样做的方法是将网格绑定到ObjectDataSource。您还可以将UI中的其他控件绑定为ObjectDataSource中的select参数。 (您还可以对ObjectDataSource进行排序和分页,以便可以将所有内容都内置到数据库查询中,并且网格仅绑定到要显示的数据。)

这是一个完全配置的ObjectDataSource:

<asp:ObjectDataSource ID="CustomerObjectDataSource" runat="server" 
    EnablePaging="True" 
    MaximumRowsParameterName="totalRows" 
    StartRowIndexParameterName="firstRow" 
    TypeName="Northwind.Business.CustomerSource" 
    DataObjectTypeName="Northwind.Business.CustomerDTO"
    SelectMethod="Load" 
    UpdateMethod="Save" 
    InsertMethod="Insert" 
    DeleteMethod="Delete"
    SelectCountMethod="CustomerCount" 
    SortParameterName="sortExpression">
    <SelectParameters>
        <asp:ControlParameter ControlID="ddlRegion" Name="region" 
            PropertyName="SelectedValue" />
    </SelectParameters>
</asp:ObjectDataSource>    

请注意,它绑定到下拉列表以供在数据库查询中选择。

这是网格,带有绑定:

<asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" 
    DataSourceID="CustomerObjectDataSource" 
    DataKeyNames="CustomerID"
    AllowPaging="True" 
    AllowSorting="True" AutoGenerateDeleteButton="True" 
    AutoGenerateEditButton="True" AutoGenerateSelectButton="True" 
    onrowdeleted="GridView1_RowDeleted" onrowupdated="GridView1_RowUpdated">
    <Columns> .....

这是ObjectDataSource绑定的方法以供选择:

public static List<CustomerDTO> Load(
    int totalRows, 
    int firstRow, 
    string sortExpression,
    string region)
{ ... }

Load方法构建查询并运行它,然后返回数据。它可以是IEnumerable或List,如您所见,或者是DataSet或DataTable。这应该让你开始。

一件好事是代码隐藏现在几乎是空的。它只需要处理与绑定,排序或分页无关的事件。