2009-03-23 6 views
1

In einem Gridview, ich versuche entweder eine Spalte oder eine andere öffentliche Boolesche Eigenschaft verwenden zu zeigen:ASP.net: Dynamische Boundfields

<Columns> 
    ... 

    <asp:BoundField Visible="<%= !ShowPurchaseDate %>" DataField="Published" HeaderText="Publicerad" SortExpression="PriceRange" DataFormatString="{0:yyyy.MM.dd}" HtmlEncode="false" /> 

    <asp:BoundField Visible="<%= ShowPurchaseDate %>" DataField="OrderDate" HeaderText="Köpt" SortExpression="OrderDate" DataFormatString="{0:yyyy.MM.dd}" HtmlEncode="false" /> 

    ... 
    </Columns> 

Aber ich erhalte eine Fehlermeldung sagen, dass es nicht Es ist möglich, ein System.Boolean aus einer Zeichenfolge zu erstellen, die <%! ShowPurchaseDate%> für die Eigenschaft Visisble enthält.

Wie kann ich dies erreichen?

UPDATE:

<% # ShowPurchaseDate%> funktioniert auch nicht, da es keine Datenbindung geht.

Die Verwendung einer geschützten Funktion funktioniert auch nicht (gleiche Fehlermeldung wie bei Property).

+0

Haben Sie eine Zeichenfolge von der Methode zurückgegeben? – Dan

+0

Da es sich um ein BoundField handelt, gibt es eine Datenbindung. Sie müssen es zu einem Vorlagenfeld machen. – Albert

+0

Albert hat Recht bezüglich der Datenbindung. Das BoundField selbst ist jedoch nicht datengebunden. Wenn dies der Fall wäre, müssten Sie <% #. Konvertieren Sie es in eine Vorlage, wenn Sie es verwenden möchten (das <% = ist die render-Anweisung, die in diesem Kontext nicht verwendet werden sollte). Oder setze die Sichtbarkeit im Code hinterher (wie du es getan hast). – Ruslan

Antwort

2

ich es durch gelöst:

gridMain.Columns[ShowPurchaseDate ? 3 : 4].Visible = false; 

Ist dies die beste Lösung?

+0

das ist, was ich normalerweise tue. –

+0

Das ist nicht die beste Lösung. Es basiert auf Indizes, die sich ständig ändern. Machen Sie es zu einem Vorlagenfeld und verwenden Sie den von mir vorgeschlagenen Datenbindungsansatz. – Albert

+0

Mit einem Vorlagenfeld können Sie die Steuerelemente in der Spalte ausblenden, aber nicht die gesamte Spalte. Also stimme ich zu, dass es in dem Code dahinter getan werden muss. – EfficionDave

0

Stellen Sie eine geschützte Methode im Code zur Verfügung, die die boolesche Eigenschaft als Zeichenfolge zurückgibt.

0

Sie sind Code sollte <% # sein ShowPurchaseDate%>

+0

Wer gab -1? Die Antwort ist korrekt ... DataBound-Feld erfordert die Verwendung von <%# %> und nicht <%= %> – Ruslan

+0

Ich habe vergessen hinzuzufügen, dass das BoundField selbst kein datengebundenes Steuerelement ist, so dass Vorlage erforderlich wäre. – Ruslan

0

können Sie versuchen, eine Methode anstelle der Bindung wie SollSchauSpalte() aufrufen.

Verwandte Themen