Question

J'ai un répéteur et son SqlDatasource imbriqués dans un champ Gridview TemplatedField.
La commande de sélection de la source de données du répéteur est définie à l'aide de la chaîne de formatage d'une évaluation de la vue en grille.
La commande Select a une clause WHERE qui consiste à comparer une chaîne.
Comme j'ai déjà utilisé les guillemets simples et doubles, je ne parviens pas à délimiter la chaîne dans la clause SQL WHERE.

Comment ajouter des guillemets simples dans une chaîne de formatage Eval?

J'ai essayé d'utiliser " Remplacer ".
J'ai essayé d'utiliser ' Caractères spéciaux ' (... WHERE StringField = '{0}'. ..)

Pas de chance jusqu'à présent. J'apprécie toute aide que vous pourriez pouvoir offrir.

<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>
Était-ce utile?

La solution

N'oubliez pas qu'une page .aspx est tout simplement XML. Vous échappez comme d'habitude aux citations.

Par exemple:

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

Lorsque l'expression ci-dessus est liée aux données, la valeur entre <%# et %> devient:

  

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

... qui produit sur la page HTML en tant que sortie lorsqu'un lien avec un tableau d'objets avec " Id " valeurs de propriété de 1 à 5:

  

Il s'agit de l'élément '1'.
  C'est l'article '2'.
  C'est l'article '3'.
  C'est l'article '4'.
  Ceci est l'élément '5'.

Autres conseils

Stockez vos requêtes SQL dans les propriétés de votre classe Page. Non seulement ça marche :-) mais ça rend votre code plus facile à lire et à maintenir.

Oh, et vous devriez utiliser des paramètres dans vos requêtes au lieu de remplacer des chaînes. Cela résoudra le problème en supprimant le besoin de guillemets simples.

Pourquoi ne définissez-vous pas cette clause WHERE comme une constante de votre codebehind? Définir:

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

Ensuite, votre propriété SelectCommand serait:

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

Avez-vous essayé d'échapper aux guillemets simples?

... WHERE (StringField = \'{0}\') ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top