Frage

Ich habe einen Repeater bekommt und seine SQLDataSource in einem Gridview TemplatedField verschachtelt.
Die Datasource Select Repetierarmbrust gesetzt, um das Formatstring eines Eval aus dem Gridview verwenden.
Die Select hat eine WHERE-Klausel, die eine Zeichenfolge zu vergleichen ist.
Da ich bereits die einfache und doppelte Anführungszeichen verwendet, ich habe Probleme begrenzen die Zeichenfolge in der SQL-WHERE-Klausel.

Wie kann ich einfache Anführungszeichen innerhalb einer Eval Formatstring?

Ich habe versucht mit ' Ersetzen '.
Ich habe versucht, ' Sonderzeichen ' (... WHERE Stringfield = '{0}' verwenden. ..)

Kein Glück so weit. Ich schätze jede Hilfe Sie in der Lage sein können, bieten.

<asp:GridView ID="GridView1" runat="server" DataSourceID="DataSource1" DataKeyNames="Foo" AutoGenerateColumns="False" AllowSorting="true" >
    <Columns>
        <asp:BoundField DataField="Foo" HeaderText="Foo" SortExpression="Foo" />
        <asp:BoundField DataField="Bar" HeaderText="Bar" SortExpression="Bar" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Repeater ID="Repeater1" runat="server" DataSourceID="DataSourceNested">
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("Blah") %>'></asp:Label>
                    </ItemTemplate>
                </asp:Repeater>
                <asp:SqlDataSource ID="DataSourceNested" runat="server" DataFile="~/App_Data/DatabaseName"
                    SelectCommand='<%# Eval("Bar", "SELECT Blah FROM TableName WHERE (StringField = {0})") %>' >
                </asp:SqlDataSource>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
War es hilfreich?

Lösung

Vergessen Sie nicht, dass eine ASPX-Seite ist einfach XML. Sie entkommen nur die Zitate, wie Sie normalerweise tun würde.

Zum Beispiel:

<asp:Repeater ID="repeatTheLabel" runat="server">
    <ItemTemplate>
        <asp:Label ID="Label1" Text="<%# Eval(&quot;Id&quot;, &quot;This is item '{0}'.&quot;) %>" runat="server" />
    </ItemTemplate>
    <SeparatorTemplate>
        <br />
    </SeparatorTemplate>
</asp:Repeater>

Wenn der obige Ausdruck datengebundene wird der Wert zwischen <%# und %> wird:

  

Eval("Id", "This is item '{0}'.")

..., die auf der HTML-Seite als Ausgabe erzeugt, wenn sie mit einer Reihe von Objekten mit „Id“ Eigenschaftswerten von 1 bis 5 datengebundene:

  

Dies ist Punkt '1'.
  Dies ist Artikel ‚2‘.
  Dies ist Punkt ‚3‘.
  Dies ist Artikel ‚4‘.
  Dies ist Punkt '5'.

Andere Tipps

Speichern Sie Ihre SQL-Abfragen in Immobilien in Ihrer Page-Klasse. Nicht nur funktioniert es :-), aber es macht den Code leichter zu lesen und zu pflegen.

Oh, und Sie sollten in Ihren Abfragen verwenden Parameter anstelle von String-Ersatz zu tun. Das wird das Problem lösen, indem die Notwendigkeit für einfache Anführungszeichen zu entfernen.

Warum Sie diese WHERE-Klausel als const in Ihrem Code-Behind nicht definieren. Definieren Sie:

protected const string SELECTCLAUSE = 
"SELECT Blah FROM TableName WHERE (StringField = '{0}')";

Dann ist Ihre Eigenschaft Select wäre:

SelectCommand='<%# Eval("Bar", SELECTCLAUSE ) %>'

Haben Sie versucht, die Apostrophe zu entkommen?

... WHERE (StringField = \'{0}\') ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top