我有一个gridview,它从一个sortedlist中获取值。我想在将这些值放入gridview之前过滤这些值,而不从列表中取出值。
有一种简单的方法吗?或者我是否必须通过另一个列表重定向数据并将gridview指向它?
答案 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。这应该让你开始。
一件好事是代码隐藏现在几乎是空的。它只需要处理与绑定,排序或分页无关的事件。