Grid按列排序

伴老思源 2005-11-04 04:03:43
请问各位大虾,当点击Grid的Header时进行该列的排序,请问有没有什么好方法,
可以用哪个事件?

Grid的第一列绑定一个Checkbox,可以多选,进行删除,要求可以进行翻页,但所选的数据不能丢失,
有没有什么好方法?

以上任一条问题解决后100分
...全文
359 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
伴老思源 2005-12-23
  • 打赏
  • 举报
回复
有没有js实现的代码
jxufewbt 2005-11-07
  • 打赏
  • 举报
回复
1、http://dotnet.aspx.cc/ShowDetail.aspx?id=00C78024-5C08-4F3F-BCA8-AB3C0B330A12
2、http://dotnet.aspx.cc/ShowDetail.aspx?id=F43AF9A5-2C2E-4AA6-E976-21E9569F5A8A
伴老思源 2005-11-07
  • 打赏
  • 举报
回复
兄弟们,有没有其他的办法,或实例,
曲滨_銘龘鶽 2005-11-04
  • 打赏
  • 举报
回复
作批量一直就是比较郁闷的事情(B/S 更严重)
如果分页比较多的话如 5000 页的巨型数据,
即使是放个隐藏控件什么的保存着一直以来的动作处理,起来也比较郁闷
缺点
存在并发冲突的问题
如果用户A,B同时进行这个操作
A 用户选择5 条在第一页 分别是 id=1,2,3,4,5 的记录
B 用户上来操作删除 id = 3,4,5 的记录
当 A在其他页也选择了相删除的条目确认删除的时候,打出的票据上却少了三条?
你如果要解决这种尴尬还要提示用户你的 1,2,3 号记录已经被其他人删除
提示 “重新选择”或“取消”
如这时候还有个用户 C 更改了A选择的id=5的录,但如果被人更改后的记录也许就不需要删除
了 还需要提示 A, 5 号记录已经被更改,你是就提交4条还是,全不提交
而且数据比较多的时候用户需要记忆以前选过什么!
最好的解决办法是
不如在分页的Grid上面放一个Grid列表,来记忆都那些曾经被他选择过,这样用户还可以看到
一共多少记录被选了,你代码也好写,到上面的grid 或 什么来取得以前选过的记录,而且
这种批量的最后都要效验,那个记录被其他人删除或更改的
15916814 2005-11-04
  • 打赏
  • 举报
回复
写个方法,记下你选中的checkbox,就不会出现翻页后丢失的问题```
Comer 2005-11-04
  • 打赏
  • 举报
回复
mark
singlepine 2005-11-04
  • 打赏
  • 举报
回复
http://singlepine.cnblogs.com/articles/266538.html
singlepine 2005-11-04
  • 打赏
  • 举报
回复
http://singlepine.cnblogs.com/category/37474.html
伴老思源 2005-11-04
  • 打赏
  • 举报
回复
感谢:cansum396(沉觉不醒)兄
伴老思源 2005-11-04
  • 打赏
  • 举报
回复
那么有没有高手能提供段js呢?(50分)
mobydick 2005-11-04
  • 打赏
  • 举报
回复
用vs2005吧,按列排序和绑定控件很容易。

如果不喜欢postback的话,就只有写js代码了。
yangchh 2005-11-04
  • 打赏
  • 举报
回复
up
petereggplant 2005-11-04
  • 打赏
  • 举报
回复
这个倒无所谓的,PageIndex发生变化的时候对该版面显示的数据进行遍历,然后更新
cansum396 2005-11-04
  • 打赏
  • 举报
回复
第二个问题:
http://dotnet.aspx.cc/ShowDetail.aspx?id=F43AF9A5-2C2E-4AA6-E976-21E9569F5A8A
伴老思源 2005-11-04
  • 打赏
  • 举报
回复
不好意思我没说清楚,分页没有自定义分页,而是用它自带的PageIndex
petereggplant 2005-11-04
  • 打赏
  • 举报
回复
问题1
若DataGrid支持排序,则一个可排序列的头将不仅是普通的文本,而是由HTML元素组成,通常是一个锚标签。利用该列的DHTML行为你可知道如何获取其内的文本。它将用于获取点击单元格的内在文本,并自动移走任何HTML格式。
  现在让你知道如何建立客户端排序能力。在Dave Massy的专栏中证明并提供了一个强大的组件-sort.htc行为。该行为截取在一表格头的任意点击并基于从列中找到的值进行排序。该行为跟踪上次点击的列,且当你再次点击此列时,则其顺序将后反过来。此外,一个图开将添加到列头来指示排序列和它的排序方向。Figure 8显示一个使用此行为的DataGrid.图形为字体为Wingdings的一个"3"(动态建立的SPAN标签)。

sort.htc行为捕获OnContentReady事件,进行一些初始化工作,且为表格头中每个单元附加一个处理到其OnClick事件中。当表格在客户端设置之后,所有单元具有一个空的图形且其顺序是默认值。当用户点击来对一特定列排序时,则该列的内容将排序。注意基于客户端的排序将是纯文本的。若你要基于列排序,请使用DataGrid控制提供的默认服务器端排序机制。仅当前显示的记录集被排序sort.htc行为在服务器端由一个名为EnableClientSort属性来控制,它几乎等同于EnableColumnDrag且允许通过添加sort.htl到行为式样中来被允许,此两种行为(behavior)可在一起很好地运行。
  若你仅满足于客户端排序,则可说是完全地完成了。该行为(behavior)排序表格中的内容且在下次刷新时该排序将失效。客户端和服务器端排序可在相同的表格上被支持。当用户一个服务器端排序的列上点击时(见Figure 8中的ID列),页面将被刷新且触发一个服务器端事件到DataGrid。当用于点击任何其它列时,排序将在客户端上发生。此版本的sort.htc组件支持在所有列上排序。你可改进此组件以便使它接受仅在某些列上支持排序.
  是否有办法让客户端排序保持?当然可以,你可建立第二个隐藏字段,且用sort.htc组件将在服务器上用于排序的表达式赋给隐藏字段。咋一看好象是一个不错的主意,其实并非如此
问题在于在客户端你并不知道在屏幕上显示的列的数据的任何信息。你仅可知道的信息就是保存在隐藏字段中点击列的头文本或索引信息以及指示排序方面的标志信息(升序或降序)。在服务器端,该信息很难把握。首先我尝试以基于文本的方式来排序数据源。捆绑到DataGrid的数据源可为实施了IEnumerable接口的任意对象。除非你限制为一些通用的ADO.NET对象。然而最大的挑战仍是排序。若想提供给用户与在客户端产生的信息相同的行顺序,你必须以文本方式对数据源中所有数据对象进行排序。但是数据源是一个丰富类型的对象的集合,如日期,串,以及可能格式定义的数值。要确保你获取客户端相同的顺序,你必须首先转换任意对象为其标记的对应者。
最值行探讨的方法就是在Render方法中,在生成HTML行之后进行排序。我并没有这样做,但我敢打赌,使用正规表达式的一些帮助和一个定制的比较类,你可对代表一个表格的HTML串进行排序。
  要解决此问题,我选择了其它方法。我使用隐藏字段来跟踪用户上次使用的排序表达式。该信息并不在服务器端被使用。在客户端,行为读取隐藏字段的内容并相应重新初始化表格。下面几行(在Render方法中)使得此方法成为可能:
if (EnableClientSort)
{
string buf = "";
buf = Page.Request[HiddenFieldForSorting].ToString();
Page.RegisterHiddenField(HiddenFieldForSorting, buf);
}
  当行为被初始化时,在客户端除了以默认方式排序外,表格信息被部分显示。在此初始化阶段,行为将改变表格的结构并刷新。但这一系列操作会产生令人讨厌的闪烁。 为了解决这个问题,将为 DataGrid 而创建的表格包在
标签中并将其 visibility 设置为 hidden。 这样一来当页面首次显示时,浏览器将为表格预留空间但并不显示。当行为完成其排序时,它将检索在DHTML对象模型中的
标签并打开其visibility。该行为将通过一个 明确的ID来标识该
petereggplant 2005-11-04
  • 打赏
  • 举报
回复
问题2,定义一个数组纪录被选中的索引(绝对的),或者是两个数组纪录索引和页数
然后每次CurrentPage发生变化的时候对该页面进行一下遍历,数组中有的,把checkbox选中

或者数据源可以多添加一个column,显示的时候把他的visible设置为false,然后把选中的checkbox的行的那个隐藏的column设置特定的值,然后遍历的时候就根据这一列的值判断checkbox是被选中还是不被选中.

以上两个方法在你翻页的时候对显示的行进行遍历是必要的
伴老思源 2005-11-04
  • 打赏
  • 举报
回复
望大家踊跃发言,顶者有分!
若解决,周一结贴
伴老思源 2005-11-04
  • 打赏
  • 举报
回复
第一条问题,只要能激发个事件就有戏,js或cs都行

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧