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

解决方案 »

  1.   

    我的实现方法是添加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函数)
      

  2.   

    CheckBox的模板列 + javascript可以实现
      

  3.   

    你的问题当然可以实现,但还是离不开JAVASCRIPT的.
      

  4.   

    Gridview 的一切行为当然最终都是用 javscript 来实现的.
    我是说,要让 Gridview 代劳,不用我们自己写 javascript 脚本,来实现这个功能。一切脚本都是 Gridview 自动产生的。我们只关注后台 ASP.NET 的程序。
      

  5.   

    楼主的要求貌似无法实现,WinForm的就可以
      

  6.   

    用js + CheckBox模板列.
      另外我没有听说过能用Ctrl多选的做法.
      

  7.   

    “选择”只是一个功能原型。你可以自己在ViewState中记录已经选择过得行的行号,然后在绑定行的事件中给这些行设置不同的style,相信这只需要不到10行实际代码就可以完美达到。不过,这跟使用CheckBox相比,并不更加直观。
      

  8.   

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

  9.   

    非常感谢! 后面几位是真的看懂我的意思了。
    我将自己根据这些朋友的思路摸索一下,有成果我会及时暴露给大家。
    我想做一个比较完善的 Gridview 的编辑器,希望大家告诉我合适的资料,有什么想法也给我建议一下。我的比较完善的代码都在我的"代码实验室"里与大家共享:http://lab.why100000.com
      

  10.   

    按一行触发这一行的一个按钮,举一个简单的例子,假设一行中的一个模板列中有一个按钮theButton,在 RowDataBound 事件处理中,写:
      
      if(e.RowType == DataControlRowType.DataRow)
      {
          Button bt=(Button)e.Row.FindControl("theButton");
          e.Row.Attributes["onclick"]=bt.ClientClient+".click();";
      }这样,点击这一行等于点击了这个按钮。对于专业的控件开发来讲,应该是使用 GetPostBackEventReference 来产生脚本。这里使用".....click();"来曲折地产生类似的功能。
      

  11.   

    bt.ClientClient   -->  bt.ClientID                  或者 "document.GetElementByID('"+bt.ClientID+"')."
      

  12.   

    http://dotnet.aspx.cc/article/a8efc285-f0b1-4f8f-8e73-2b7d8724a47c/read.aspx
      

  13.   

    http://blog.csdn.net/selfxd/archive/2007/04/23/1576528.aspx