2010-08-03 4 views
0

J'ai un système de gestion de document qui crée un rapport montrant des personnes qui possèdent quel document. Il y a des moments où les gens ont 0 documents et dans ce cas je voudrais que la table de répéteur pour cette personne ne soit pas visible. J'ai regardé autour pendant un moment et n'ai pas eu beaucoup de chance, peut-être parce que je suis nouveau ou peut-être parce que je n'ai pas trouvé ma réponse.Im essayant de rendre une table de répéteur visible = faux

J'ai des répéteurs imbriqués à l'intérieur des répéteurs mais si le premier répéteur n'est pas visible, le reste devrait suivre.

fichier ASPX

    <h3> <%# DataBinder.Eval(Container.DataItem, "FullNm") %></h3> 
        <table ID="CollectorTable" runat="server" class="report-totals"> 
         <tr> 
          <th>Total Collected:</th> 
          <td><asp:Literal ID="CollectorTotalCollected" runat="server" /></td> 

          <td class="report-totals-spacer"></td> 

          <th>Total Contacted:</th> 
          <td><asp:Literal ID="CollectorTotalContacted" runat="server" /></td> 

          <td class="report-totals-spacer"></td> 

          <th></th> 
          <td></td> 
         </tr> 
        </table> 
       // etc.... 

code Derrière

 // ...pull totals 
     Control CollectorRepeater = new Control(); 
     CollectorRepeater = (Control)e.Item.FindControl("CollectorRepeater"); 
     CollectorRepeater.Visible = false; 

     Repeater collectorData = (Repeater)item.FindControl("CollectedTableRepeater"); 
     collectorData.DataSource = collectedDocuments; 
     collectorData.DataBind(); 

     Repeater contactedData = (Repeater)item.FindControl("ContactedTableRepeater"); 
     contactedData.DataSource = contactedDocuments; 
     contactedData.DataBind(); 

Répondre

1

Donc, tout ce que vous devez faire est de vérifier si vos données est vide - soit avant le lier, ou sur l'événement OnDataBinding d'un répéteur et cachez les répéteurs si nécessaire.

Repeater collectorData = (Repeater)item.FindControl("CollectedTableRepeater1"); 
Repeater contactedData = (Repeater)item.FindControl("ContactedTableRepeater2"); 
if(collectedDocuments.Tables[0].Rows.Count > 0){ 
     //if there is data(more than 0 rows), bind it 
     collectorData.DataSource = collectedDocuments; 
     collectorData.DataBind(); 

     contactedData.DataSource = contactedDocuments; 
     contactedData.DataBind(); 
} else { 
     collectorData.Visible = False; 
     //optional display "No data found" message 
     contactedData.Visible = False; 
} 
+0

Cela a très bien fonctionné. J'ai fait un peu plus pour en faire ce que je voulais, mais c'est la bonne idée. – Chris

0

Dans le code derrière, dans l'événement ItemCreated du répéteur, vous pouvez faire un chèque pour le nombre de documents et se lier uniquement à la table dans l'élément répéteur si le nombre des données est plus de 0.

0

Vous pouvez faire exactement comme « rlb.usa » dit ou tout simplement remplacer la partie else avec:

else { 
     collectorData.DataSource = null; 
     collectorData.DataBind(); 

     contactedData.DataSource = null; 
     contactedData.DataBind(); 
} 
Questions connexes