質問

リピーターとそのSqlDatasourceがGridview TemplatedField内にネストされています。
リピーターのデータソースSelectCommandは、GridviewのEvalのFormatStringを使用して設定されます。
SelectCommandには、文字列を比較するためのWHERE句があります。
すでに一重引用符と二重引用符を使用しているため、SQL WHERE句の文字列の区切りに問題があります。

Eval FormatString内に単一引用符を追加するにはどうすればよいですか

Replace 」を使用してみました。
'特殊文字'(... WHERE 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}'.")

...これは、<!> quot; Id <!> quot;のオブジェクトの配列でデータバインドされたときに、出力としてHTMLページに生成されます。 1〜5のプロパティ値:

  

これはアイテム「1」です。
  これはアイテム「2」です。
  これはアイテム「3」です。
  これはアイテム「4」です。
  これはアイテム「5」です。

他のヒント

ページクラスのプロパティにSQLクエリを保存します。動作するだけでなく:-)だけでなく、コードの読み取りと保守が容易になります。

ああ、文字列の置換を行う代わりにクエリでパラメータを使用する必要があります。これにより、単一引用符が不要になり、問題が解決します。

このWHERE句を分離コードの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