2009-03-25 10 views
0

Ich habe einen Repeater, der eine Tabelle enthält. Ich möchte die einige tablecells der Tabelle in Repeater Elementvorlage verstecken Hier ist der Quellcode ASPX ist:Abrufen des Wertes von TD in Repeater

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

Und mein 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

Ihr Code scheint ein wenig verwirrend. Was ist die Datenquelle Ihres Repeater1-Steuerelements, ist es Ihr SQLDataReader? –

+0

Sie können auch tun: Repeater1.Visible = (Repeater1.Items.Count> 0); –

Antwort

3

Im ItemDataBound Ereignis des Rasters, Verwenden Sie FindControl, um die Zelle zu finden.

Fügen Sie das Attribut hinzu; onitemdatabound="myRepeater_ItemDataBound"

dann in Code hinter

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

Dies erfordert, dass das OP die Tabelle ... in ein Tabellen-Webserver-Steuerelement verwandelt. – Cerebrus

+1

Sorry, ich wollte "HtmlTableCell" sagen, um auf das Nicht-ASP-HTML-Steuerelement zu verweisen –

0

Die einfachste Art und Weise könnte das sichtbare Attribut des td zu verwenden und einen Wert zuweisen auf einem serverseitigen Ausdruck basiert. Da Sie nicht die Bedingungen erwähnt haben, in dem Sie bestimmte Spalten ein-/auszublenden, ist der Code unten ein Beispiel für die Art und Weise:

<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 boolean Variablen sind (mit Protected Zugriffsebene) im Code deklariert - hinter und setzen Sie entsprechend den Bedingungen, die Sie bewerten möchten.

Beachten Sie, dass Ihre Tabellenzellen für den auszuwertenden Serverausdruck runat="server" sein müssen.

Alternativ können Sie die von Ian präsentierte Lösung verwenden, aber Sie müssen Ihre gesamte Tabelle in ein Tabellenserver-Steuerelement konvertieren, wobei jedes einzelne Element mit runat="server" markiert wird.

Verwandte Themen