如何使用gridview处理来自数据库的空返回?

时间:2011-03-09 12:28:28

标签: c# sql gridview

我有一个绑定到ObjectDataSource的gridview,它从数据库中检索记录以显示在gridview中。返回记录的过程采用搜索字符串并显示相关结果。但是当没有来自数据库的结果时,我得到一个空的gridview,底部有页码,好像它返回了数据库中的所有记录,如下图所示:

enter image description here

我已经设置了EmptyDataText和EmptyDataTemplate属性,但是当没有结果时它们没有显示。

任何人都知道这里发生了什么?

这是ObjectDataSource和GridView的asp:

<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.我的问题是为什么gridview没有显示EmptyDataTemplate,以及为什么它在没有行时仍显示多个页码。

2 个答案:

答案 0 :(得分:0)

我只是将空结果集绑定到GridView,然后使用OnDataBound事件执行适当的逻辑,即隐藏GridView,显示“无结果”标签等。

答案 1 :(得分:0)

如果数据源为null或为空,我个人甚至不会将其绑定到网格。