Como usar aspas simples em Eval Format String
-
06-07-2019 - |
Pergunta
Eu tenho um repetidor e sua SQLDataSource aninhado dentro de um GridView TemplatedField.
SelectCommand fonte de dados do repetidor é definida usando o FormatString de um Eval do Gridview.
O SelectCommand tem uma cláusula WHERE que é comparar uma string.
Porque eu já tenha usado as aspas simples e duplas, eu estou tendo problemas para delimitar a cadeia no SQL cláusula WHERE.
Como posso adicionar aspas simples dentro de um Eval FormatString?
Eu tentei usar ' Substituir '.
Eu tentei usar ' caracteres especiais ' (... ONDE StringField = '{0}'. ..)
Sem sorte até agora. Agradeço qualquer ajuda que você pode ser capaz de oferecer.
<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>
Solução
Não se esqueça que uma página .aspx é simplesmente XML. Você acabou de escapar as aspas, como faria normalmente.
Por exemplo:
<asp:Repeater ID="repeatTheLabel" runat="server">
<ItemTemplate>
<asp:Label ID="Label1" Text="<%# Eval("Id", "This is item '{0}'.") %>" runat="server" />
</ItemTemplate>
<SeparatorTemplate>
<br />
</SeparatorTemplate>
</asp:Repeater>
Quando a expressão acima é a ligação de dados entre o valor <%#
e %>
torna-se:
Eval("Id", "This is item '{0}'.")
... que produz na página HTML como saída quando databound com uma variedade de objetos com "ID" valores de propriedade de 1 a 5:
Este é o item '1'.
Este é o item '2'.
Este é o item '3'.
Este é o item '4'.
Este é o item '5'.
Outras dicas
Guarde as suas consultas SQL nas propriedades em sua classe de página. Não só trabalhar :-) mas faz seu código mais fácil de ler e manter.
Oh, e você deve usar parâmetros em suas consultas em vez de fazer as substituições de corda. Que vai resolver o problema removendo a necessidade de aspas simples.
Por que você não definir esta cláusula WHERE como um const em sua codebehind. Definir:
protected const string SELECTCLAUSE =
"SELECT Blah FROM TableName WHERE (StringField = '{0}')";
Em seguida, sua propriedade SelectCommand seria:
SelectCommand='<%# Eval("Bar", SELECTCLAUSE ) %>'
Você tentou escapar das aspas simples?
... WHERE (StringField = \'{0}\') ...