我有一个ASP.NET 2.0(C#)的Web应用程序,并在其中我有一个从Oracle数据库获取其数据的GridView。如何检查一个空Gridview
我想知道如何检查gridview是否为空,并做些什么。
我已经尝试:
if(GridView.Rows.Count == 0)
{
// Do Something
}
,但它不工作...
任何想法?
谢谢。
我有一个ASP.NET 2.0(C#)的Web应用程序,并在其中我有一个从Oracle数据库获取其数据的GridView。如何检查一个空Gridview
我想知道如何检查gridview是否为空,并做些什么。
我已经尝试:
if(GridView.Rows.Count == 0)
{
// Do Something
}
,但它不工作...
任何想法?
谢谢。
您的代码应该工作。但是只有在调用GridView.DataBind()之后。一般来说,我不检查它自己的GridView,而是网格视图的数据源。
DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
{
ShowEmptyData();
}
else
{
Grid.DataSource = dt;
Grid.DataBind();
}
如果您使用的是数据绑定,则数据源的行计数不是网格本身的计数。
这是行不通的,因为GridView
是数据绑定的,并且在渲染页面的同时将在稍后时间获取实际数据。你应该通过直接查询gridview的数据绑定源来查看它(查看网格视图绑定的实际列表是否为空)。
如果你只想当它是空的,显示的东西,你应该在你的标记使用<EmptyDataTemplate>
:
<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>
我同意其他答复。我想补充的信息很少,你要经过数据绑定方法得到rows.count:
int rowCount = GridView.Rows.Count; // returns zero
GridView.DataBind();
rowCount = GridView.Rows.Count; // returns actual row count
只需更多信息:如果启用了分页,gridview将只显示最大分页行数。所以最好检查实际数据源 – 2009-04-08 19:53:52
好点,谢谢。 – Canavar 2009-04-08 19:58:02
嗨@Canavar,只是想知道,如果 GridView.DataBind();是否可以不绑定到任何数据源? – 2014-05-27 11:42:40
它很容易:希望你的作品.. :)
GridView的数据绑定使用事件:这之后触发数据是绑定的。
protected void GridView1_DataBound(object sender, EventArgs e)
{
int rowCount = GridView1.Rows.Count;
if (rowCount == 0)
{
GridView1.Visible = false;
}
else
{
GridView1.Visible = true;
}
}
不完全。 Row.Count包括任何页眉和页脚 – Fandango68 2017-03-24 01:33:16
如果你已经配置了你GV自动抓取数据从数据库中的数据,那么你还可以添加以下线路上,GV的第一个语句源代码模式:
<EmptyDataTemplate>No data found.</EmptyDataTemplate>
然后继续使用GV中的正常代码。
首先创建一个辅助类。
public static class GridViewExtensions
{
public static IEnumerable<GridViewRow> AsEnumerable(this GridView grid)
{
foreach (GridViewRow row in grid.Rows)
{
yield return row;
}
}
public static bool IsEmpty(this GridView grid)
{
return !grid.AsEnumerable().Any(t => t.RowType == DataControlRowType.DataRow);
}
}
然后,只需根据答案已经为IsEmpty
GridView1.IsEmpty()
你有可能重写VS2005的这个机会吗? – Fandango68 2017-03-24 01:32:49
打电话,GridView.Rows.Count
是够不上自己的,这取决于你GridView
的性质,特别是如果它是一个动态的货车,在大多数情况下它是,再加上你必须考虑Paginating
,页眉和页脚,这会改变行数。
我用一个简单的方法告诉我......
//checks if a gridview has any actual rows of data (not just blank rows filled in by the Load
protected bool gvNoData(GridView gv)
{
int wsDataRow = 0;
foreach (GridViewRow gvRow in gv.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
{
HiddenField hf = (HiddenField)gvRow.FindControl("hfStudentID");
if (hf != null)
if (hf.Value.ToString().Length > 0)
wsDataRow +=1;
}
//if a count was generated then there are data rows, otherwise the rows are blank or nonexistant
if (wsDataRow > 0) return false;
else return true;
}
所以运行这样会告诉你,如果该行真的是“ ‘DATA’行,或空或没有!
显然,在我来说,我有一个HiddenField如果GridViewRow告诉我是一个实际的数据行,因为我我的预填空白行(对于我而言)和一些数据行的GridView。
然而,一个更简单的版本基础上的DataRow VS HeaderRow,等检查...
foreach (GridViewRow gvRow in myGridView.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
{
//do what you need
}
我希望这可以帮助。
总之,没有GridView.IsEmpty()函数不幸的是,除非你如下所示枚举之一。
+1 -The EmptyDataTemplate是最优雅的解决方案恕我直言 – 2009-04-08 20:30:30
+1您也可以使用EmptyDataText属性 – 2009-04-09 13:10:33