用javascript操纵GridView中CheckBox的两个常用技巧

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    
<title>CheckBox</title>
</head>
<body>
    
<form id="form1" runat="server">
        
<asp:GridView runat="server" ID="gdv" AutoGenerateColumns="False">
            
<Columns>
                
<asp:TemplateField>
                    
<ItemTemplate>
                        
<input name="chk" type="checkbox" value="<%#Eval("ID")%>" />
                    
</ItemTemplate>
                
</asp:TemplateField>
                
<asp:BoundField DataField="ID" HeaderText="ID" />
                
<asp:BoundField DataField="Author" HeaderText="Author" />
                
<asp:BoundField DataField="Title" HeaderText="Title" />
                
<asp:BoundField DataField="PostTime" HeaderText="PostTime" />
                
<asp:BoundField DataField="URL" 
                    DataFormatString
="<a href='{0}' target='_blank'>点击打开</a>" 
                    HeaderText
="Link" HtmlEncode="False" />
            
</Columns>
        
</asp:GridView>
        
<p>已选择的项:<input type="text" size="60" id="checked" /></p>
        
<p>要选择的项:<input type="text" size="60" id="checking" /><input type="button" value="选择" onclick="CheckThem()" id="Button1" /></p>
        
<p>当从上面GridView中选择或取消选择一项时,“已选择的项”中会自动更新为当前所有选中项的ID。</p>
        
<p>在“要选择的项”里填写要选择的项的ID(ID间用英文逗号分隔),点击“选择”可自动选中要选择的项。</p>
    
</form>
    
<script type="text/javascript">
        
//先获取到所有的checkbox再说
        var chkList = document.getElementsByName("chk");

        window.onload 
= function()
        {

            
//为所有checkbox添加onclick事件处理,以自动更新“已选择的项”
            for(var i=0; i<chkList.length; i++)
            {
           
               chkList[i].onclick 
= chkClick;
               
            }
        }

        
//checkbox的onclick事件,用于更新“已选择的项”
        function chkClick()
        {
   
            var checkedList 
= "";

            
//获取所有被选中的项
             for(var i=0; i<chkList.length; i++)
             {
                
if(chkList[i].checked)
                    checkedList 
+= chkList[i].value + ",";
             }

            
//把选中项的列表显示到“已选择的项”中,substring在这里是为了去除最后一个逗号
            document.getElementById("checked").value = checkedList.substring(0,checkedList.length-1);
        }

        
//根据在“要选择的项”中的输入选中相应的项
        function CheckThem()
        {
            var checkingList 
= document.getElementById("checking").value;

            
//没有输入就直接返回
            if(checkingList.length==0){return;}

            
//获取所有想要选择项的ID
            var checkingIds = checkingList.split(",");

            
//设置选择状态,注意两个循环的顺序,如果把chkList放到内层,将不能保证总是取得正确结果
            
//因为如果输入了多个ID,后面的ID会把前面的正确结果给冲掉
            for(var j=0; j<chkList.length; j++)
            {
                
for(var i=0; i<checkingIds.length; i++)
                {
                    
if(checkingIds[i] == chkList[j].value)
                    {
                        chkList[j].
checked = true;
                        
break;
                    }
                    
else
                    {
                        chkList[j].
checked = false;
                    }
                 }
            }
        }
    
</script>
</body>
</html> 
  if (Page.IsPostBack==false )
        {
            
//生成DataTable并添加相应的列
            DataTable dt = new DataTable();
            dt.Columns.Add(
"ID");
            dt.Columns.Add(
"Author");
            dt.Columns.Add(
"Title");
            dt.Columns.Add(
"PostTime");
            dt.Columns.Add(
"URL");

            
//测试数据填充
            dt.Rows.Add(1"张三""JavaScript""*************",
               
"http://www.baidu.com");
            dt.Rows.Add(
2"李四""突发奇想--有关微软未来""2008-05-11 09:59",
                
"http://www.baidu.com");
            dt.Rows.Add(
3"王五""可爱的google翻译,笑死我了""2008-05-11 09:07 ",
                
"http://www.baidu.com");
            dt.Rows.Add(
4"赵六""模板修改后重新发布""2008-04-26 07:22",
                 
"http://www.baidu.com");
            dt.Rows.Add(
5"孙七""""2008-04-26 07:22",
              
"http://www.baidu.com");

            
//将DataTable绑定到GridView
            gdv.DataSource = dt;
            gdv.DataBind();
        
        }
posted @ 2008-09-03 15:18  ike_li  阅读(194)  评论(0)    收藏  举报