Bestcomy.net blog

Coding for funny

导航

简介

此控件是封装一个标准的HTML控件,但是ASP.NET缺没有提供此控件的服务器版,因为我自己的项目中用到了这样的控件,所以趁这几天有空整理了一下,先体验一下设计时和运行时的效果:

  • 设计时:
    GroupList_Design.gif
  • 运行时:
    GroupList_Run.gif

此控件与我前些日子介绍的ComboBox原理相同。区别在于:

  1. ComboBox只实现了一层控件层次结构,而GroupList实现了嵌套的二层控件层次结构。我还想实现如多级菜单和树的无限级控件层次结构,通过这两个控件的开发我发现这不难实现。
  2. 实现了一个SelectedIndexChanged事件。

特点

相对于DropDownList来说有如下两个有趣的特点:
  1. 实现了选择项的分组
  2. 分组项不能被选择
我也是因为项目中要这样的控件,后来有网友告诉我有这样的html控件,而奇怪的是asp.net并没有提供它的服务器版,于是封装成一个服务器控件来方便使用。

使用示例

  • 编程方式动态添加分组选择项
    for(int i=1; i < 4; i++)
                    {
                        GroupItem gItem 
    = new GroupItem("Group_"+i.ToString());
                        
    for(int j=1; j < 6; j++)
                        {
                            GroupListItem item 
    = new GroupListItem(gItem.Label + "_Item_" + j.ToString());
                            gItem.Items.Add(item);
                        }
                        GroupList1.GroupItems.Add(gItem);
                    }
  • 设计时页面声明
    <bestcomy:grouplist id="Grouplist3" runat="server">
                    
    <bestcomy:GroupItem Label="Group1">
                        
    <bestcomy:GroupListItem Text="Group1_Item1" Value="Group1_Item1" Selected="False"></bestcomy:GroupListItem>
                        
    <bestcomy:GroupListItem Text="Group1_Item2" Value="Group1_Item2" Selected="False"></bestcomy:GroupListItem>
                    
    </bestcomy:GroupItem>
                    
    <bestcomy:GroupItem Label="Group2">
                        
    <bestcomy:GroupListItem Text="Group2_Item1" Value="Group2_Item1" Selected="False"></bestcomy:GroupListItem>
                        
    <bestcomy:GroupListItem Text="Group2_Item2" Value="Group2_Item2" Selected="True"></bestcomy:GroupListItem>
                    
    </bestcomy:GroupItem>
                
    </bestcomy:grouplist>
  • 数据绑定
    DataTable dt = new DataTable();
                    dt.Columns.Add(
    "group",    typeof(string));
                    dt.Columns.Add(
    "text",    typeof(string));
                    dt.Columns.Add(
    "value",    typeof(string));

                    
    for(int i=0; i < 10; i++)
                    {
                        DataRow ndr 
    = dt.NewRow();
                        ndr[
    "group"= "Group_" + ((int)(i%2)+1).ToString();
                        ndr[
    "text"= "Text_" + ((int)(i+1)).ToString();
                        ndr[
    "value"= "value_" + ((int)(i+1)).ToString();
                        dt.Rows.Add(ndr);
                    }

                    
    this.Grouplist2.DataGroupField = "group";
                    
    this.Grouplist2.DataTextField = "text";
                    
    this.Grouplist2.DataValueField = "value";
                    
    this.Grouplist2.DataSource = dt.DefaultView;
                    
    this.Grouplist2.DataBind();

源代码

https://files.cnblogs.com/bestcomy/WebControlTest.rar