二级DropDownList控件源码

2024-04-07 17:48

本文主要是介绍二级DropDownList控件源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

二级DropDownList控件源码

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

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

源码如下:
using  System.Text;
using  System.Globalization;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.HtmlControls;
using  System.Web.UI.Design;
using  System;
using  System.Drawing.Design;
using  System.Drawing;
using  System.Data;
using  System.Collections;
using  System.ComponentModel;
using  System.ComponentModel.Design;
using  System.Collections.Specialized;


namespace  Flyangel.Component.WebUI
{
    
/// <summary>
    
/// AutoSelectDropList 的摘要说明。
    
/// </summary>

    [ToolboxData("<{0}:AutoSelectDropList runat=server></{0}:AutoSelectDropList>")]
    
public class AutoSelectDropList : Control, INamingContainer,IPostBackEventHandler,IPostBackDataHandler
    
{
        DropDownList _childdropdownlist 
= new DropDownList();
        DropDownList _fatherdropdownlist 
= new DropDownList();
        HtmlInputHidden _hideinput 
= new HtmlInputHidden();

        
#region 属性

        
数据源设置

        
所属FORM的ID名称

        
ChildID设置,用来进行子栏目的选择,并反向控制父栏的选择

        
数据字段设置

        


        
#endregion



        
public void RenderAtDesignTime()
        
{
            
if (!Page.IsPostBack)
            
{
                CreateChildControls();
            }

        }


        
protected override void CreateChildControls()
        
{

            Controls.Clear();

            _hideinput.ID 
= "SCvalue";
            _hideinput.Value 
= "0";
            Controls.Add(_hideinput);

            _fatherdropdownlist.ID 
= "fatherid";
            _fatherdropdownlist.Attributes.Add(
"onChange","changelocation(document." + _formname + "." + this.ClientID + "_fatherid.options[document." + _formname + "." + this.ClientID + "_fatherid.selectedIndex].value)");
            ListItem _newli 
= new ListItem();
            _newli.Text 
= "一级栏目";
            _newli.Value 
= "0";
            _fatherdropdownlist.Items.Add(_newli);

            
if (SetSelectedChildID != "0")
            
{
                GetFatherIDFormChildID();
            }


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

            }

            Controls.Add(_fatherdropdownlist);
            _fatherdropdownlist.SelectedIndex 
= _tempfatheridstr;

            _childdropdownlist.ID 
= "childid";
            _childdropdownlist.Attributes.Add(
"onChange","changechild(document." + _formname + "." + this.ClientID + "_childid.options[document." + _formname + "." + this.ClientID + "_childid.selectedIndex].value)");

            
int _tempchildidstr = 0;
            
if (SetSelectedChildID != "0")
            
{
                DataView _temdv 
= new DataView(DataSource.Tables[1]);
                
string _filterstr = _parentid + " = " + SetSelectedFatherID;
                _temdv.RowFilter 
= _filterstr;

                
for (int jj=0;jj<_temdv.Count;jj++)
                
{
                    ListItem _newlijai 
= new ListItem();
                    _newlijai.Value 
= _temdv[jj][_childfieldid].ToString();
                    _newlijai.Text 
= _temdv[jj][_childfieldname].ToString();
                    _childdropdownlist.Items.Add(_newlijai);
                    
if (SetSelectedChildID == _temdv[jj][_childfieldid].ToString())
                    
{
                        _tempchildidstr 
= jj;
                    }

                }

            }

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

            Controls.Add(_childdropdownlist);
            _childdropdownlist.SelectedIndex 
= _tempchildidstr;

            AddClientScript();
        }


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

            }

        }

        
#region IPostBackEventHandler Implementation

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

        public void RaisePostBackEvent(string args)
        
{
        }



        
#endregion


        
IPostBackDataHandler Implementation
        
PageChanged Event

        
OnPageChanged Method

        
private void AddClientScript()
        
{
            
if(!Page.IsClientScriptBlockRegistered("clientScript"))
            
{
                StringBuilder stringScript 
= new StringBuilder() ;
                stringScript.Append(
"<!-- 设计:flash1313699@hotmail.com   QQ:3337002 --> ");
                stringScript.Append(
"<script language="javascript"> ");
                stringScript.Append(
"var onecount; ");
                stringScript.Append(
"subcat = new Array(); ");

                
int _temi = DataSource.Tables[0].Rows.Count;
                
for(int i = 0; i<_temi;i++)
                
{
                    stringScript.Append(
"subcat[" + i + "] = new Array("二级栏目","" + DataSource.Tables[0].Rows[i][_fatherfieldid].ToString() + "","0"); ");
                }

                
int _temj = DataSource.Tables[1].Rows.Count;
                
for(int j = 0; j<_temj;j++)
                
{
                    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() + ""); ");
                }

                stringScript.Append(
"subcat[" + (_temj + _temi) + "] = new Array("二级栏目","0","0"); ");
                stringScript.Append(
"onecount=" + (_temj + _temi + 1+ " ");
                stringScript.Append(
" ");
                stringScript.Append(
"function changelocation(locationid) ");
                stringScript.Append(
"{ ");
                stringScript.Append(
"  document." + _formname + "." + this.ClientID + "_SCvalue.value = '0';  ");
                stringScript.Append(
"  document." + _formname + "." + this.ClientID + "_childid.length = 0;  ");
                stringScript.Append(
"  var locationid=locationid; ");
                stringScript.Append(
"  var i; ");
                stringScript.Append(
"  for (i=0;i < onecount; i++) ");
                stringScript.Append(
"  { ");
                stringScript.Append(
"    if (subcat[i][1] == locationid) ");
                stringScript.Append(
"    { ");
                stringScript.Append(
"      document." + _formname + "." + this.ClientID + "_childid.options[document." + _formname + "." + this.ClientID + "_childid.length] = new Option(subcat[i][0], subcat[i][2]); ");
                stringScript.Append(
"    } ");
                stringScript.Append(
"  } ");
                stringScript.Append(
"} ");

                stringScript.Append(
"function changechild(str) ");
                stringScript.Append(
"{ ");
                stringScript.Append(
"  document." + _formname + "." + this.ClientID + "_SCvalue.value = str;  ");
                stringScript.Append(
"} ");

                stringScript.Append(
"</SCRIPT> ");
                stringScript.Append(
"<!-- 设计:flash1313699@hotmail.com   QQ:3337002 --> ");
                Page.RegisterClientScriptBlock(
"clientScript", stringScript.ToString());
            }

        }

    }

}

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

评论

# re: 二级DropDownList控件源码 代码比较长~~:)
不过是C#的。支持一下
用Js是不是更短或者说方便一些
2004-09-25 00:50 | DEV

re: 二级DropDownList控件源码

:),其实WEB控件中很多是无法离开JS的。换句话说,WEB本身是无法离开JS的。

其实只是无聊的一种做法。为了让自己方便,而不是去实现一个大而全的万能公式。
2004-09-25 00:59 | flyangel

这篇关于二级DropDownList控件源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/883261

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

red5-server源码

red5-server源码:https://github.com/Red5/red5-server

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。