标题:哪位了解ASP.Net的控件SqlDataSource,其中的Filter功能使用时候有些问题
只看楼主
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
得分:0 
回复两位版主,帖子分的事就不多考虑了,但是在C#区中发的另一帖子昨天因为没分可给了,就悬赏分设为0,不知是不是因为这个原因至今没人回复。

至于VS2010,我现在就在用这个开发,以前是用2005做.NET多一些。至于开发经验,相较而言,.NET里以前做WinForm的程序多些。你所指的2010中所推广的MVC2开发框架我了解一些,MVC的原理和思想也知道些;我以前是坚定的三层体系拥护者,也从不会去用数据源控件来破坏View层;但现在的观点已经有所改变,个人不会再拘泥于一种死板的框架思想,转而更倾向于按需定制,如果适合RAD的产品,我想我会支持高效的.NET自带控件。

回复9楼版主“7楼的bygg说的是对的,应该不用现成的数据控件,不知道楼主接触2010了没,现在.NET的思想已经逐渐的鼓励大家用html控件去写了,也就是说微软已经在逐渐的摒弃自己的很多.NET控件了,这又能说明什么问题呢?”,这句话并不能说MS已经抛弃自己的.NET控件,WYSWYG是MS一直倡导的理念,任何集成IDE都不敢抛弃数据类相关控件,而相反都只会更加用心于数据控件的性能、易用性和良好的UX,举例来说MS在.NET4.0版中对SqlDataSource控件的改进较.NET3.5中非常明显。版主所理解的MS鼓励使用HTML控件,其实是MVC2架构中倡导的View层中使用客户端控件来代替原先使用的ASP控件,是MS推广MVC2框架时的一点需求,并不是希望所有程序员都去屏弃ASP控件。

以上纯个人的技术见解,与两位版主交流,入行不深露怯之处别见笑~
2010-08-19 13:52
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
得分:0 
以下是引用bygg在2010-8-19 13:35:58的发言:

不是避免使用“{0}”这样的占位符。
而是尽可能不用它自带的那些数据控件,自己通过写代码来实现。
认同两位提出的改进建议,但我发帖目的主要是求解。想知道我所叙述出来的过滤不正常情况是如何引发的,又该如何调整该控件延续我现有的开发结构解决。

即:何故?何解?

谢谢
2010-08-19 13:57
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
说实话,你这种用法,我没用过,呵呵。
我也只是凭我个人的经验来回答你的。
而你所说的如果某一个条件为空,将出错,所以,我觉得除了在代码中进行验证以外,并没有什么可取之处。

飘过~~
2010-08-19 14:00
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
以下是引用hysoka在2010-8-19 13:52:57的发言:

回复两位版主,帖子分的事就不多考虑了,但是在C#区中发的另一帖子昨天因为没分可给了,就悬赏分设为0,不知是不是因为这个原因至今没人回复。

至于VS2010,我现在就在用这个开发,以前是用2005做.NET多一些。至于开发经验,相较而言,.NET里以前做WinForm的程序多些。你所指的2010中所推广的MVC2开发框架我了解一些,MVC的原理和思想也知道些;我以前是坚定的三层体系拥护者,也从不会去用数据源控件来破坏View层;但现在的观点已经有所改变,个人不会再拘泥于一种死板的框架思想,转而更倾向于按需定制,如果适合RAD的产品,我想我会支持高效的.NET自带控件。

回复9楼版主“7楼的bygg说的是对的,应该不用现成的数据控件,不知道楼主接触2010了没,现在.NET的思想已经逐渐的鼓励大家用html控件去写了,也就是说微软已经在逐渐的摒弃自己的很多.NET控件了,这又能说明什么问题呢?”,这句话并不能说MS已经抛弃自己的.NET控件,WYSWYG是MS一直倡导的理念,任何集成IDE都不敢抛弃数据类相关控件,而相反都只会更加用心于数据控件的性能、易用性和良好的UX,举例来说MS在.NET4.0版中对SqlDataSource控件的改进较.NET3.5中非常明显。版主所理解的MS鼓励使用HTML控件,其实是MVC2架构中倡导的View层中使用客户端控件来代替原先使用的ASP控件,是MS推广MVC2框架时的一点需求,并不是希望所有程序员都去屏弃ASP控件。

以上纯个人的技术见解,与两位版主交流,入行不深露怯之处别见笑~
因为在MVC中,许多东东都由控制器完成了,而我们的页面大多是接收由控制器处理好的数据,再进行展示,所以用asp控件就显得有些多余了(这种情况下,不再需要与服务端进行交互),所以MS提倡用html控件,自然是对的。但是用asp控件也同样可以实现,只是出于对网站的优化方面考虑,用asp控件,有些多余而已。
同时,MS并没有说要抛弃asp控件,只是想告诉大家,在什么情况下用什么,得根据实际情况来定,

飘过~~
2010-08-19 14:04
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8074
专家分:6657
注 册:2005-11-7
得分:0 
“以上纯个人的技术见解,与两位版主交流,入行不深露怯之处别见笑”
千万别这么说,你的见解很好,呵呵
我觉得的思想已经从webform开始像form方式转变了,它推出了mvc2就是很好的证明,如果它不想转变的话,大可按照自己的路继续走,当然现在它也没放弃原有的方式,呵呵
框架思想给我带来的,我觉得并不是死板,反倒是灵活,就像活字印刷一样,你不这么觉得吗?呵呵

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-08-19 14:11
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
得分:0 
以下是引用bygg在2010-8-19 14:04:16的发言:

因为在MVC中,许多东东都由控制器完成了,而我们的页面大多是接收由控制器处理好的数据,再进行展示,所以用asp控件就显得有些多余了(这种情况下,不再需要与服务端进行交互),所以MS提倡用html控件,自然是对的。但是用asp控件也同样可以实现,只是出于对网站的优化方面考虑,用asp控件,有些多余而已。
同时,MS并没有说要抛弃asp控件,只是想告诉大家,在什么情况下用什么,得根据实际情况来定,
完全赞同bygg的观点,我也是这个意思,但可能表达不清楚。

另外我说的三个过滤条件控件值有任何一个为空(即未设置过滤条件),然后并不是报错,而是三个过滤条件都失效了,也就是变成默认执行selectCommand,将DataSet全部输出来。但我能确定页面执行了_doPostBack,也就是触发了Filtering事件

[ 本帖最后由 hysoka 于 2010-8-19 17:26 编辑 ]
2010-08-19 14:12
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
得分:0 
以下是引用冰镇柠檬汁儿在2010-8-19 14:11:32的发言:

“以上纯个人的技术见解,与两位版主交流,入行不深露怯之处别见笑”
千万别这么说,你的见解很好,呵呵
我觉得的思想已经从webform开始像form方式转变了,它推出了mvc2就是很好的证明,如果它不想转变的话,大可按照自己的路继续走,当然现在它也没放弃原有的方式,呵呵
框架思想给我带来的,我觉得并不是死板,反倒是灵活,就像活字印刷一样,你不这么觉得吗?呵呵

一个好的框架和技术架构,我也是非常喜欢的,现在MVC3已经发布预览版1了,我也会一直关注的。版主误会了,我并不想说用框架就死板,我是想表明两个观点:1.并不是一做开发就要用纯的MVC架构或者三层体系,有些时候比如我想用RAD方法去开发,完全可以改动一下,集成一些数据源控件,省去不少麻烦;2.事实上,MS在CLR上有得天独厚的优势,对.NET控件的优化程度是非常高的,用它的控件要比大多数程序员自己写代码要高效和简洁的多
2010-08-19 14:21
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 

默认值设成 * 就可以了。

飘过~~
2010-08-19 15:06
hysoka
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-18
得分:0 
谢谢“bygg”版主,你的方法很奏效,同时我刚刚也找出了出现问题的根源,在此一并公布以供大家参考。

SqlDataSource有个bool属性CancelSelectOnNullParameter:如果设为True,在执行Select时,任意一个查询条件参数值为Null时跳过整个Where子句;
FilterParameters属性集合中的任意参数值中有这样一个bool属性ConvertEmptyStringToNull,并且默认值为True:顾名思义很容易理解,当给定的参数值为空串时,转换它为Null
FilterParameters属性集合中的任意参数值中还有个DefaultValue:参数值为Null时使用默认值

那么问题看似是找到了,任选一个解决方案吧:

1.将CancelSelectOnNullParameter设为False?可惜不行,一点效果也没有。是因为这个参数只能负责SelectCommand,Filter机制下CancelSelectOnNullParameter默认即为True? or VS2010目前版本存在Bug? 以上猜测就不得而知了。

2.将ConvertEmptyStringToNull设为False?这样未设置过滤值的参数会传一个空串而不是Null,过滤条件将会执行。看似完美的解决方案,可惜有局限性,如果FilterExpression中使用如a1='{0}'这种格式,实际过滤条件就变为a1='',那你就只能查到字段a1为空串的情况了;你说用是like?也不完满,like ''与=''实际效果一样的;要想用这种解决办法,你只能保证你的过滤格式形如like '%{0}%',至少要带一个‘%’。

3.将ConvertEmptyStringToNull设为True,并设置默认为'%';与方法2类似,但可以支持like '{0}'这样的格式。

4.再加上版主提供的“*”默认值方法,用法同方法3,暂列为第4种方法。

现在对版主的方法有一个疑问:“*”值是什么?我确定不是Sql中的通配符,不知是.NET提供的?还是C#?还是LINQ(LINQ我不熟)?

[ 本帖最后由 hysoka 于 2010-8-19 17:25 编辑 ]
2010-08-19 17:23
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
SqlDataSource有个bool属性CancelSelectOnNullParameter:如果设为True,在执行Select时,任意一个查询条件参数值为Null时跳过整个Where子句;

我就在找这样的属性,没找到,呵呵.
学无止境啊……

在sql中,*代表任何字符,嘿嘿。

飘过~~
2010-08-19 17:50



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




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

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