Как обрабатывать пустой возврат из базы данных с gridview? - PullRequest
3 голосов
/ 09 марта 2011

У меня есть сетка, связанная с ObjectDataSource, которая извлекает записи из базы данных для отображения в сетке. Процедура возврата записей принимает строку поиска и отображает соответствующие результаты. Однако, когда нет результатов из базы данных, я получаю пустое представление сетки с номерами страниц внизу, как если бы оно возвращало все записи из базы данных, как показано на рисунке ниже:

enter image description here

Я установил свойства EmptyDataText и EmptyDataTemplate, но они не отображаются при отсутствии результатов.

Кто-нибудь знает, что здесь происходит?

Вот asp для ObjectDataSource и GridView:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" EnablePaging="True" SelectCountMethod="GetUsersCount"
        SelectMethod="GetUsers" SortParameterName="sortColumn" TypeName="WebsiteBuilder.Core.UUser"
        OnSelecting="ObjectDataSource1_Selecting">
        <SelectParameters>
            <asp:Parameter Name="searchExpression" Type="String" DefaultValue="" />
        </SelectParameters>
    </asp:ObjectDataSource>

<asp:GridView ID="grdUsers" runat="server" CssClass="grdUsers" AutoGenerateColumns="false"
        OnDataBound="grdUsers_DataBound" DataSourceID="ObjectDataSource1" AllowPaging="true"
        AllowSorting="true" OnRowCommand="grdUsers_RowCommand" PageSize="5" EmptyDataText="No Results">
        <PagerSettings FirstPageText="First" LastPageText="Last" Mode="NumericFirstLast"
            PageButtonCount="5" Position="Bottom" />
        <PagerStyle CssClass="pagination" HorizontalAlign="Center" VerticalAlign="Middle" />
        <EmptyDataTemplate>No Results</EmptyDataTemplate>`

Вот код для выбранного события:

        protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        if (!String.IsNullOrEmpty(this.txtSearchBox.Text))
        {
            e.InputParameters["searchExpression"] = "%" + this.txtSearchBox.Text + "%";
        }
        else return;

    }

И код для извлечения данных:

            cmd.AddParameter("searchExpression", searchExpression);
            cmd.AddParameter("sortExpression", sortColumn);
            cmd.AddParameter("startRowIndex", startRowIndex);
            cmd.AddParameter("maximumRows", maximumRows);

            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds);

            DataTable dt = ds.Tables[0];

            int i = dt.Rows.Count;

            return ds.Tables[0];

Когда я проверяю i в отладке, значение равно 0. Мой вопрос состоит в том, почему представление сетки не показывает EmptyDataTemplate и почему оно все еще показывает несколько номеров страниц, когда нет строк.

Ответы [ 2 ]

0 голосов
/ 05 августа 2011

лично, если источник данных нулевой или пустой, я бы даже не связывал его с сеткой.

0 голосов
/ 05 августа 2011

Я бы просто привязал пустой набор результатов к GridView, а затем использовал событие OnDataBound для выполнения соответствующей логики, то есть скрыл GridView, отобразил метку «Нет результатов» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...