2009-04-08 56 views
15

我有一個ASP.NET 2.0(C#)的Web應用程序,並在其中我有一個從Oracle數據庫獲取其數據的GridView。如何檢查一個空Gridview

我想知道如何檢查gridview是否爲空,並做些什麼。

我已經嘗試:

if(GridView.Rows.Count == 0) 
{ 
// Do Something 
} 

,但它不工作...

任何想法?

謝謝。

回答

22

您的代碼應該工作。但是隻有在調用GridView.DataBind()之後。一般來說,我不檢查它自己的GridView,而是網格視圖的數據源。

DataTable data = DAL.getdata(); 
if (data.Rows.Count == 0) 
{ 
    ShowEmptyData(); 
} 
else 
{ 
    Grid.DataSource = dt; 
    Grid.DataBind(); 
} 
4

如果您使用的是數據綁定,則數據源的行計數不是網格本身的計數。

18

這是行不通的,因爲GridView是數據綁定的,並且在渲染頁面的同時將在稍後時間獲取實際數據。你應該通過直接查詢gridview的數據綁定源來查看它(查看網格視圖綁定的實際列表是否爲空)。

如果你只想當它是空的,顯示的東西,你應該在你的標記使用<EmptyDataTemplate>

<asp:GridView runat="server"> 
<EmptyDataTemplate>The grid is empty</EmptyDataTemplate> 
</asp:GridView> 
+2

+1 -The EmptyDataTemplate是最優雅的解決方案恕我直言 – 2009-04-08 20:30:30

+3

+1您也可以使用EmptyDataText屬性 – 2009-04-09 13:10:33

6

我同意其他答覆。我想補充的信息很少,你要經過數據綁定方法得到rows.count:

int rowCount = GridView.Rows.Count; // returns zero 

GridView.DataBind(); 

rowCount = GridView.Rows.Count; // returns actual row count 
+1

只需更多信息:如果啓用了分頁,gridview將只顯示最大分頁行數。所以最好檢查實際數據源 – 2009-04-08 19:53:52

+0

好點,謝謝。 – Canavar 2009-04-08 19:58:02

+1

嗨@Canavar,只是想知道,如果 GridView.DataBind();是否可以不綁定到任何數據源? – 2014-05-27 11:42:40

0

它很容易:希望你的作品.. :)

GridView的數據綁定使用事件:這之後觸發數據是綁定的。

protected void GridView1_DataBound(object sender, EventArgs e) 
{ 
    int rowCount = GridView1.Rows.Count; 

    if (rowCount == 0) 
    { 
     GridView1.Visible = false;     
    } 
    else 
    { 
     GridView1.Visible = true; 
    } 

} 
+0

不完全。 Row.Count包括任何頁眉和頁腳 – Fandango68 2017-03-24 01:33:16

0

如果你已經配置了你GV自動抓取數據從數據庫中的數據,那麼你還可以添加以下線路上,GV的第一個語句源代碼模式:

<EmptyDataTemplate>No data found.</EmptyDataTemplate> 

然後繼續使用GV中的正常代碼。

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() 
+0

你有可能重寫VS2005的這個機會嗎? – Fandango68 2017-03-24 01:32:49

0

打電話,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()函數不幸的是,除非你如下所示枚舉之一。