Pregunta

Tengo un Repetidor y su SqlDatasource anidado dentro de un Gridview TemplatedField.
El Repetidor del origen de datos SelectCommand se establece mediante el FormatString de una Eval desde el Gridview.
SelectCommand tiene una cláusula where que es comparar una cadena.
Porque ya he usado las comillas dobles y simples, estoy teniendo problemas con la delimitación de la cadena en la cláusula where de SQL.

¿Cómo puedo agregar comillas simples dentro de una Eval FormatString?

He intentado usar 'Reemplazar'.
He intentado usar 'Caracteres Especiales'(...DONDE StringField = '{0}' ...)

Sin suerte hasta el momento.Agradezco cualquier ayuda que usted puede ser capaz de ofrecer.

<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>
¿Fue útil?

Solución

No hay que olvidar que una .página aspx es simplemente XML.Usted acaba de escapar las comillas como lo haría normalmente.

Por ejemplo:

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

Cuando la expresión anterior está enlazado a datos el valor entre <%# y %> se convierte en:

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

...que produce en el código HTML de la página como la salida cuando el enlace de datos con un array de objetos con el "Id" de la propiedad de valores de 1 a 5:

Este es el elemento '1'.
Este es el elemento '2'.
Este es el elemento '3'.
Este es el elemento '4'.
Este es el elemento '5'.

Otros consejos

Almacene sus consultas sql en propiedades en su clase de página. No solo funciona :-) sino que hace que su código sea más fácil de leer y mantener.

Ah, y debería usar parámetros en sus consultas en lugar de hacer reemplazos de cadenas. Eso resolverá el problema eliminando la necesidad de comillas simples.

¿Por qué no define esta cláusula WHERE como una constante en su código subyacente? Definir:

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

Entonces su propiedad SelectCommand sería:

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

¿Has intentado escapar de los caracteres de comillas simples?

... WHERE (StringField = \'{0}\') ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top