GridView全选全不选以及读取隐藏列的值的方法

经过测试可以使用的方法:

1、在gridview里边设置两个checkbox,均为服务器控件,postback不需要;如下面的代码

<asp:GridView ID="gvUsers" runat="server" AutoGenerateColumns="False"
                DataKeyNames="ID">
            <Columns>
                <asp:TemplateField HeaderText="选择">
                    <HeaderTemplate>
                        <asp:CheckBox ID="CheckHeader" runat="server" value='<%#Eval("ID") %>' onclick="SelectAll(this);"/>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="CheckItem" runat="server"  />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="ID" HeaderText="编号" Visible="False" />
                <asp:BoundField DataField="LoginName" HeaderText="用户名" />
                <asp:BoundField DataField="LastLoginTime" HeaderText="上次登录时间" />
            </Columns>
        </asp:GridView>

 

2、加入javascript语句

 <script language="javascript" type="text/javascript">
       function SelectAll(tempControl)
       {
           //将除头模板中的其它所有的CheckBox取反

            var theBox=tempControl;
             xState=theBox.checked;   
          
            elem=theBox.form.elements;
            for(i=0;i<elem.length;i++)
            if(elem[i].type=="checkbox" && elem[i].id!=theBox.id)
            {
                if(elem[i].checked!=xState)
                elem[i].click();
            }
       }
    </script>

 

这样,就可以选择全选或者全不选了。

 

3、读取Gridview隐藏列的值

 

如1中代码,将隐藏列ID加入DataKeyNames

DataKeyNames="ID"

 

4、读取选中行的ID值,返回“,”间隔的字符串 

 protected void Button1_Click(object sender, EventArgs e)
        {
            string str = "";
            for (int i = 0; i < gvUsers.Rows.Count; i++)
            {
                if (((CheckBox)gvUsers.Rows[i].Cells[0].Controls[1]).Checked)
                {
                    str = str+gvUsers.DataKeys[i]["ID"].ToString()+",";                    
                }
              
            }

       if (str.Length > 0)  str = str.Remove(str.LastIndexOf(","), 1); //去除最后一个,
            Response.Write(str);


        }

可以获得列表 1,2,3,5,

然后使用去最后一个,的代码,就可以搞定了!

posted on 2009-05-30 23:42  c#之旅  阅读(782)  评论(0编辑  收藏  举报

导航