DropDownList详解

厉令
2023-12-01


在.net中,DropDownList和ListBox是最常用的两个LIST控件,我的学习笔记也从这里开始吧!
一、DropDownList
命名空间:System.Web.UI.WebControls
程序集:System.Web(在 system.web.dll 中)

一些常用的属性:
DataMember 当数据源包含多个不同的数据项列表时,获取或设置数据绑定控件绑定到的数据列表的名称。(从 DataBoundControl 继承。)

DataSource 获取或设置对象,数据绑定控件从该对象中检索其数据项列表。(从 BaseDataBoundControl 继承。) 

DataSourceID 获取或设置控件的 ID,数据绑定控件从该控件中检索其数据项列表。(从 DataBoundControl 继承。) 

DataTextField 获取或设置为列表项提供文本内容的数据源字段。(从 ListControl 继承。) 

DataTextFormatString 获取或设置格式化字符串,该字符串用来控制如何显示绑定到列表控件的数据。(从 ListControl 继承。) 

DataValueField 获取或设置为各列表项提供值的数据源字段。(从 ListControl 继承。) 

Items 获取列表控件项的集合。(从 ListControl 继承。)

SelectedIndex 已重写。获取或设置 DropDownList 控件中的选定项的索引。 

SelectedItem 获取列表控件中索引最小的选定项。(从 ListControl 继承。如果列表控件只允许一个选项,则使用此属性可获取选定项的各个属性。如果列表控件允许多个选项,则使用此属性可获取列表控件中索引最小的选定项的属性。
) 

SelectedValue 获取列表控件中选定项的值,或选择列表控件中包含指定值的项。(从 ListControl 继承。) 

Text 获取或设置 ListControl 控件的 SelectedValue 属性。(从 ListControl 继承。) 

公共方法:

DataBind 已重载。 将数据源绑定到被调用的服务器控件及其所有子控件。 (从 BaseDataBoundControl 继承。) 

FindControl 已重载。 在当前的命名容器中搜索指定的服务器控件。 (从 Control 继承。) 

GetType 获取当前实例的 Type。 (从 Object 继承。) 

公共事件
SelectedIndexChanged 当列表控件的选定项在信息发往服务器之间变化时发生。(从 ListControl 继承。) 

TextChanged 当 Text 和 SelectedValue 属性更改时发生。(从 ListControl 继承。) 


下面向大家分享我在网站设计中用到dropdownlist的一些经验和网上看到的个人觉得对我有所指点的代码,上传的附件为都自己所写,比较简单,但比较全,包括数据库sqldatasource与dropdownlist,gridview的应用,


DropDown List 详解

DropDownList 控件用于创建下拉列表。DropDownList 控件中的每个可选项都是由 ListItem 元素定义的!
提示:该控件支持数据绑定!
DropDownList 控件是一个下拉式的选单,功能和 RadioButtonList Web控件很类似,提供用户在一群选项中选择一个;不过RadioButtonList Web控件适合使用在较少量的选项群组项目,而DropDownList Web 控件则适合用来管理大量的选项群组项目。

一、DropDownList 控件属性

1、AutoPostBack属性:用于设置当改变选项内容时,,是否自动回送到服务器。True表示回送;False(默认)表示不回送。
2、DataSource属性:用于指定填充列表控件的数据源。
3、DataTextField属性:用于指定DataSource中的一个字段,该字段的值对应于列表项的Text属性。
4、 DataValueField属性:用于指定DataSource中的一个字段,该字段的值对应于列表项的Value属性。
5、Items属性:表示列表中各个选项的集合,如DropDownList.Items(i)
表示第i个选项,i从0开始。每个选项都有以下3个基本属性:
Text 属性:表示每个选项的文本。
Value属性:表示每个选项的选项值。
Selected属性:表示该选项是否被选中。
Count属性:通过Items.Count属性可获得DropDownList控件的选项数;
Add方法:通过items.Add方法可以向 DropDownList控件添加选项;
Remove方法:通过items.Remove方法,可从DropDownList控件中删除指定的选项;
Insert方法:通过items.insert方法,可将一个新的选项插入到DropDownList控件中;
Clear方法:通过items.clear方法可以清空DropDownList控件中的选项。
6、SelectedIndex属性:用于获取下拉列表中选项的索引值。如果未选定任何项,则返回值-1(负1)。
7、SelectedItem属性:用于获取列表中的选定项。通过该属性可获得选定项的Text 和Value属性值。
8、SelectedValue属性:用于获取下拉列表中选定项的值。
9、 SelectedIndexchanged事件:当用户选择了下拉列表中的任意选项时,都将引发SelectedIndexChanged事件。

二、使用语法
代码
<ASP:DropDownList

    Id="控件名称"

    Runat="Server"

     False"

    DataSource="<%数据源%>"

    DataTextField="数据源的字段"

    DataValueField="数据源的字段"

    OnSelectedIndexChanged="事件程序名称"

>

    <ASP:ListItem/>

</ASP:DropDownList>


一次性在同一个table绑定多个DropDownlist,并且去掉重复项(即代替distinct),从而提高性能。 收藏
代码
private void BindDropDownList(DropDownList ddl2, DropDownList ddl3, DropDownList ddl4, DropDownList ddl5)
        {
                string conn = cs.GetDsn();
                SqlConnection cn = new SqlConnection(conn);
                string strSqlDDL = "select Country,CustName, Substring(CONVERT(varchar(100), ActInstDate, 101),1,2) ActInstDate,ResellerName from    tbcalicoinfo where surveystatus='Completed'";
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(strSqlDDL, cn);
                cn.Open();
                da.Fill(ds, "tbcalicoinfo");
                DataTable dt = new DataTable();           
                ds.Tables["tbcalicoinfo"].DefaultView.RowFilter = "country is not null";//RowFilter 过滤
                ds.Tables["tbcalicoinfo"].DefaultView.Sort = "country asc";    //Sort 排序
                ddl2.DataSource = ds.Tables["tbcalicoinfo"].DefaultView.ToTable(true, "country");// ToTable去重复
                ddl2.DataTextField = "country";
                ddl2.DataBind();
                ddl2.Items.Insert(0, new ListItem("--All--", "All"));

                ds.Tables["tbcalicoinfo"].DefaultView.RowFilter = "ActInstDate is not null";
                ds.Tables["tbcalicoinfo"].DefaultView.Sort = "ActInstDate asc";
                ddl3.DataSource = ds.Tables["tbcalicoinfo"].DefaultView.ToTable(true, "ActInstDate");;
                ddl3.DataTextField = "ActInstDate";
                ddl3.DataBind();
                ddl3.Items.Insert(0, new ListItem("--All--", "All"));

                //DataRow[] dr2 = dt.Select("ResellerName is not null","ResellerName asc");
                ds.Tables["tbcalicoinfo"].DefaultView.RowFilter = "ResellerName is not null";
                ds.Tables["tbcalicoinfo"].DefaultView.Sort = "ResellerName asc";
                ddl4.DataSource = ds.Tables["tbcalicoinfo"].DefaultView.ToTable(true, "ResellerName");
                ddl4.DataTextField = "ResellerName";
                ddl4.DataBind();
                ddl4.Items.Insert(0, new ListItem("--All--", "All"));

                ds.Tables["tbcalicoinfo"].DefaultView.RowFilter = "CustName is not null";
                ds.Tables["tbcalicoinfo"].DefaultView.Sort = "CustName asc";
                ddl5.DataSource = ds.Tables["tbcalicoinfo"].DefaultView.ToTable(true, "CustName");
                ddl5.DataTextField = "CustName";
                ddl5.DataBind();
                ddl5.Items.Insert(0, new ListItem("--All--", "All"));
                cn.Close();

        }



实现DropDownList无刷新二级联动
一、数据库设计:
字段名 数据类型 说明
ClassID 自动编号 类编号
ClassName varchar(8) 类名
UpClassID int(4) 上级类编号
ClassLevel int(4) 类级别,1为大类,2为小类
二涉及代码
1、首先,我们新建一个页面DropTest.aspx,在其中放入两个DropDownList控件:DropDownList1和DropDownList2,其完整代码如下:
页面设计代码
代码
<%@ Page language="c#" Codebehind="DropTest.aspx.cs" Inherits="studyWEB.DropTest" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm2</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"; name="vs_targetSchema">
<script>
function load(ClassID){ //ClassID为接收传递的大类编号
var drp2 = document.getElementByIdx_x("DropDownList2");
function RemoveAll(oElem) { //清除DropDownList2的所有项
var i = 0;
for (i = oElem.length; i >= 0; i--){
oElem.options.remove(i);
}
}
RemoveAll(drp2)
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
var oDoc = new ActiveXObject("MSXML2.DOMDocument");
oHttpReq.open("POST", "DropChild.aspx?ClassID="+ClassID, false); //调用读取小类数据的页面,将大类
// 编号值传递过去
oHttpReq.send("");
result = oHttpReq.responseText;
oDoc.loadXML(result);
items1 = oDoc.selectNodes("//CLASSNAME/Table/ClassName"); //读取所有请求大类所属小类的类名
items2 = oDoc.selectNodes("//CLASSNAME/Table/ClassID"); //读取所有请求大类所属小类的编号
var itemsLength=items1.length;
for(i=0;i<itemsLength;i++) //将小类的类名和编号赋予DropDownList2
{
var newOption = document.createElement_x("OPTION");
newOption.text=items1[i].text;
newOption.value=items2[i].text;
drp2.options.add(newOption);
}
}
</script>
</HEAD>
<body MS_POSITIONING="flowLayout">
<form id="Form1" method="post" runat="server">
<asp:DropDownList id="DropDownList1" runat="server"></asp:DropDownList>
<asp:DropDownList id="DropDownList2" runat="server"></asp:DropDownList>
<asp:TextBox id="TH" runat="server" BorderStyle="None" ForeColor="White" BorderColor="White"></asp:TextBox>
<asp:Label id="Label1" runat="server"></asp:Label>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
</form>
</body>
</HTML>

该页面的后台文件(DropDownList1.aspx.cs)中 Page_Load内的代码如下:
代码

pageload代码
if(!this.IsPostBack)
{
SqlConnection con = new SqlConnection("server=localhost;database=gswebDB;uid=sa;pwd=;");
SqlDataAdapter da = new SqlDataAdapter("select ClassName,ClassID from classname where ClassLevel=1",con);
DataSet ds = new DataSet();
da.Fill(ds);
this.DropDownList1.DataSource=ds.Tables[0].DefaultView;
this.DropDownList1.DataTextField = "ClassName";
this.DropDownList1.DataValueField = "ClassID";
this.DropDownList1.DataBind();
this.DropDownList1.Attributes.Add("onchange","load(this.options[this.selectedIndex].value)"); //将ClassID作为参数传递给脚本函数load(ClassID),如果要传递的是ClassName,应将value改为innerText,但如果大类为中文,则调用小类时出现无法显示的问题
// this.DropDownList2.Attributes.Add("onChange","javascript:document.Form1.TH.value=this.options[this.selectedIndex].value;"); //读取DropDownList2的值,将其赋给一个TextBox控件TH,以获取DropDownList2的值,

此页面实现如下功能:首先从数据库内读取所有类级别为1(即大类)的类名和类编号,绑定到DropDownList1控件上;然后通过 DropDownList1的Attributes属性调用javascript函数load(ClassID);load()函数通过调用 DropChild.aspx页面,读取XML流,得到大类所属小类的ClassName和ClassID。
2、新建 DropChild.aspx页面文件,其中不插入任何控件和文本,只在其后台文件(DropChild.aspx.cs)中的Page_Load中加入以下代码:
代码
if(this.Request["ClassID"]!=null)
{
int state = Convert.ToInt32(this.Request["ClassID"]);
SqlConnection con = new SqlConnection("server=localhost;database=gswebDB;uid=sa;pwd=;");
SqlDataAdapter da = new SqlDataAdapter("select ClassName,ClassID from classname where UpClassID='"+state+"'",con);
DataSet ds = new DataSet("CLASSNAME");
da.Fill(ds);
XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Response.ContentEncoding);
writer.Formatting = Formatting.Indented;
writer.Indentation = 4;
writer.IndentChar = ' ';
ds.WriteXml(writer);
writer.Flush();
Response.End();
writer.Close();


该方法得到用户选择的大类的编号,通过查询以后得到一个DataSet对象,使用该对象的WriteXML方法直接将内容写到 Response.OutputStream里面然后传递到客户端,客户端的load方法通过result =oHttpReq.responseText;句话得到一个XML字符串,最后解析此串。
另外,测试获取DropDownList2值,添加了TextBox控件TH,当点击Button时,处理事件代码如下:
代码

private void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text=TH.Text;
}

次方法为转载,对我有所指点,分享给大家
 类似资料: