2011-07-06 40 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中。