重写 DropDownList 添加optgroup以及为ListItem 加式样(例如 背景色,前景色等)

重写 DropDownList 添加optgroup以及为ListItem 加式样(例如 背景色,前景色等)
optgroup 效果很酷,对于小型的二级或者多级下拉菜单如果不想做成连动那么复杂用optgroup 是个不错的办法.

但是, .net DropDownList 并不支持optgroup.同时想自定义ListItem 的样式似乎想一步也做到也不容易.

可以通过重写dropdownlist 一些方法,定义新的dropdownlist类来简单的实现.

public   class  NewDropDownList:DropDownList
    
{
        
//重写方法
        protected override void RenderContents(HtmlTextWriter writer) 
        
{
            
string optgroup; 

            ArrayList optOptionGroups 
= new ArrayList();

            
foreach(ListItem item in this.Items)
            
{
                
if(item.Attributes["optgroup"== null
                
{
                    RenderListItem(item, writer);
                }

                
else
                
{
                    optgroup 
= item.Attributes["optgroup"];

                    
if(optOptionGroups.Contains(optgroup)) 
                    
{
                        RenderListItem(item, writer);
                    }
 
                    
else 
                    
{
                        
if(optOptionGroups.Count > 0
                        
{
                            optgroupEndTag(writer);
                        }

                        optgroupBeginTag(optgroup, writer);
                        optOptionGroups.Add(optgroup);
                    }

                }

            }


            
if(optOptionGroups.Count > 0
            
{
                optgroupEndTag(writer);
            }

        }



        
//option 简单添加style
        private void RenderListItem(ListItem item, HtmlTextWriter writer) 
        
{
            writer.WriteBeginTag(
"option");
            writer.WriteAttribute(
"value", item.Value,true);
            writer.WriteAttribute(
"style""color:#7395c1",true);
            
if(item.Selected) 
            
{
                writer.WriteAttribute(
"selected""selected"false);
            }

            
foreach(string key in item.Attributes.Keys) 
            
{
                writer.WriteAttribute(key, item.Attributes[key]);
            }

            writer.Write(HtmlTextWriter.TagRightChar);
            HttpUtility.HtmlEncode(item.Text, writer);
            writer.WriteEndTag(
"option");
            writer.WriteLine();
        }


        
//option 添加optgroup
        private void optgroupBeginTag(string name, HtmlTextWriter writer) 
        
{
            writer.WriteBeginTag(
"optgroup");
            writer.WriteAttribute(
"label", name);
            writer.Write(HtmlTextWriter.TagRightChar);
            writer.WriteLine();
        }


        
private void optgroupEndTag(HtmlTextWriter writer) 
        
{
            writer.WriteEndTag(
"optgroup");
            writer.WriteLine();
        }

        
        
//调用
        public NewDropDownList() 
        
{
            ListItem li1 
= new ListItem();
            li1.Attributes.Add(
"optgroup",li.Text);
            Items.Add(li1);
            
            ListItem li2
= new ListItem();
            Items.Add(li2);
            
            ListItem li3
= new ListItem();
            Items.Add(li3);
            
        }

    }
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值