zoukankan      html  css  js  c++  java
  • ASP.NET DEMO 12 : CheckBoxList 实现单选【转】

    转自:http://www.cnblogs.com/Jinglecat/archive/2007/07/18/823201.html

    demo:https://files.cnblogs.com/Jinglecat/DEMO12_CheckBoxListSingleCheck.rar

    一看标题估计大家都开始怀疑了:单选?为什么不直接使用 RadioButtonList ?
    是的。你是对的。然而,实际应用中需求千变万化,谁让我们的客户够 BT 呢?

    主要代码

    只有一个通用的 CheckBoxList_Click 函数,
    需要注意的是 CheckBoxList 可以呈现为 table 布局,也可以呈现为流布局(使用 span 做外部容器)

    我的习惯是,脚本代码中,尽量不直接引用 html id,因为对于服务器控件对应的是 ClientID,而ClientID与控件层次关联的,不利于代码移植复用,因此尽可能选择直接传递对象,通过 DOM 获取相关的父控件和子控件。

    function CheckBoxList_Click(sender) 
       
    {
           
    var container = sender.parentNode;        
           
    if(container.tagName.toUpperCase() == "TD") { // 服务器控件设置呈现为 table 布局(默认设置),否则使用流布局
                container = container.parentNode.parentNode; // 层次: <table><tr><td><input />
            }
            
           
    var chkList = container.getElementsByTagName("input");
           
    var senderState = sender.checked;
           
    for(var i=0; i<chkList.length;i++) {
                chkList[i].checked
    = false;
            }
         
            sender.checked
    = senderState;          
        }
    <h3>单选效果的 CheckBoxList</h3>
       
    <div style="float:left">
       
    <h4>静态项</h4>
           
    <asp:CheckBoxList ID="CheckBoxList1" BorderWidth="1" runat="server" RepeatLayout="Flow">
           
    <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item1">Item1</asp:ListItem>
           
    <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item2">Item2</asp:ListItem>
           
    <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item3">Item3</asp:ListItem>
           
    <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item4">Item4</asp:ListItem>
           
    <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item5">Item5</asp:ListItem>
           
    </asp:CheckBoxList>
       
    </div>
       
    <div style="float:left;padding-left:100px">
       
    <h4>绑定项</h4>
           
    <asp:CheckBoxList ID="CheckBoxList2" BorderWidth="1" runat="server" DataTextField="Value" DataValueField="Key" OnDataBound="CheckBoxList2_DataBound">        
           
    </asp:CheckBoxList>
       
    </div>


    兼容性
    IE 6 SP6,  FF 2.0,  Opera 9.2 测试通过

    页面效果

    全部代码
     1 <%@ Page Language="C#" AutoEventWireup="true"  %>
     2 
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     4 
     5 <script runat="server">
     6 
     7     protected void Page_Load(object sender, EventArgs e)
     8     {
     9         if (!IsPostBack) {
    10             LoadCheckBoxListData();
    11         }
    12     }
    13 
    14     // CheckBoxList DataBound 事件,
    15     // 此事件在执行数据绑定完成之后触发。
    16     protected void CheckBoxList2_DataBound(object sender, EventArgs e)
    17     {
    18         CheckBoxList chkList = (CheckBoxList)sender;
    19         foreach (ListItem item in chkList.Items) {
    20             item.Attributes.Add("onclick", "CheckBoxList_Click(this)");
    21         }
    22     }
    23 
    24     private void LoadCheckBoxListData()
    25     {
    26         IDictionary dataList1 = CreateSampleDataList(1, 10);
    27 
    28         CheckBoxList2.DataSource = dataList1;
    29         CheckBoxList2.DataBind();
    30 
    31         RadioButtonList1.DataSource = dataList1;
    32         RadioButtonList1.DataBind();
    33     }
    34 
    35     private SortedList CreateSampleDataList(int startOrdinal, int count)
    36     {
    37         SortedList list = new SortedList();
    38         while (count-- > 0) {
    39             list.Add(startOrdinal, "item" + startOrdinal);
    40             startOrdinal++;
    41         }
    42         return list;
    43     }
    44   
    45 </script>
    46 
    47 <html xmlns="http://www.w3.org/1999/xhtml" >
    48 <head runat="server">
    49     <title>DEMO12_CheckBoxListSingleCheck</title>
    50     <script type="text/javascript">
    51     function CheckBoxList_Click(sender) 
    52     {
    53         var container = sender.parentNode;        
    54         if(container.tagName.toUpperCase() == "TD") { // 服务器控件设置呈现为 table 布局(默认设置),否则使用流布局
    55             container = container.parentNode.parentNode; // 层次: <table><tr><td><input />
    56         }        
    57         var chkList = container.getElementsByTagName("input");
    58         var senderState = sender.checked;
    59         for(var i=0; i<chkList.length;i++) {
    60             chkList[i].checked = false;
    61         }     
    62         sender.checked = senderState;          
    63     }
    64     </script>
    65 </head>
    66 <body>
    67     <form id="form1" runat="server">
    68     <h3>单选效果的 CheckBoxList</h3>
    69     <div style="float:left">
    70     <h4>静态项</h4>
    71         <asp:CheckBoxList ID="CheckBoxList1" BorderWidth="1" runat="server" RepeatLayout="Flow">
    72         <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item1">Item1</asp:ListItem>
    73         <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item2">Item2</asp:ListItem>
    74         <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item3">Item3</asp:ListItem>
    75         <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item4">Item4</asp:ListItem>
    76         <asp:ListItem onclick="CheckBoxList_Click(this)" Value="Item5">Item5</asp:ListItem>
    77         </asp:CheckBoxList>
    78     </div>
    79     <div style="float:left;padding-left:100px">
    80     <h4>绑定项</h4>
    81         <asp:CheckBoxList ID="CheckBoxList2" BorderWidth="1" runat="server" DataTextField="Value" DataValueField="Key" OnDataBound="CheckBoxList2_DataBound">        
    82         </asp:CheckBoxList>
    83     </div>
    84     <div style="float:left;padding-left:100px">
    85     <h4>RadioButtonList 对比</h4>
    86         <asp:RadioButtonList ID="RadioButtonList1" BorderWidth="1" runat="server" DataTextField="Value" DataValueField="Key">        
    87         </asp:RadioButtonList>
    88     </div>
    89     </form>
    90 </body>
    91 </html>
  • 相关阅读:
    SilverLight入门实例(一)
    应聘成功了,要去沪江网上班啦!
    C#中(int)、int.Parse()、int.TryParse、Convert.ToInt32数据转换注意事项
    DataTable和DataSet什么区别
    SQL 通配符
    可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)
    发现jquery库的关键字冲突,造成了隐形BUG!(附代码)
    《转载》微软PostScirpt打印机驱动程序原理
    在应聘工作中,不知不觉的完成了一个比较困难的小项目
    在最新的Eclipse 3.6 上配置 Java ME 的开发环境!
  • 原文地址:https://www.cnblogs.com/tangge/p/2534693.html
Copyright © 2011-2022 走看看