二级DropDownList控件源码

原创 2004年10月18日 16:58:00

二级DropDownList控件源码

将源码放于此,不过感觉并不是很满意。
有一个小问题,就是获取小类的值,因为控件中加入了一个功能,就是如果在初始时带入小类的值时,控件会自动将小类相应的选项选中,并带动大类的选项,这样就一个冲突:获取小类的值与初始小类的值带来的影响。

又开始忙了,再琢磨一下后修改。

源码如下:
None.gifusing System.Text;
None.gif
using System.Globalization;
None.gif
using System.Web;
None.gif
using System.Web.UI;
None.gif
using System.Web.UI.WebControls;
None.gif
using System.Web.UI.HtmlControls;
None.gif
using System.Web.UI.Design;
None.gif
using System;
None.gif
using System.Drawing.Design;
None.gif
using System.Drawing;
None.gif
using System.Data;
None.gif
using System.Collections;
None.gif
using System.ComponentModel;
None.gif
using System.ComponentModel.Design;
None.gif
using System.Collections.Specialized;
None.gif
None.gif
None.gif
namespace Flyangel.Component.WebUI
ExpandedBlockStart.gif
{
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// AutoSelectDropList 的摘要说明。
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    [ToolboxData("<{0}:AutoSelectDropList runat=server></{0}:AutoSelectDropList>")]
InBlock.gif    
public class AutoSelectDropList : Control, INamingContainer,IPostBackEventHandler,IPostBackDataHandler
ExpandedSubBlockStart.gif    
{
InBlock.gif        DropDownList _childdropdownlist 
= new DropDownList();
InBlock.gif        DropDownList _fatherdropdownlist 
= new DropDownList();
InBlock.gif        HtmlInputHidden _hideinput 
= new HtmlInputHidden();
InBlock.gif
ExpandedSubBlockStart.gif        
#region 属性
InBlock.gif
ContractedSubBlock.gif        
数据源设置
InBlock.gif
ContractedSubBlock.gif        
所属FORM的ID名称
InBlock.gif
ContractedSubBlock.gif        
ChildID设置,用来进行子栏目的选择,并反向控制父栏的选择
InBlock.gif
ContractedSubBlock.gif        
数据字段设置
InBlock.gif
ContractedSubBlock.gif        
dot.gif
InBlock.gif
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
InBlock.gif
InBlock.gif        
public void RenderAtDesignTime()
ExpandedSubBlockStart.gif        
{
InBlock.gif            
if (!Page.IsPostBack)
ExpandedSubBlockStart.gif            
{
InBlock.gif                CreateChildControls();
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
protected override void CreateChildControls()
ExpandedSubBlockStart.gif        
{
InBlock.gif
InBlock.gif            Controls.Clear();
InBlock.gif
InBlock.gif            _hideinput.ID 
= "SCvalue";
InBlock.gif            _hideinput.Value 
= "0";
InBlock.gif            Controls.Add(_hideinput);
InBlock.gif
InBlock.gif            _fatherdropdownlist.ID 
= "fatherid";
InBlock.gif            _fatherdropdownlist.Attributes.Add(
"onChange","changelocation(document." + _formname + "." + this.ClientID + "_fatherid.options[document." + _formname + "." + this.ClientID + "_fatherid.selectedIndex].value)");
InBlock.gif            ListItem _newli 
= new ListItem();
InBlock.gif            _newli.Text 
= "一级栏目";
InBlock.gif            _newli.Value 
= "0";
InBlock.gif            _fatherdropdownlist.Items.Add(_newli);
InBlock.gif
InBlock.gif            
if (SetSelectedChildID != "0")
ExpandedSubBlockStart.gif            
{
InBlock.gif                GetFatherIDFormChildID();
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
int _tempfatheridstr = 0;
InBlock.gif            
for(int i = 0; i<(DataSource.Tables[0].Rows.Count);i++)
ExpandedSubBlockStart.gif            
{
InBlock.gif                ListItem _newlii 
= new ListItem();
InBlock.gif                _newlii.Value 
= DataSource.Tables[0].Rows[i][_fatherfieldid].ToString();
InBlock.gif                _newlii.Text 
= DataSource.Tables[0].Rows[i][_fatherfieldname].ToString();
InBlock.gif                _fatherdropdownlist.Items.Add(_newlii);
InBlock.gif                
if (SetSelectedFatherID == DataSource.Tables[0].Rows[i][_fatherfieldid].ToString())
ExpandedSubBlockStart.gif                
{
InBlock.gif                    _tempfatheridstr 
= i+1;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            Controls.Add(_fatherdropdownlist);
InBlock.gif            _fatherdropdownlist.SelectedIndex 
= _tempfatheridstr;
InBlock.gif
InBlock.gif            _childdropdownlist.ID 
= "childid";
InBlock.gif            _childdropdownlist.Attributes.Add(
"onChange","changechild(document." + _formname + "." + this.ClientID + "_childid.options[document." + _formname + "." + this.ClientID + "_childid.selectedIndex].value)");
InBlock.gif
InBlock.gif            
int _tempchildidstr = 0;
InBlock.gif            
if (SetSelectedChildID != "0")
ExpandedSubBlockStart.gif            
{
InBlock.gif                DataView _temdv 
= new DataView(DataSource.Tables[1]);
InBlock.gif                
string _filterstr = _parentid + " = " + SetSelectedFatherID;
InBlock.gif                _temdv.RowFilter 
= _filterstr;
InBlock.gif
InBlock.gif                
for (int jj=0;jj<_temdv.Count;jj++)
ExpandedSubBlockStart.gif                
{
InBlock.gif                    ListItem _newlijai 
= new ListItem();
InBlock.gif                    _newlijai.Value 
= _temdv[jj][_childfieldid].ToString();
InBlock.gif                    _newlijai.Text 
= _temdv[jj][_childfieldname].ToString();
InBlock.gif                    _childdropdownlist.Items.Add(_newlijai);
InBlock.gif                    
if (SetSelectedChildID == _temdv[jj][_childfieldid].ToString())
ExpandedSubBlockStart.gif                    
{
InBlock.gif                        _tempchildidstr 
= jj;
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
else
ExpandedSubBlockStart.gif            
{
InBlock.gif                ListItem _newliji 
= new ListItem();
InBlock.gif                _newliji.Text 
= "二级栏目";
InBlock.gif                _newliji.Value 
= "0";
InBlock.gif                _childdropdownlist.Items.Add(_newliji);
ExpandedSubBlockEnd.gif            }

InBlock.gif            Controls.Add(_childdropdownlist);
InBlock.gif            _childdropdownlist.SelectedIndex 
= _tempchildidstr;
InBlock.gif
InBlock.gif            AddClientScript();
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
private void GetFatherIDFormChildID()
ExpandedSubBlockStart.gif        
{
InBlock.gif            
for(int j = 0; j<(DataSource.Tables[1].Rows.Count);j++)
ExpandedSubBlockStart.gif            
{
InBlock.gif                
if (SetSelectedChildID == DataSource.Tables[1].Rows[j][_childfieldid].ToString())
ExpandedSubBlockStart.gif                
{
InBlock.gif                    SetSelectedFatherID 
= DataSource.Tables[1].Rows[j][_parentid].ToString();
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockStart.gif        
#region IPostBackEventHandler Implementation
InBlock.gif
ExpandedSubBlockStart.gif        
/// <summary>
InBlock.gif        
/// 实现<see cref="IPostBackEventHandler"/> 接口,使控件能够处理将窗体发送到服务器时引发的事件。
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="args"></param>

InBlock.gif        public void RaisePostBackEvent(string args)
ExpandedSubBlockStart.gif        
{
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif        
#endregion

InBlock.gif
ContractedSubBlock.gif        
IPostBackDataHandler Implementation
ContractedSubBlock.gif        
PageChanged Event
InBlock.gif
ContractedSubBlock.gif        
OnPageChanged Method
InBlock.gif
InBlock.gif        
private void AddClientScript()
ExpandedSubBlockStart.gif        
{
InBlock.gif            
if(!Page.IsClientScriptBlockRegistered("clientScript"))
ExpandedSubBlockStart.gif            
{
InBlock.gif                StringBuilder stringScript 
= new StringBuilder() ;
InBlock.gif                stringScript.Append(
"<!-- 设计:flash1313699@hotmail.com   QQ:3337002 --> ");
InBlock.gif                stringScript.Append(
"<script language="javascript"> ");
InBlock.gif                stringScript.Append(
"var onecount; ");
InBlock.gif                stringScript.Append(
"subcat = new Array(); ");
InBlock.gif
InBlock.gif                
int _temi = DataSource.Tables[0].Rows.Count;
InBlock.gif                
for(int i = 0; i<_temi;i++)
ExpandedSubBlockStart.gif                
{
InBlock.gif                    stringScript.Append(
"subcat[" + i + "] = new Array("二级栏目","" + DataSource.Tables[0].Rows[i][_fatherfieldid].ToString() + "","0"); ");
ExpandedSubBlockEnd.gif                }

InBlock.gif                
int _temj = DataSource.Tables[1].Rows.Count;
InBlock.gif                
for(int j = 0; j<_temj;j++)
ExpandedSubBlockStart.gif                
{
InBlock.gif                    stringScript.Append(
"subcat[" + (_temi + j) + "] = new Array("" + DataSource.Tables[1].Rows[j][_childfieldname].ToString() + "","" + DataSource.Tables[1].Rows[j][_parentid].ToString() + "","" + DataSource.Tables[1].Rows[j][_childfieldid].ToString() + ""); ");
ExpandedSubBlockEnd.gif                }

InBlock.gif                stringScript.Append(
"subcat[" + (_temj + _temi) + "] = new Array("二级栏目","0","0"); ");
InBlock.gif                stringScript.Append(
"onecount=" + (_temj + _temi + 1+ " ");
InBlock.gif                stringScript.Append(
" ");
InBlock.gif                stringScript.Append(
"function changelocation(locationid) ");
InBlock.gif                stringScript.Append(
"{ ");
InBlock.gif                stringScript.Append(
"  document." + _formname + "." + this.ClientID + "_SCvalue.value = '0';  ");
InBlock.gif                stringScript.Append(
"  document." + _formname + "." + this.ClientID + "_childid.length = 0;  ");
InBlock.gif                stringScript.Append(
"  var locationid=locationid; ");
InBlock.gif                stringScript.Append(
"  var i; ");
InBlock.gif                stringScript.Append(
"  for (i=0;i < onecount; i++) ");
InBlock.gif                stringScript.Append(
"  { ");
InBlock.gif                stringScript.Append(
"    if (subcat[i][1] == locationid) ");
InBlock.gif                stringScript.Append(
"    { ");
InBlock.gif                stringScript.Append(
"      document." + _formname + "." + this.ClientID + "_childid.options[document." + _formname + "." + this.ClientID + "_childid.length] = new Option(subcat[i][0], subcat[i][2]); ");
InBlock.gif                stringScript.Append(
"    } ");
InBlock.gif                stringScript.Append(
"  } ");
InBlock.gif                stringScript.Append(
"} ");
InBlock.gif
InBlock.gif                stringScript.Append(
"function changechild(str) ");
InBlock.gif                stringScript.Append(
"{ ");
InBlock.gif                stringScript.Append(
"  document." + _formname + "." + this.ClientID + "_SCvalue.value = str;  ");
InBlock.gif                stringScript.Append(
"} ");
InBlock.gif
InBlock.gif                stringScript.Append(
"</SCRIPT> ");
InBlock.gif                stringScript.Append(
"<!-- 设计:flash1313699@hotmail.com   QQ:3337002 --> ");
InBlock.gif                Page.RegisterClientScriptBlock(
"clientScript", stringScript.ToString());
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

posted on 2004-09-24 00:20 flyangel 阅读(390) 评论(2)  编辑 收藏

【.net基础】--DropDownList控件:两级联动

最近学习Asp.Net,发现很多控件都很有意思,例如:Canlender,AdRotator等。以前只知道有这样的页面效果,但是对这些控件了解并不多。不怕不知道,就怕不知道。...
  • successA
  • successA
  • 2015年05月11日 16:45
  • 1698

DropDownList控件的基本用法

  protected void Page_Load(object sender, EventArgs e)    ...{        if (!IsPostBack)        ...{  ...
  • wangjun_pfc
  • wangjun_pfc
  • 2007年10月04日 10:37
  • 1329

C# DropDownList二级联动问题

需求:点击第一个dropdownlist1,dropdownlist2中的数据根据dropdownlist1选中的值进行变化。 步骤1:拖动两个dropdownlist,分别命名为dropd...
  • redredredlu
  • redredredlu
  • 2015年05月05日 09:21
  • 1908

asp.net中DropDownList控件各种属性研究汇总

.aspx代码如下: AutoPostBack="True" > ...
  • yayun0516
  • yayun0516
  • 2014年12月08日 10:02
  • 1851

asp.net中dropdownlist控件实例操作

.aspx代码如下: DropDownList 选定某一项后,自动列出该项的index,te...
  • yayun0516
  • yayun0516
  • 2014年11月27日 21:37
  • 1576

DropDownList控件的使用(方法,属性)

在.net中,DropDownList和ListBox是最常用的两个LIST控件,我的学习笔记也从这里开始吧! 一、DropDownList 命名空间:System.Web.UI.WebContr...
  • shan1774965666
  • shan1774965666
  • 2014年09月16日 16:24
  • 3842

如何使用验证控件对DropDownList进行验证

      呜呜哇!毕设烦死人啦!#……&%¥&&!      好了,发泄完毕,今天遇到的问题是:如何使用验证控件对DropDownList进行验证。      话说我想让用户提交表单前必须要选择下拉...
  • iamyina
  • iamyina
  • 2009年03月13日 10:23
  • 1816

可输入的DropDownList扩展控件(C#)

首先,建立一个名字为ExtendWebControls的C#用户自定义Web控件的工程        然后,添加一个DropDownList.cs文件,类型为Web自定义控件        添加如下代...
  • JOHNCOOLS
  • JOHNCOOLS
  • 2006年02月19日 14:01
  • 1788

关于asp.net中dropdownlist控件选中后在次回传页面后还原到默认

关于asp.net中dropdownlist控件选中后在次回传页面后还原到默认 这类问题分两种      1.在窗体加载中没有判断回传我们只要在page_load中增加         if(!isp...
  • lem12
  • lem12
  • 2009年05月16日 15:45
  • 2595

数据控件(GridView)使用模板列响应子控件(dropdownlist)事件

换了一个东家后,终于可以在上班时,偷偷发布一下BLOG文章了。转正题:通常在数据控件(比如:datagird,gridview)里使用模板列,并向模板列里添加子控件(如:dropdownlist,ch...
  • Bomb_Leo
  • Bomb_Leo
  • 2007年09月18日 11:11
  • 1790
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二级DropDownList控件源码
举报原因:
原因补充:

(最多只允许输入30个字)