日期:2014-05-19  浏览次数:20367 次

Gridview 的多选问题
我现在看大家实现的多选,都是用一个   checkbox   来记录的,而且基本是自己编写代码实现的。请问,类似   Gridview   的 "选择 "可以选择一行(成为当前行),Gridview   有没有选择多行的功能?比方说,按住   Ctrl   键点击哪几个行,这几行就被多选了。被选择的行(s)可以被一次性删除。

------解决方案--------------------
我的实现方法是添加CheckBox的模板列

<asp:TemplateField ShowHeader= "False " HeaderText= "选择 ">
<ItemStyle Width= "6px " Wrap= "False " />
<HeaderTemplate>
<asp:CheckBox ID= "CheckBox1 " runat= "server "> </asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID= "CheckBox1 " runat= "server "> </asp:CheckBox>
</ItemTemplate>
<HeaderStyle Width= "6px " />
</asp:TemplateField>

HeaderTemplate的CheckBox用来全选(绑定一个客户端js函数)
------解决方案--------------------
用模板列可以实现
------解决方案--------------------
CheckBox的模板列 + javascript可以实现
------解决方案--------------------
你的问题当然可以实现,但还是离不开JAVASCRIPT的.
------解决方案--------------------
楼主的要求貌似无法实现,WinForm的就可以
------解决方案--------------------
用JS啊。。
------解决方案--------------------
用js + CheckBox模板列.
另外我没有听说过能用Ctrl多选的做法.

------解决方案--------------------
“选择”只是一个功能原型。你可以自己在ViewState中记录已经选择过得行的行号,然后在绑定行的事件中给这些行设置不同的style,相信这只需要不到10行实际代码就可以完美达到。

不过,这跟使用CheckBox相比,并不更加直观。
------解决方案--------------------
如果实现你说的功能,需要做的额外工作还是比较多的。
(1)能识别Ctrl键的也只有Javascript了,因此你要用javascript判断选择时是否按住了Ctrl键。
(2)GridView的选择按钮是后台执行的,你用他的话直接到后台了,无法判断前台是否按了Ctrl键,这样你必须使用模板列,加按钮或html的按钮做选择按钮,以在前台确定选择。方法倒不难,可以考虑将按钮id设置为行号(后边就不用说了吧,在OnClientClick或onclick中实现)。
(3)GridView默认只能选中一项的,所以选中多项时你只能自己记录选中了哪些项。
(4)既然选中项是自己记录的,还需要自己更改选中行的显示样式。

呵呵,需要比较高的javascript功力和前后台数据交换能力。
------解决方案--------------------
我啰嗦半天,还是sp1234(跟老婆共用一个局域网) 的方法简单,记录选择历史就行了,强!
给他补充一点,可能需要用个按钮,点击后表示开始多选了,再点(或者另一按钮)表示多选过程结束,操作起来不是很舒服。
------解决方案--------------------
按一行触发这一行的一个按钮,举一个简单的例子,假设一行中的一个模板列中有一个按钮theButton,在 RowDataBound 事件处理中,写:

if(e.RowType == DataControlRowType.DataRow)
{
Button bt=(Button)e.Row.FindControl( "theButton ");
e.Row.Attributes[ "onclick "]=bt.ClientClient+ ".click(); ";
}

这样,点击这一行等于点击了这个按钮。

对于专业的控件开发来讲,应该是使用 GetPostBackEventReference 来产生脚本。这里使用 ".....click(); "来曲折地产生类似的功能。
------解决方案--------------------
bt.ClientClient --> bt.ClientID

或者 "document.GetElementByID( ' "+bt.ClientID+ " '). "
------解决方案--------------------
http://dotnet.aspx.cc/article/a8efc285-f0b1-4f8f-8e73-2b7d8724a47c/read.aspx
------解决方案--------------------
http://blog.csdn.net/selfxd/archive/2007/04/23/1576528.aspx