2011-07-06 14 views
0

私はsqldatasourceを持っています、selectコマンドには私は@statusというパラメータを持っています。このパラメータは、実行時にテキストボックスから値を取得します。Sqldatasourceパラメータ

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
      SelectCommand="SELECT * FROM [project_details] WHERE ([status] = @status)" 
      FilterExpression="title='{4}'" 
      ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
      EnableCaching="True"> 
<SelectParameters> 
       <asp:ControlParameter ControlID="TextBox1" Name="status" PropertyName="Text" ConvertEmptyStringToNull="false" 
        Type="String" /> 
      </SelectParameters> 

     </asp:SqlDataSource> 

私の問題は、私は、テキストボックスのSqlDataSourceコントロールにおけるパラメータをentringせずにページを実行するときに任意の行をreturingされていないということです。

答えて

1

を、あなたはセットアップSqlDataSourceを持っている方法を変更する必要があります。これは、フィルタ式によって適用されるように、私は、クエリからWhere条項を削除した

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
     SelectCommand="SELECT * FROM [project_details]" 
     FilterExpression="title='{0}'" 
     ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" 
     EnableCaching="True"> 
    <FilterParameters> 
      <asp:ControlParameter ControlID="TextBox1" Name="status" PropertyName="Text" ConvertEmptyStringToNull="false" Type="String" /> 
    </FilterParameters> 
</asp:SqlDataSource> 

はこれを試してみてください。また、フィルタ式をtitle='{4}'からtitle='{0}'に変更しました。ドキュメントには、その番号がFilterParametersコレクション内のアイテムのプレースホルダであることが記載されています。更新

はまた、私はこの答えを終了する作業例を作成しました2

FilterParameters

アップデートにSelectParametersを変更しました。これにより、テキストボックスのテキストを使用してタイトル列がフィルタリングされます。このテキストボックスが空白の場合、テーブルからすべての行が返されます(この例では恐ろしい考えですが、OKです)。私はAWorksという接続文字列を設定しているAdventureWorksデータベースを照会しています。

<asp:SqlDataSource ID="SqlDataSource1" 
    ConnectionString="<%$ ConnectionStrings:AWorks %>" 
    SelectCommand="SELECT ContactId, Title, FirstName, LastName FROM Person.Contact" 
    FilterExpression="Title='{0}'" 
    runat="server"> 
<FilterParameters> 
    <asp:ControlParameter Name="Title" ControlID="txtTitle" PropertyName="Text" /> 
</FilterParameters> 
</asp:SqlDataSource> 

<asp:TextBox runat="server" Id="txtTitle"></asp:TextBox> 
<asp:Button runat="server" UseSubmitBehavior="true" Text="Submit" /> 

<asp:GridView 
    DataSourceID="SqlDataSource1" 
    AutoGenerateColumns="false" 
    runat="server"> 
<Columns> 
    <asp:BoundField Visible="false" DataField="ContactId"></asp:BoundField> 
    <asp:BoundField Visible="true" DataField="Title"></asp:BoundField> 
    <asp:BoundField Visible="true" DataField="FirstName"></asp:BoundField> 
    <asp:BoundField Visible="true" DataField="LastName"></asp:BoundField> 
</Columns> 
</asp:GridView> 
+0

ちょっとありがとうございますが、ここで私のフィルタパラメータについて言及していませんでした。 –

+0

あなたのコードにはフィルタパラメータもありません –

+0

良い点。私は答えを更新し、SelectParametersをFilterParametersコレクションに変更しました。 –

0

ConvertEmptyStringToNull="true"を設定してみてください....

+0

とにかく動作していません –

-1

CancelSelectOnNullParameter="false"をSqlDataSourceに追加します。

関連する問題