c# - 如何使用 gridview 处理数据库的空返回?

标签 c# sql gridview

我有一个绑定(bind)到 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 以及为什么它在没有行时仍然显示多个页码。

最佳答案

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

关于c# - 如何使用 gridview 处理数据库的空返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245775/

相关文章:

sql - TSQL - 表值函数中的 If..Else 语句 - 无法通过

Android - 从位置 A(索引)检查位置 B(索引)是否在 GridView 布局中与它成对角线,而不管是否接近

c# - Gridview 不保留 c# 和 ASP.Net 中的旧值

c# - 无法隐式转换类型。存在显式转换(您是否缺少强制转换?)

c# - 在 Windows 8 中使用 go-between 进行流式传输

php - 在具有相同别名的 2 个表上选择相同字段

c# - 获取 gridview 的页脚行单元格值

c# - SignalR 的 Ninject 依赖注入(inject)

c# - 项目引用不会编译 'should be reference'

统计记录的 SQL 查询