Как отфильтровать asp: DataGrid - PullRequest
2 голосов
/ 28 апреля 2011

Как мне отфильтровать результаты, показанные в таблице данных asp.net?

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();

    }

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

Это простой способ, но что-то вроде этого должно работать

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 голос
/ 28 апреля 2011

Ну, это все о DataTable.

Общая фильтрация

Вы можете справиться с этим, изменив процедуру SQL / store / etc, которую вы используете для загрузки данных в DataTable, или (и будьте осторожны здесь), загрузив все данных и затем используя ADO.Net встроенные возможности фильтрации.

В последнем случае на ум приходит DataTable.Select ( Статья о DataTable.Select и фильтрация в ADO.Net ).

Искать в Particlar

Однако в контексте поиска лучше всего выполнять работу в базе данных, то есть в вашем SQL. В противном случае вы должны извлекать все данные по сети каждый раз, когда происходит поиск, и затем фильтровать их на клиенте. Если ваш стол всегда будет очень маленьким, это очень реальная проблема производительности. И даже тогда он пахнет довольно плохо, потому что, если он достаточно велик для поиска, вы уже имеете дело с типом таблицы, которая может расти.

Гораздо лучше загрузить именно то, что вам нужно. Это может привести к некоторым раздражающим хранимым процедурам. Это одна из проблем, где инструменты ORM действительно блестят, потому что они позволяют легко выполнять очень динамические запросы без необходимости возиться с большими sprocs с необязательными параметрами и т. Д.

Надеюсь, это поможет!

0 голосов
/ 28 апреля 2011

Есть ли причина, по которой вы выполняете SQL-запрос в Page_Load(...)? Если нет, я бы настоятельно рекомендовал использовать элемент управления SqlDataSource, настроенный с помощью оператора SQL, включая параметр для вашего фильтра и объект 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...