日期:2014-05-18  浏览次数:20391 次

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="<%$ ConnectionSt