【问题标题】:How to handle empty return from database with gridview?如何使用gridview处理数据库的空返回?
【发布时间】:2011-03-09 12:28:27
【问题描述】:

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

我已经设置了 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 以及为什么在没有行时它仍然显示多个页码。

【问题讨论】:

  • 你能告诉我们你用来将数据绑定到gridview的方法吗?
  • 除了 Davide 的评论之外,您是否执行了该程序并确定确实没有返回任何内容?
  • 是的,我计算了返回的行数,它是 0。我刚刚在调试中运行它并检查了网格的页数属性,它设置为 0,就像我期望的那样它是。我将编辑问题以显示绑定。
  • 能否也添加grdUsers_DataBound和ObjectDataSource1_Selecting代码?
  • 标题是如何生成的?我希望标题不被视为一行,因此数据网格不为空。

标签: c# sql gridview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-16
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 2015-02-14
      • 1970-01-01
      相关资源
      最近更新 更多