如何过滤asp.net Datagrid中显示的结果?
HTML
<asp:TextBox ID="SearchText" runat="server" OnTextChanged="UpdateFilter" />
<asp:DataGrid ID="gvProjList" runat="server" CellPadding="4"
ForeColor="#333333" GridLines="None" style="text-align: left"
Width="400px" AllowSorting="true">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
</asp:DataGrid>
C#
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
DataTable dt ....
....
gvProjList.DataSource = dt;
gvProjList.DataBind();
}
}
protected void UpdateFilter(object sender, EventArgs e)
{
// ????
// ViewState["LastFilter"] = SearchText.Text;
// gvProjList.DataBind();
}
答案 0 :(得分:2)
这很简单,但这样的事情应该有效
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}
protected void UpdateFilter(object sender, EventArgs e)
{
BindGrid();
}
private void BindGrid()
{
DataTable dt = new DataTable();
//...
dt.DefaultView.RowFilter = "SomeColumnInTheDataTable = '" + SearchText.Text + "'";
gvProjList.DataSource = dt.DefaultView;
gvProjList.DataBind();
}
答案 1 :(得分:1)
嗯,这都是关于DataTable的。
一般过滤
您可以通过更改用于将数据加载到DataTable中的SQL /存储过程/等来处理此问题,或者(并在此处小心)通过加载所有数据然后使用ADO来处理。 Net的内置过滤功能。
对于后一种情况,我会想到DataTable.Select(Article on DataTable.Select and Filtering in ADO.Net)。
在Particlar中搜索
但是,在搜索环境中,最佳做法是在数据库中进行工作,这在SQL中是有意义的。否则,每次搜索时都必须通过线路拉所有数据,然后在客户端上对其进行过滤。除非你的表总是非常小,否则这是一个非常真实的性能问题。即便如此,它闻起来也很糟糕,因为如果它足够大以至于需要搜索,那么你已经在处理可能增长的表格了。
最好只加载你需要的东西。这可能导致一些烦人的存储过程。这是ORM工具真正发挥作用的问题之一,因为它们可以很容易地进行非常动态的查询,而不必使用带有可选参数的大型sprocs等等。
希望有所帮助!
答案 2 :(得分:-1)
您是否有理由在Page_Load(...)
中执行SQL查询?如果不是,我强烈建议使用配置了SQL语句的SqlDataSource
控件,包括过滤器的参数和ControlParameter
集合中的SqlDataSource.SelectParameters
对象。所有这些都可以以声明方式完成,并且对SQL和ASP.NET服务器都更有效。
最重要的是,它可以在标记中完成:
<asp:TextBox ID="SearchText" runat="server" OnTextChanged="UpdateFilter" />
<asp:DataGrid ID="gvProjList" runat="server" CellPadding="4" ForeColor="#333333"
GridLines="None" Style="text-align: left" Width="400px" AllowSorting="true" DataSourceID="SqlDataSource1">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
</asp:DataGrid>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT * FROM [Products] WHERE [Description] LIKE '%' + @SearchText + '%';">
<SelectParameters>
<asp:ControlParameter DbType="String" ControlID="SearchText" PropertyName="Text"
DefaultValue="" />
</SelectParameters>
</asp:SqlDataSource>