我有一个ASP.NET 2.0(C#)Web应用程序,其中有一个gridview,它从oracle数据库中获取数据。
我想知道如何检查gridview是否为空,并且做了些什么。
我已经尝试过了:
if(GridView.Rows.Count == 0)
{
// Do Something
}
但它不起作用......
有什么想法吗?
谢谢。
答案 0 :(得分:22)
您的代码应该有效。但只有在调用了GridView.DataBind()之后。一般来说,我不检查GridView是自己的,而是检查网格视图的数据源。
DataTable data = DAL.getdata();
if (data.Rows.Count == 0)
{
ShowEmptyData();
}
else
{
Grid.DataSource = dt;
Grid.DataBind();
}
答案 1 :(得分:18)
这不起作用,因为GridView
是数据绑定的,并且将在以后呈现页面时获取实际数据。您应该通过直接查询gridview的数据绑定源来检查这一点(查看网格视图绑定的实际列表是否为空)。
如果您只想在空白时显示某些内容,则应在标记中使用<EmptyDataTemplate>
:
<asp:GridView runat="server">
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate>
</asp:GridView>
答案 2 :(得分:8)
我同意其他回复。我想添加一点信息,你应该在databind方法之后得到rows.count:
int rowCount = GridView.Rows.Count; // returns zero
GridView.DataBind();
rowCount = GridView.Rows.Count; // returns actual row count
答案 3 :(得分:4)
如果您正在使用数据绑定,则数据源的行数不是网格本身的计数。
答案 4 :(得分:1)
首先创建一个帮助类。
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()
答案 5 :(得分:0)
非常简单:希望它适合你...... :)
使用GridView DataBound事件:数据绑定后触发。
protected void GridView1_DataBound(object sender, EventArgs e)
{
int rowCount = GridView1.Rows.Count;
if (rowCount == 0)
{
GridView1.Visible = false;
}
else
{
GridView1.Visible = true;
}
}
答案 6 :(得分:0)
如果您已将GV配置为自动从DB获取数据,那么您可以在源模式中添加以下行作为GV的第一个语句:
<EmptyDataTemplate>No data found.</EmptyDataTemplate>
然后继续使用GV中的常规代码。
答案 7 :(得分:0)
根据答案,GridView.Rows.Count
本身是不够的,具体取决于GridView
的性质,特别是如果它是一个动态gv,在大多数情况下它是,加上你必须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和HeaderRow等进行检查......
foreach (GridViewRow gvRow in myGridView.Rows)
if (gvRow.RowType == DataControlRowType.DataRow)
{
//do what you need
}
我希望这会有所帮助。
简而言之,遗憾的是没有GridView.IsEmpty()函数,除非你枚举一个如下所示。