2009-04-08 17 views
15

के लिए कैसे जांचें मेरे पास एक एएसपी.NET 2.0 (सी #) वेब ऐप है, और इसमें मेरे पास एक ग्रिडव्यू है जो एक ऑरैकल डेटाबेस से अपना डेटा प्राप्त करता है।एक खाली ग्रिडव्यू

मैं अगर gridview खाली है जांच करने का तरीका है, और कुछ करना जानना चाहते हैं।

मैं पहले से ही की कोशिश की है:

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

लेकिन यह काम नहीं करता ...

कोई भी विचार?

धन्यवाद।

उत्तर

22

आपका कोड चाहिए काम करते हैं। लेकिन केवल GridView.DataBind() के बाद बुलाया गया है। आम तौर पर मैं ग्रिड व्यू को स्वयं की जांच नहीं करता, लेकिन ग्रिड व्यू का डेटासोर्स।

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

आप डेटा बाइंडिंग का उपयोग कर रहे हैं, तो डेटा स्रोत ग्रिड पर ही नहीं गिनती की पंक्ति संख्या।

18

यह काम नहीं करता है क्योंकि GridView डेटा बाध्य है और पृष्ठ को प्रस्तुत करते समय बाद में वास्तविक डेटा लाने जा रहा है। आपको ग्रिडव्यू के डेटा बाध्यकारी स्रोत से सीधे पूछताछ करनी चाहिए (देखें कि ग्रिड व्यू की वास्तविक सूची खाली है या नहीं)।

तुम सिर्फ जब यह खाली होने पर कुछ प्रदर्शित करना चाहते हैं, तो आप अपने मार्कअप में <EmptyDataTemplate> उपयोग करना चाहिए:

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

+1- एम्प्टीडाटा टेम्पलेट सबसे सुरुचिपूर्ण समाधान है IMHO –

+3

+1 आप EmptyDataText प्रॉपर्टी –

6

मैं अन्य प्रतिक्रियाओं से सहमत हूं। मैं कम जानकारी जोड़ना चाहते हैं, तो आप DataBind विधि के बाद rows.count मिलना चाहिए:

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

GridView.DataBind(); 

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

का उपयोग भी कर सकते हैं बस थोड़ी अधिक जानकारी: ग्रिडव्यू पेजिंग के लिए केवल पेजिंग के लिए पंक्तियों की अधिकतम संख्या दिखाएगी यदि पेजिंग सक्षम है। इसलिए वास्तविक डेटासेट –

+0

अच्छा बिंदु, धन्यवाद की जांच करना सबसे अच्छा है। – Canavar

+1

हाय @ कानावर, बस जानना चाहता था कि GridView.DataBind(); किसी भी डेटासोर्स को बाध्य किए बिना संभव है? –

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; 
    } 

} 
+0

काफी नहीं। पंक्ति। गणना में कोई शीर्षलेख और पाद लेख – Fandango68

0

मामले में आप अपने जी.वी. डीबी से डेटा स्वचालित रूप से लाने के लिए कॉन्फ़िगर किया है, तो आप निम्न पंक्ति अपने जीवी के पहले बयान के रूप में स्रोत मोड में जोड़ सकते हैं:

<EmptyDataTemplate>No data found.</EmptyDataTemplate> 

और फिर अपने जीवी में सामान्य कोड के साथ जारी रखें।

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

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; 
} 

तो चल रहा है कुछ इस तरह आपको पता चलेगा कि पंक्तियाँ वास्तव में " " डाटा "पंक्तियों या खाली है या कुछ भी नहीं है!

मेरे मामले में जाहिर है

मैं एक HiddenField मुझे अगर GridViewRow बताने के लिए कर रहे हैं एक वास्तविक डेटा पंक्ति, जैसा कि मैंने रिक्त पंक्तियों (मेरी प्रयोजनों के लिए) और कुछ datarows के साथ मेरी gridview पूर्व-भरण है।

हालांकि

, एक सरल संस्करण DataRow बनाम HeaderRow, आदि के आधार पर जांच करने के लिए ...

 foreach (GridViewRow gvRow in myGridView.Rows) 
      if (gvRow.RowType == DataControlRowType.DataRow) 
      { 
//do what you need 
      } 

मुझे उम्मीद है कि यह मदद करता है।

संक्षेप में, कोई ग्रिड व्यू नहीं है IsEmpty() दुर्भाग्यवश, जब तक आप नीचे दिखाए गए अनुसार गणना नहीं करते हैं।

संबंधित मुद्दे