Как использовать одинарные кавычки в строке формата Eval
-
06-07-2019 - |
Вопрос
У меня есть ретранслятор и его SqlDataSource, вложенные в Gridview TemplatedField.
Команда выбора источника данных повторителя устанавливается с использованием FormatString Eval из Gridview.
Команда SelectCommand содержит предложение WHERE, которое предназначено для сравнения строки.
Поскольку я уже использовал одинарные и двойные кавычки, у меня возникли проблемы с разделением строки в предложении SQL WHERE.
Как мне добавить одинарные кавычки внутри Eval FormatString?
Я пробовал использовать 'Заменить'.
Я пробовал использовать 'Специальные символы' (...ГДЕ StringField = '{0}' ...)
Пока безуспешно.Я ценю любую помощь, которую вы можете предложить.
<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>
Решение
Не забывайте, что страница в формате .aspx - это просто XML.Вы просто экранируете кавычки, как обычно.
Например:
<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>
Когда приведенное выше выражение привязано к данным, значение между <%#
и %>
становится:
Eval("Id", "This is item '{0}'.")
...который выводится на HTML-странице в качестве выходных данных при привязке к базе данных массива объектов со значениями свойства "Id" от 1 до 5:
Это пункт "1".
Это пункт "2".
Это пункт "3".
Это пункт "4".
Это пункт "5".
Другие советы
Храните ваши sql запросы в свойствах вашего класса Page. Это не только работает :-), но и облегчает чтение и обслуживание вашего кода.
О, и вы должны использовать параметры в своих запросах вместо замены строк. Это решит проблему, исключив необходимость в одинарных кавычках.
Почему бы вам не определить это предложение WHERE как const в вашем коде. Определение:
protected const string SELECTCLAUSE =
"SELECT Blah FROM TableName WHERE (StringField = '{0}')";
Тогда ваше свойство SelectCommand будет:
SelectCommand='<%# Eval("Bar", SELECTCLAUSE ) %>'
Вы пытались экранировать символы одинарных кавычек?
... WHERE (StringField = \'{0}\') ...