2011-07-06 38 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> 

我的問題是,當我沒有entring在文本框中的SqlDataSource的參數運行的網頁沒有任何returing一行。

回答

1

望着documentation on MSDN,你必須改變你如何已經設置了SqlDataSource

嘗試這種情況:

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

我已刪除從查詢Where子句,因爲這會通過過濾器表達式來施加。此外,我已將過濾器表達式從title='{4}'更改爲title='{0}'。該文檔指出該編號是FilterParameters集合中項目的佔位符。

更新 我也改變了SelectParameters到2

我創建了一個工作示例來完成這個答案的FilterParameters

更新。這將使用文本框中的文本過濾標題列。如果這個文本框是空的,它將返回表中的所有行(一個可怕的想法,但這個例子可以)。它正在查詢我爲其設置連接字符串AWORK的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

無論如何不工作 –

0

嘗試這樣的條件:

(@Status is null or @Status ='' Or Status = @Status) 
-1

CancelSelectOnNullParameter="false"添加到您的SqlDataSource中。