当前位置: 代码迷 >> ASP.NET >> SqlDataSource 数据过滤的有关问题
  详细解决方案

SqlDataSource 数据过滤的有关问题

热度:843   发布时间:2013-02-25 00:00:00.0
SqlDataSource 数据过滤的问题
我想通过多个文本框中的值对gridview进行过滤,即和它相关的sqldatasource能得到多个控件参数以在filterExpression中写筛选的sql语句
先看一下我做的多种尝试,我填写的是能在数据库中‘查得到值的’
尝试一:
HTML code
<form id="form1" runat="server">    <div>        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>        <asp:Button ID="Button1" runat="server" Text="Button" />        <asp:GridView ID="GridView1" runat="server" AllowPaging="true" PageSize="5" DataSourceID="SqlDataSource1">        </asp:GridView>        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=pdcx;User ID=pdcx;Password=pdcx;Unicode=True"            ProviderName="System.Data.OracleClient" SelectCommand="SELECT * from US_USER"            FilterExpression="us003='{0}'">            <FilterParameters>                <asp:ControlParameter Name="code" ControlID="TextBox1" />            </FilterParameters>        </asp:SqlDataSource>       </div>    </form>

通过,成功进行了筛选,只显示了我要的一条值

尝试二:
将FilterExpression="us003='{0}'" 改成 FilterExpression="us003=':code'"
结果为空白,说明没有任何值,理应和尝试一的结果一样

尝试三:
将FilterExpression="us003=':code'" 改成 将FilterExpression="us003=:code" 
直接报错:未找到列 [:code],因为us003字段是字符型的,可以理解

看来我自能使用占位符了,于是我假如了多个参数,多个条件是‘或’的关系,也就是说只要用户填对一格就能返回所要的记录

尝试四:
我添加了一个条件
HTML code
<form id="form1" runat="server">    <div>        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>        <asp:Button ID="Button1" runat="server" Text="Button" />        <asp:GridView ID="GridView1" runat="server" AllowPaging="true" PageSize="5" DataSourceID="SqlDataSource1">        </asp:GridView>           <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=pdcx;User ID=pdcx;Password=pdcx;Unicode=True"            ProviderName="System.Data.OracleClient" SelectCommand="SELECT * from US_USER"            FilterExpression="us003='{0}' or us004='{1}'">            <FilterParameters>                <asp:ControlParameter Name="code" ControlID="TextBox1" />                <asp:ControlParameter Name="t" ControlID="TextBox2" />            </FilterParameters>        </asp:SqlDataSource>       </div>    </form>

如果我就在textbox1中填一个值,回车,没反应,gridview中还是原始值,没有过滤,接着我把两个值都填了,便得到了那条记录,数据过滤,而且两格中只要填对一格就行,看来有点对了,但是用户有格不填怎么办?

敬请大家指教,小弟很穷每分,请见谅哦 ^_^



------解决方案--------------------------------------------------------
HTML code
   <asp:ControlParameter Name="code" ControlID="TextBox1" ConvertEmptyStringToNull="false" />                <asp:ControlParameter Name="t" ConvertEmptyStringToNull="false" ControlID="TextBox2" />
------解决方案--------------------------------------------------------
如果要实现楼主想要得的or逻辑,可能就需要用代码来控制了,例如:
 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:HSDBConnectionString %>"