首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

SqlDataSource 数据过滤的有关问题

2011-12-28 
SqlDataSource数据过滤的问题我想通过多个文本框中的值对gridview进行过滤,即和它相关的sqldatasource能得

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


SelectCommand="SELECT * FROM [TABLE1]" FilterExpression="field1 = '{0}' or field2 = '{1}'" OnFiltering="SqlDataSource1_Filtering">
<FilterParameters>
<asp:ControlParameter ControlID="TextBox1" Name="field1" PropertyName="Text" DefaultValue="" />
<asp:ControlParameter ControlID="TextBox2" Name="field2" PropertyName="Text" DefaultValue="" />
</FilterParameters>
</asp:SqlDataSource>
*****************************************************
 protected void SqlDataSource1_Filtering(object sender, SqlDataSourceFilteringEventArgs e)
{

if (e.ParameterValues[0] == null && e.ParameterValues[1] != null)
e.ParameterValues[0] = "不可能出现的值";

if (e.ParameterValues[0] != null && e.ParameterValues[1] == null)
e.ParameterValues[1] = "不可能出现的值";

}

热点排行