我有一个绑定到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,以及为什么它在没有行时仍显示多个页码。
答案 0 :(得分:0)
我只是将空结果集绑定到GridView,然后使用OnDataBound事件执行适当的逻辑,即隐藏GridView,显示“无结果”标签等。
答案 1 :(得分:0)
如果数据源为null或为空,我个人甚至不会将其绑定到网格。