문제

Gridview TemplatedField 내에 반복기와 해당 SqlDatasource가 중첩되어 있습니다.
Repeater의 데이터 소스 SelectCommand는 Gridview에서 Eval의 FormatString을 사용하여 설정됩니다.
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(&quot;Id&quot;, &quot;This is item '{0}'.&quot;) %>" runat="server" />
    </ItemTemplate>
    <SeparatorTemplate>
        <br />
    </SeparatorTemplate>
</asp:Repeater>

위의 표현식이 데이터 라운드 인 경우 사이의 값은 값입니다 <%# 그리고 %> :

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

... HTML 페이지에서 "ID"속성 값이 1에서 5 사이 인 객체 배열이있는 경우 HTML 페이지에서 출력으로 생성됩니다.

이것은 '1'항목입니다.
이것은 '2'항목입니다.
이것은 '3'항목입니다.
이것은 '4'항목입니다.
이것은 '5'항목입니다.

다른 팁

페이지 클래스의 속성에 SQL 쿼리를 저장합니다.작동할 뿐만 아니라 :-) 코드를 더 쉽게 읽고 유지 관리할 수 있습니다.

아, 그리고 문자열 교체를 수행하는 대신 쿼리에 매개변수를 사용해야 합니다.그러면 작은따옴표가 필요하지 않으므로 문제가 해결됩니다.

Codebehind에서 이것을 const로 정의하지 않겠습니까? 정의하다:

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

그러면 SelectCommand 속성은 다음과 같습니다.

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

단일 인용 문자를 피해 보셨습니까?

... WHERE (StringField = \'{0}\') ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top