2009-03-25 6 views
0

J'ai un répéteur qui contient une table. Je veux cacher les quelques tablecells de la table dans le modèle de l'élément répéteur Voici le code source ASPX:Récupérer la valeur de td dans le répéteur

<ItemTemplate> 
    <table style="width: 100%" align="center"> 
    <tr> 
     <td style="width: 60px;" align="center"> 
     <img src="upload/companylogo/<%# Eval("companylogo") %>" /> 
     </td> 
     <td align="left"> 
     <asp:Label runat="server" CssClass="lblcname" ID="Label1" Text='<%# Eval("companyname") %>' /></td> 
     <td align="right"> 
     <asp:Label runat="server" ID="Label2" Text='<%# Eval("city") %>' /></td> 
    </tr> 
    <tr> 
     <td runat="server" id="address" colspan="3"> 
     <asp:Label runat="server" ID="Label3" Text='<%# Eval("address") %>' /> 
     </td> 
    </tr> 
    <tr> 
     <td colspan="3" align="right" id="vp" runat="server"> 
     <a href='nfonews.aspx?id=<%# Eval("mpid") %>'>view Profile</a> 
     &raquo; Send Inquiry </td> 
    </tr> 
    <tr> 
     <td colspan="3" style="height: 20px; background-image: url(image/stripe_head_bg.png)"></td> 
    </tr> 
    </table> 
</ItemTemplate> 

Et mon code-behind:

SqlDataReader dr = cmd.ExecuteReader(); 
if (dr.HasRows == true) 
{ 
    dr.Read(); 
    if (dr["payment"].ToString() == "Yes") 
    { 
    Repeater1.DataBind(); 
    if (Repeater1.Items.Count == 0) 
    { 
     Repeater1.Visible = false; 
    } 
    else 
    { 
     Repeater1.Visible = true; 
    } 
    } 
} 
+0

Votre code semble un peu confus. Quelle est la source de données de votre contrôle Repeater1, est-ce supposé être votre SQLDataReader? –

+0

Aussi vous pouvez faire: Repeater1.Visible = (Repeater1.Items.Count> 0); –

Répondre

3

En cas ItemDataBound de la grille, utilisez FindControl pour trouver la cellule.

Ajouter l'attribut; onitemdatabound="myRepeater_ItemDataBound"

puis dans le code derrière

protected void myRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    ListItemType rowType = (ListItemType)e.Item.ItemType; 
    if (rowType == ListItemType.Pager || rowType == ListItemType.Header || rowType == ListItemType.Footer) 
     return; 

    TableCell cell = (TableCell)e.Item.FindControl("address"); 
} 
+1

Cela nécessitera que le PO change sensiblement la table ... en un contrôle de serveur web de table. – Cerebrus

+1

Désolé, je voulais dire "HtmlTableCell" pour faire référence au contrôle html non ASP –

0

La façon la plus simple pourrait être d'utiliser l'attribut visible de la td et lui attribuer une valeur basée sur une expression côté serveur. Puisque vous ne l'avez pas mentionné les conditions dans lesquelles vous souhaitez afficher/masquer les colonnes particulières, le code ci-dessous est un exemple de la façon possible:

<table style="width: 100%" align="center"> 
    <tr> 
    <td style="width: 60px;" align="center" runat="server" visible="<%#showCompanyLogo %>"> 
     <img src="upload/companylogo/<%# Eval("companylogo") %>" /> 
    </td> 
    <td align="left" runat="server" visible="<%#showCompanyName %>"> 
     <asp:Label runat="server" CssClass="lblcname" ID="Label1" Text='<%# Eval("companyname") %>' /></td> 
    <td align="right" runat="server" visible="<%#showCity %>"> 
     <asp:Label runat="server" ID="Label2" Text='<%# Eval("city") %>' /></td> 
    </tr> 
... 
</table> 

showCompanyLogo, showCompanyName and showCity sont des variables booléennes (avec Protected niveau d'accès) a déclaré dans le code -behind et défini en fonction des conditions que vous voulez évaluer.

Notez que vos cellules de table doivent être runat="server" pour l'expression de serveur à évaluer.

Vous pouvez également utiliser la solution présentée par Ian, mais vous devrez convertir l'intégralité de votre table en un contrôle Table Web Server avec chaque élément marqué runat="server".

Questions connexes