标题:哪位了解ASP.Net的控件SqlDataSource,其中的Filter功能使用时候有些问题
只看楼主
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
结帖率:100%
已结贴  问题点数:20 回复次数:34 
哪位了解ASP.Net的控件SqlDataSource,其中的Filter功能使用时候有些问题
在FilterParameters中绑定多个控件参数并在FilterExpression中进行过滤,只要任何一个绑定的控件参数值为空,就不会执行过滤...

我希望能够,我只对任一个绑定的参数控件输入要过滤的参数值,就能立刻执行过滤


[ 本帖最后由 hysoka 于 2010-8-18 17:17 编辑 ]
搜索更多相关主题的帖子: ASP 控件 Net Filter 
2010-08-18 16:54
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:10 
你可以在代码里对这些值都写一个默认值,修改其中一个,其他的值还都是默认的,这样就可以进行过滤了

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-08-18 21:57
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
得分:0 
以下是引用冰镇柠檬汁儿在2010-8-18 21:57:05的发言:

你可以在代码里对这些值都写一个默认值,修改其中一个,其他的值还都是默认的,这样就可以进行过滤了
首先对版主的回复表示感谢,我再详细描述下:
SqlDataSource控件的FilterParameters属性中设置三个参数,分别绑定到两个textbox和一个dropdownlist,通过这三个控件中的值作为过滤条件来对SDS的DataSet查询进行过滤,并在GridView中实时体现出来。过滤表达式如下形式:FilterExpression="a1 like '%{0}%' and a2 like '%{1}%' and a3 = '{2}'";那么默认情况下是不对查询进行任何过滤的,也就是三个控件中的值都为空。

那么现在出现的情况是,三个控件中的值有任何一个为空,整个过滤条件都不发挥作用,而我的希望是任何一个控件中的值被我输入了过滤条件后都能有相应的变化

不知我对你回复的理解是否正确,或者我对该控件的Filter机制不太了解,你建议我设置默认值,岂不是页面加载后默认就要带条件过滤查询结果,那恐怕不是我的本意...我希望是哪个控件值没有输入,哪个控件所绑定的过滤字段就不进行过滤

[ 本帖最后由 hysoka 于 2010-8-20 18:03 编辑 ]
2010-08-19 00:39
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:0 
呵呵,是我对FilterParameters的机制不了解的,因为我从来不用这种东西,不用的理由有句笑话,是这样的控件完美的破坏了分层的思想。
我一般都是拼接SQL语句的,需要什么条件就拼上什么条件,很灵活,像你用的这个控件,就必须要全部写上,非常的死板

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-08-19 09:58
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:10 
用代码判断再拼接吧/
程序代码:
string filter = "";
if(textbox1.text != "")
{
    fileter = "a1 like '%" + textbox1.text + "%'";
}
if(textbox2.text != "")
{
    fileter += fileter != "" ?  " and " : "";
    fileter += " a2 like '%" + textbox2.text + "%'";
}
if(dorpdownlist1.selectvalue != "")
{
    fileter += fileter != "" ?  " and " : "";
    fileter += " a3 like '%" + dorpdownlist1.selectvalue + "%'";
}
if(fileter != "")
{
    SqlDataAdapter1.FilterExpression = fileter ;
}

思路大概这样,具体的自己去调试吧。

飘过~~
2010-08-19 12:49
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
得分:0 
我是从三层架构转向混搭的,随着.Net下开发的时间越久,觉得MS提供的功能性控件一般比程序员手写功能要高效的多,而且开发过程更为简洁。我不喜欢被所谓的框架忽悠,虽然这样违背了三层架构和MVC体系,但我觉得混搭不失为一种RAD的方法。以上题外话,如果解决不了这个问题,我也要用回拼接查询条件的方法了。

最后请教版主一个问题,有什么办法,或者你协助我调整下已发帖的分值。我是昨天注册的论坛,当时默认只有20分,我不太清楚就在这个帖子全部给出了,导致我另一帖子只能给0分。我想两个帖子各10分,谢谢
2010-08-19 12:51
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
你这个帖子不是还没结么?
帖子上有个“我要结贴”,点它后就可以将你这个贴的20分给大家了。

另外,尽量不要用现成的数据控件,自己写代码,灵活得多。而且方便维护等等。

飘过~~
2010-08-19 12:55
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
得分:0 
回复 5楼 bygg
谢谢版主的回复,那么你建议的核心内容是拼接时避免使用“{0}”这样的占位符,转而用实际确定的值来提交过滤么?
2010-08-19 13:00
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:0 
7楼的bygg说的是对的,应该不用现成的数据控件,不知道楼主接触2010了没,现在.NET的思想已经逐渐的鼓励大家用html控件去写了,也就是说微软已经在逐渐的摒弃自己的很多.NET控件了,这又能说明什么问题呢?

回答楼主的另一个问题,论坛积分的那个就那么回事,别太在意,每天只要回帖,都会有10个可用分的,只要你常来论坛发帖,可用分不是问题的,论坛有“随意闲聊”这个板块,没有技术问题的时候,可以去那里闲聊,呵呵

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-08-19 13:05
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
不是避免使用“{0}”这样的占位符。
而是尽可能不用它自带的那些数据控件,自己通过写代码来实现。

飘过~~
2010-08-19 13:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-316106-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049114 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved