2013-02-13 112 views
12

我在将空值传递给存储过程时遇到问题,例如,如果在下拉列表中未选择某个选项,那么如何通过sqdatasource传递给数据库来将其传递为null。<asp:ControlParameter - 通过sqldatasource将空值传递给数据库

我目前在我的页面上有很多下拉控件,这些控件持有参数值以传递给存储过程。

当我从这些控件中选择一些值时,gridview会显示它应该的结果,但是我遇到问题的时候没有选择任何值就是向SP传递一个空值。我已经检查过SP,当我执行它并传入空值时,它会得到正确的结果,所以我对SP感到满意。我试过

ConvertEmptyStringToNull="true" DefaultValue="" 

在没有运气控制paramater设置,并在下拉的“全部”选项的“”

值的SqlDataSource的代码是:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:scConnString %>" 
        SelectCommand="spGetOrgTickets" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="false"> 
        <SelectParameters> 
         <asp:SessionParameter Name="org_id" Type="Int32" SessionField="org_id" DefaultValue="" ConvertEmptyStringToNull="false" /> 
         <asp:ControlParameter ControlID="drpPriority" Name="priority_id" PropertyName="SelectedValue" 
          Type="Int32" ConvertEmptyStringToNull="true" DefaultValue="" /> 
         <asp:ControlParameter ControlID="drpStatus" Name="status_id" PropertyName="SelectedValue" 
          Type="Int32" ConvertEmptyStringToNull="true" DefaultValue=""/> 
        </SelectParameters> 
       </asp:SqlDataSource> 

下拉列表中的一个是:

      <asp:DropDownList Style="width: 100%" ID="drpStatus" runat="server" class="field select" 
           AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="SqlDataSource2_Status" 
           DataTextField="status" DataValueField="status_id"> 
           <asp:ListItem Value="">All</asp:ListItem> 
          </asp:DropDownList> 

任何想法?

感谢

回答

26

排序......只需要CancelSelectOnNullParameter = “假” 的SqlDataSource内。

+3

这对我非常有帮助。 thansk回复自己。所以很多人不这样做 – 2015-12-22 09:28:01

+2

这个选项默认情况下需要为false。如果一个人不知道这个选择,这是一个疯狂的时间浪费 – 2016-12-02 23:29:07